第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

防止直接 url 訪(fǎng)問(wèn)剃刀頁(yè)面處理程序

防止直接 url 訪(fǎng)問(wèn)剃刀頁(yè)面處理程序

C#
胡子哥哥 2022-12-31 11:09:10
我制作了剃刀頁(yè)面來(lái)注銷(xiāo)用戶(hù)。當(dāng)經(jīng)過(guò)身份驗(yàn)證的用戶(hù)訪(fǎng)問(wèn)路由時(shí)/account/logout,我想向他顯示帶有成功消息的頁(yè)面,如果用戶(hù)是匿名的,則頁(yè)面未授權(quán)。但是,不能通過(guò)直接 url 輸入訪(fǎng)問(wèn)此成功頁(yè)面。以下代碼運(yùn)行良好,除了任何人都可以導(dǎo)航到/account/logout/success正常頁(yè)面(并且由于它不負(fù)責(zé)注銷(xiāo),因此可能會(huì)造成混淆)。public class LogoutModel : CustomPageModel{    private readonly SignInManager _signInManager;    public LogoutModel(SignInManager signInManager) => _signInManager = signInManager;    public async Task<IActionResult> OnGetAsync()    {        if (_signInManager.IsSignedIn(User))        {            await _signInManager.SignOutAsync();            return RedirectToPage("Logout", "Success");        }        return Unauthorized();    }    public void OnGetSuccess()    {    }}如何防止直接訪(fǎng)問(wèn)處理程序 OnGetSuccess?
查看完整描述

3 回答

?
米琪卡哇伊

TA貢獻(xiàn)1998條經(jīng)驗(yàn) 獲得超6個(gè)贊

我已經(jīng)通過(guò)使用檢查 Referer 標(biāo)頭的 Attribute 和 IPageFilter 解決了這個(gè)問(wèn)題。


首先我創(chuàng)建了屬性


[AttributeUsage(AttributeTargets.Method)]

public class ChildHandlerAttribute : Attribute

{

}

然后我GetOnSuccess()用它裝飾了處理程序


[ChildHandler]

public void OnGetSuccess()

{

}

然后我實(shí)現(xiàn)了檢查子處理程序的 Referer 標(biāo)頭的過(guò)濾器。


public class ChildHandlerAsyncPageFilter : IAsyncPageFilter

{

    public async Task OnPageHandlerExecutionAsync(PageHandlerExecutingContext context, PageHandlerExecutionDelegate next)

    {

        var pageHandlerExecutedContext = await next();


        if (pageHandlerExecutedContext.HandlerMethod?.MethodInfo.GetCustomAttribute<ChildHandlerAttribute>() == null)

        {

            return;

        }


        var referrer = context.HttpContext.Request.Headers["Referer"].ToString();

        var request = pageHandlerExecutedContext.HttpContext.Request;


        if (!referrer.StartsWith($"{request.Scheme}://{request.Host}"))

        {

            pageHandlerExecutedContext.Result = new NotFoundResult();

        }

    }


    public Task OnPageHandlerSelectionAsync(PageHandlerSelectedContext context) => Task.CompletedTask;

}

最后,我將過(guò)濾器添加到Startup.cs中的管道中


services.AddMvc(options =>

{

    options.Filters.Add<ChildHandlerAsyncPageFilter>();

});


查看完整回答
反對(duì) 回復(fù) 2022-12-31
?
慕少森

TA貢獻(xiàn)2019條經(jīng)驗(yàn) 獲得超9個(gè)贊

請(qǐng)回答這個(gè)問(wèn)題,了解它如何成為可能。

不確定我是否建議走那條路,因?yàn)樗悬c(diǎn)臟而且是一個(gè)不必要的復(fù)雜解決方案。您可以為登錄/注銷(xiāo)用戶(hù)返回不同的狀態(tài)消息。

注銷(xiāo).cshtml.cs

public class LogoutModel : CustomPageModel

{

    private readonly SignInManager _signInManager;


    public LogoutModel(SignInManager signInManager) => _signInManager = signInManager;


    public string StatusMessage { get; set; }


    public async Task<IActionResult> OnGetAsync()

    {

        if (_signInManager.IsSignedIn(User))

        {

            await _signInManager.SignOutAsync();

            StatusMessage = "Successfully logged out!";

            return Page();

        }

        else {

            StatusMessage = "Already logged out!";

            return Page();

        }


    }

}

注銷(xiāo).cshtml


@page

@model X.LogoutModel


@Model.StatusMessage


查看完整回答
反對(duì) 回復(fù) 2022-12-31
?
交互式愛(ài)情

TA貢獻(xiàn)1712條經(jīng)驗(yàn) 獲得超3個(gè)贊

在您的場(chǎng)景中,用戶(hù)退出并重定向?yàn)槟涿脩?hù)。所以不能說(shuō)這里只有某些用戶(hù)可以訪(fǎng)問(wèn)此操作。

你應(yīng)該用其他方式解決這個(gè)問(wèn)題。比如你可以在Action中設(shè)置cookie中的值,LogOut然后在SuccessAction中簽入。為了獲得更多安全性,請(qǐng)應(yīng)用 MVC 用于CSRF的模式。


查看完整回答
反對(duì) 回復(fù) 2022-12-31
  • 3 回答
  • 0 關(guān)注
  • 108 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)