在没有母版页的ASP.NET Web窗体中防止CSRF攻击

时间:2016-06-26 21:34:35

标签: asp.net vb.net webforms csrf

我正在审核一个大约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冲突,我正在审核的网站没有使用母版页,并且不在将母版页添加到当前更新的范围内。

1 个答案:

答案 0 :(得分:1)

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

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

当每个具有副作用的请求将ViewState发回服务器时,ASP.NET将验证ViewState值实际上是来自当前用户。

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

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

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

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