簡體   English   中英

在服務器端使用Ajax和Web Api阻止Web窗體中的CSRF

[英]Prevent CSRF in Web Forms using Ajax and Web Api in the server side

我有一個需要避免CSRF攻擊的站點。 我研究了很多時間,所有示例都在客戶端使用了這樣的功能

@functions{
    public string TokenHeaderValue()
    {
        string cookieToken, formToken;
        AntiForgery.GetTokens(null, out cookieToken, out formToken);
        return cookieToken + ":" + formToken;                
    }
}

在像這樣的ajax調用之后:

$.ajax("api/values", {
    type: "post",
    contentType: "application/json",
    data: {  }, // JSON data goes here
    dataType: "json",
    headers: {
        'RequestVerificationToken': '@TokenHeaderValue()'
    }
});

顯然,第一個代碼是MVC剃刀調用,因此在我的情況下無法使用它。 有沒有一種方法可以在不使用ASP.NET MVC的情況下使用javascript / jquery獲取此防偽令牌?

我找到了一個簡單的解決方案:

在aspx或ascx文件中,放置一個隱藏字段,如下所示:

<input type="hidden" id="hdnAntiForgeryTokens" runat="server" value=""/>

在C#端,創建如下屬性:

    protected string AntiForgeryTokens
    {
        get
        {
            string cookieToken, formToken;
            AntiForgery.GetTokens(null, out cookieToken, out formToken);
            return cookieToken + ":" + formToken;
        }
    }

並在Page_Load事件中為其分配一個值:

hdnAntiForgeryTokens.Value = AntiForgeryTokens;

之后,使用jquery讀取值:

$.ajax({
        type: "POST",
        url: //your web api url,
        data: getJason(),
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        headers: {
            'RequestVerificationToken': $('#hdnAntiForgeryTokens').val()
        },
        statusCode: {
            200: function _() {
                //success handling
            },
            500: function (){
                //error handling
            }
        }
    });

希望對其他遇到此問題的人有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM