【问题标题】:Preventing crf attacks on ajax requests in asp.net web forms防止对asp.net web表单中的ajax请求进行crf攻击
【发布时间】:2013-10-06 13:57:50
【问题描述】:

如何防止对 asp.net webforms 应用程序中的 ajax 请求的 csrf 攻击

【问题讨论】:

    标签: asp.net webforms asp.net-ajax csrf


    【解决方案1】:

    您可以创建一个令牌并将其保存在 Session["CSRF"] 中并在每个页面的 HiddenField 中呈现相同的内容。

    protected HiddenField CSRF { get; set; }
    
    protected void page_load(object s, args[] e) {
        if(Session["CSRF"]!=null) {
            this.CSRF=Session["CSRF"];
        }
        else {
            Session["CSRF"]=Guid.NewGuid().ToString();
            this.CSRF=Session["CSRF"];
        }
    }
    

    因此,每当您发送请求时,请将其添加为数据参数并在服务器端代码中进行检查。

    为每个请求传递这个 CSRF HiddenField id。

    对于 ASP.Net Ajax 调用,您可以使用 ViewState["CSRF"],因为默认情况下更新面板也会发送页面的视图状态:)

    for jQuery ajax

    var csrf_token = '<%= csrf_value %>';
    

    以下代码将为所有 ajax 请求添加此令牌

    $("body").bind("ajaxSend", function(elm, xhr, s){
    if (s.type == "POST") {
    xhr.setRequestHeader('X-CSRF-Token', csrf_token);
    }
    });
    

    【讨论】:

    • 如果您使用 jQuery 进行 ajax 调用,您始终可以使用 here 描述的方法“打印”令牌客户端
    • @cahmadzadeh,我已经在你的帮助下更新了我的答案 :) 谢谢
    【解决方案2】:

    你应该看看这个链接:Preventing Cross-Site Request Forgery (CSRF) Attacks

    简而言之:防伪令牌,作为 ASP.NET MVC 框架的一部分提供。但是,由于您使用的是 webforms,它可能会稍微复杂一些,但可以让 ASP.NET 网站同时运行 webforms 和 MVC(或查看这个已回答的问题:AntiForgery implementation in Asp.net Forms)。

    编辑:另外,为了保护 jQuery 调用,您可以使用防伪令牌并在客户端打印它(如 here 所述:

    var csrf_token = '<%= token_value %>';
    $("body").bind("ajaxSend", function(elm, xhr, s){
       if (s.type == "POST") {
          xhr.setRequestHeader('X-CSRF-Token', csrf_token);
       }
    });
    

    【讨论】:

    • 我实际上已经修复了 rails 和 java 中的 csrf 问题。我是 asp.net 的新手,并且已经阅读了您提供的链接。 stackoverflow 帖子中描述的解决方案是否也适用于 ajax 请求?
    • 这取决于您如何处理 AJAX 请求。它们是通过 jQuery.ajax 完成的,还是您使用更新面板或等效的?
    • 我们没有使用 jquery。它是 w3schools.com/ajax/ajax_xmlhttprequest_create.asp 中描述的普通 ajax。所有的请求都与一个调用各种操作的 aspx 页面对话。
    猜你喜欢
    • 2015-07-08
    • 2013-04-11
    • 1970-01-01
    • 2016-02-05
    • 1970-01-01
    • 2020-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多