【问题标题】:Prevent Cross-Site Request Forgery防止跨站点请求伪造
【发布时间】:2014-08-31 18:48:01
【问题描述】:

我了解Cross-Site Request Forgery 并在asp.net mvc 中找到了许多博客、网络文章来处理它,但没有一个像样的链接,有用的解决方案来处理asp.net Web 应用程序中的CSRF 攻击。我运行了一个security tool在我的网站上,它报告了跨站请求伪造并显示了风险

可能会窃取或操纵客户会话和 cookie,它们可能被用来冒充合法用户,从而允许 黑客查看或更改用户记录,并以该用户身份执行交易

我的问题是如何应对 ASP.NET Web 应用程序中的 CSRF 攻击?

【问题讨论】:

    标签: c# asp.net security cookies cross-site


    【解决方案1】:

    如果您查看您发布的第二个链接,您会看到 MVC 中 Html.AntiForgeryToken() 验证的逻辑:

    void ValidateRequestHeader(HttpRequestMessage request)
    {
        string cookieToken = "";
        string formToken = "";
    
        IEnumerable<string> tokenHeaders;
        if (request.Headers.TryGetValues("RequestVerificationToken", out tokenHeaders))
        {
            string[] tokens = tokenHeaders.First().Split(':');
            if (tokens.Length == 2)
            {
                cookieToken = tokens[0].Trim();
                formToken = tokens[1].Trim();
            }
        }
        AntiForgery.Validate(cookieToken, formToken);
    }
    

    在您的网络表单应用中做同样的事情应该不难。

    请参阅THIS 答案以获得可能的解决方案。

    【讨论】:

      【解决方案2】:

      网络表单应用中的ViewState mechanism can be used to protect against CSRF

      ASP.NET 可以选择维护您的 ViewState。视图状态 指示页面提交到服务器时的状态。这 状态是通过放置在每个页面上的隐藏字段来定义的 控制。 Viewstate 可以用作 CSRF 防御,因为攻击者很难伪造有效的 视图状态。伪造一个有效的 Viewstate 并非不可能,因为它是 参数值可以通过 攻击者。但是,如果将当前会话 ID 添加到 ViewState,然后它使每个 Viewstate 都是唯一的,因此不受 CSRF

      另外关于您关于 CSRF 的其他问题:

      可能会窃取或操纵客户会话和 cookie,它们可能被用来冒充合法用户,允许黑客查看或更改用户记录,并以该用户身份执行交易

      CSRF 攻击通常不允许攻击者查看任何内容,只能代表登录用户发出请求。但是,如果存在不需要提交当前密码的更改密码选项,则攻击者可能能够使用受害者的会话调用此函数,以便攻击者随后直接以受害者用户身份登录。

      【讨论】:

        【解决方案3】:

        Global.asax 中处理的 Asp.net Web 表单应用程序中是否有相同的解决方案。

        在 MVC 中它变得非常简单,但如果旧应用程序是简单的 Web 表单并且想要在全局级别防止此类攻击,那么解决方案是什么。

        【讨论】:

          猜你喜欢
          • 2019-05-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-08-25
          • 2011-05-17
          • 2017-01-09
          • 2014-06-02
          • 2014-10-09
          相关资源
          最近更新 更多