【发布时间】:2011-09-19 06:27:15
【问题描述】:
为了防止 CSRF,我想在我的经典 asp 应用程序中实现同步器令牌模式。
我知道我应该在 session_onstart 中生成一个令牌。我没有得到的是如何生成这样的令牌,因为它应该是随机且唯一的。所以一个简单的 Rnd() 和 randomize 是行不通的,对吧?
此外,它应该以任何方式散列吗?怎么样?
感谢您的任何提示...
【问题讨论】:
标签: asp-classic
为了防止 CSRF,我想在我的经典 asp 应用程序中实现同步器令牌模式。
我知道我应该在 session_onstart 中生成一个令牌。我没有得到的是如何生成这样的令牌,因为它应该是随机且唯一的。所以一个简单的 Rnd() 和 randomize 是行不通的,对吧?
此外,它应该以任何方式散列吗?怎么样?
感谢您的任何提示...
【问题讨论】:
标签: asp-classic
我知道该问题已被标记为已回答,但我发现此 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 哈希不是必需的,但确实增加了另一层唯一性和安全性。
【讨论】:
您可以使用 GUID 作为令牌:-
Function GetGUID()
GetGUID = CreateObject("Scriptlet.TypeLib").GUID
End Function
【讨论】: