防止CSRF我想在我的经典asp应用程序中实现Synchronizer Token Pattern。
我知道iI应该在session_onstart中生成一个令牌。我没有得到的是如何生成这样一个令牌,因为它应该是随机和唯一的。所以简单的Rnd()和随机化是行不通的,对吗?
此外,它应该以任何方式进行散列吗?怎么样?
感谢任何提示......
答案 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)here。 md5
哈希不是必需的,但会添加另一层唯一性和安全性。
答案 1 :(得分:1)
您可以使用GUID作为令牌: -
Function GetGUID()
GetGUID = CreateObject("Scriptlet.TypeLib").GUID
End Function