【问题标题】:Prevent CSRF in Web Forms using Ajax and Web Api in the server side在服务器端使用 Ajax 和 Web Api 防止 Web 表单中的 CSRF
【发布时间】:2017-02-08 19:35:33
【问题描述】:

我有一个需要避免 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 razor 调用,所以我不能在我的情况下使用它。有没有办法在不使用 ASP.NET MVC 的情况下使用 javascript/jquery 获取这个 Anti-Forgery Tokens?

【问题讨论】:

    标签: javascript c# webforms csrf


    【解决方案1】:

    我找到了一个简单的解决方案:

    在 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
                }
            }
        });
    

    我希望它对遇到此问题的其他人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-24
      • 2020-11-29
      • 1970-01-01
      • 1970-01-01
      • 2017-06-13
      • 2021-04-01
      • 2014-03-06
      相关资源
      最近更新 更多