【问题标题】:Protect against CSRF attacks in ASP.NET Web Forms without Master Pages防止没有母版页的 ASP.NET Web 窗体中的 CSRF 攻击
【发布时间】:2016-10-28 20:16:18
【问题描述】:

我正在审查一个已有 7 年历史的 ASP.NET 网站的安全性。在创建该站点时,Microsoft 的指导是将以下内容添加到一个公共基本页面(由页面背后的所有代码继承):

Protected Overrides Sub OnInit(ByVal e As System.EventArgs)
    MyBase.OnInit(e)

    If Request.IsSecureConnection = True Then
        ViewStateUserKey = Session.SessionID
    End If
End Sub

此建议来自 2005 年的以下 MSDN Article

我的问题是,这是否仍然是一种有效且有效的技术来防止 CSRF 攻击。

注意,我阅读了关于此主题的SO question,但似乎 Visual Studio 2012+ 项目自动生成的 CSRF 保护已添加到母版页。由于 CSS 冲突,我正在查看的网站未使用母版页,并且不在当前更新中添加母版页的范围内。

【问题讨论】:

  • 上述函数如何防止CSRF?

标签: asp.net vb.net webforms csrf


【解决方案1】:

是的,如果启用 ViewStateMac,这将缓解 CSRF。

这是因为每个单独的用户都将通过他们自己的密钥(即会话 ID)对 ViewState 进行身份验证。

由于在每个具有副作用的请求时都会将 ViewState POST 回服务器,因此 ASP.NET 将验证 ViewState 值是否确实来自当前用户。

因此,任何攻击者都无法构造 POST 请求来诱使受害者提交,因为他们没有受害者的会话 ID 来执行此操作。

请注意,以上假设所有具有副作用的请求都是通过回发完成的。也就是说,应用程序正在关注RFC 7231 in regards to the definition of "safe" methods,并且除了回发机制之外,没有其他处理 POST 请求的处理程序。

请注意,应用程序中的任何自定义 AJAX 请求,例如由 JQuery 发出的请求,都不会受到 CSRF 的保护,因为这些不是作为回发实现的。

建议为这些设置和检查自定义标头,例如X-Requested-With。请注意,由于各种 Flash 漏洞,您可能还需要将令牌传递到标头中以检查服务器端。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-12
    • 2015-01-15
    • 2014-08-25
    • 2018-01-08
    • 1970-01-01
    • 2015-07-08
    • 2013-04-11
    • 2010-12-20
    相关资源
    最近更新 更多