如何在经典的asp中实现Synchronizer Token Pattern

时间:2011-06-21 06:47:42

标签: asp-classic

防止CSRF我想在我的经典asp应用程序中实现Synchronizer Token Pattern。

我知道iI应该在session_onstart中生成一个令牌。我没有得到的是如何生成这样一个令牌,因为它应该是随机和唯一的。所以简单的Rnd()和随机化是行不通的,对吗?

此外,它应该以任何方式进行散列吗?怎么样?

感谢任何提示......

Cross-Site Request Forgery (CSRF) Prevention Cheat Sheet

2 个答案:

答案 0 :(得分:4)

我知道这个问题已被标记为已回答,但我发现此post有用(并未真正回答您的问题),特别是第二个回复引用Chris Shiflett's article解释CSRF和简单解决方案(回答你的问题加上一些)。

以下是将Chris的PHP转换为VBScript的方法:

Dim token
token = md5(GetGUID())
Session("token")=token
Session("token_time")=Time() ' if you want to allow for a small window of time

' checks to make sure the request method is truly a post-back
If Request.ServerVariables("REQUEST_METHOD") = "POST" Then
    ' Prevent CSRF (Cross-Site Request Forgeries) by comparing request-generated tokens. See http://shiflett.org/articles/cross-site-request-forgeries
    If Request.Form("token") = Session("token") Then
        ' Request is a post-back and is not a CSRF  
    End If
End If

您可以查看md5()函数(用于散列GUID)heremd5哈希不是必需的,但会添加另一层唯一性和安全性。

答案 1 :(得分:1)

您可以使用GUID作为令牌: -

Function GetGUID()

    GetGUID = CreateObject("Scriptlet.TypeLib").GUID 

End Function