Asp classic 如何在经典asp中实现同步器令牌模式

Asp classic 如何在经典asp中实现同步器令牌模式,asp-classic,Asp Classic,为了防止CSRF,我想在我的经典asp应用程序中实现同步器令牌模式 我知道IIU应该在会话启动时生成令牌。我不知道如何生成这样一个令牌,因为它应该是随机的和唯一的。所以简单的Rnd()和随机化是行不通的,对吧 此外,它是否应该以任何方式散列?怎么做 谢谢你的任何提示 您可以使用GUID作为令牌:- Function GetGUID() GetGUID = CreateObject("Scriptlet.TypeLib").GUID End Function 我知道这个问题已经被标

为了防止CSRF,我想在我的经典asp应用程序中实现同步器令牌模式

我知道IIU应该在会话启动时生成令牌。我不知道如何生成这样一个令牌,因为它应该是随机的和唯一的。所以简单的Rnd()和随机化是行不通的,对吧

此外,它是否应该以任何方式散列?怎么做

谢谢你的任何提示


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

Function GetGUID()

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

End Function

我知道这个问题已经被标记为已回答,但我发现这很有帮助(并没有真正回答您的问题),特别是第二个回答,其中提到了解释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)。
md5
散列不是必需的,但确实增加了另一层独特性和安全性。

感谢您的回答,尤其是shiflett文章的链接!我实现了令牌,就像你说的,我想我也会使用md5。md5是一个散列,它实际上带走了唯一性。我认为这还不够担心,但是如果您使用md5来制作一个较短的字符串,或者让人们认为它不是GUID,那么我肯定这没关系,但是md5现在被认为是过时的,因为它已经损坏了(他们可能会制造冲突)。