CSRF / ASP.NET Web表单,“双重提交”被认为是一个问题吗?

时间:2015-07-02 15:18:43

标签: vb.net csrf

在StafOverflow社区的帮助下,我能够在我的母版页中为100多个Web表单实现以下方法,该解决方案创建了独特的防伪密钥和经过身份验证的用户信息来验证提交。 http://software-security.sans.org/developer-how-to/developer-guide-csrf

但是我很想知道是否将“双重提交”方案视为漏洞。

在上述解决方案之前,我能够做到以下, 我能够使用LINK#2并随时提交伪造请求。

解决方案后,如果我打开新浏览器,LINK#2将失败(为了确保,我已在LINK#2中更新了__EVENTVALIDATION& __VIEWSTATE)。 但是我仍然可以使用“新标签”(不是新会话)下的LINK#2提交伪造请求。

所以我的问题是,这仍然被视为漏洞吗?

以下是已实施的内容。

Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
        setAntiForgeryKey()
        AddHandler Page.PreLoad, AddressOf master_Page_PreLoad
.
.
.
End Sub

Protected Sub setAntiForgeryKey()
    Dim requestCookie = Request.Cookies(AntiXsrfTokenKey)
    Dim requestCookieGuidValue As New Guid

    If requestCookie IsNot Nothing AndAlso Guid.TryParse(requestCookie.Value, requestCookieGuidValue) Then
        _antiXsrfTokenValue = requestCookie.Value

        Page.ViewStateUserKey = _antiXsrfTokenValue
    Else
        _antiXsrfTokenValue = Guid.NewGuid().ToString("N")
        Page.ViewStateUserKey = _antiXsrfTokenValue
        Dim responseCookie = New HttpCookie(AntiXsrfTokenKey) With { _
            .HttpOnly = True, _
            .Value = _antiXsrfTokenValue _
        }
        If (FormsAuthentication.RequireSSL And Request.IsSecureConnection) Then responseCookie.Secure = True
        Response.Cookies.Set(responseCookie)
    End If
End Sub
Protected Sub master_Page_PreLoad(ByVal sender As Object, ByVal e As System.EventArgs)
    If Not Page.IsPostBack Then
        ViewState(AntiXsrfTokenKey) = Page.ViewStateUserKey
        ViewState(AntiXsrfUserNameKey) = UserID
    Else
        If (CType(ViewState(AntiXsrfTokenKey), String) <> _antiXsrfTokenValue) Or _
            (CType(ViewState(AntiXsrfUserNameKey), String) <> UserID) Then
            Throw New InvalidOperationException("Validation of Anti-XSRF token failed.")
        End If
    End If
End Sub

0 个答案:

没有答案