【问题标题】:howto implement Synchronizer Token Pattern in classic asp如何在经典 asp 中实现同步器令牌模式
【发布时间】:2011-09-19 06:27:15
【问题描述】:

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

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

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

感谢您的任何提示...

Cross-Site Request Forgery (CSRF) Prevention Cheat Sheet

【问题讨论】:

    标签: asp-classic


    【解决方案1】:

    我知道该问题已被标记为已回答,但我发现此 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 哈希不是必需的,但确实增加了另一层唯一性和安全性。

    【讨论】:

    • 感谢您的回答,尤其是指向 shiflett 文章的链接!我就像你说的那样实现了令牌的东西,我想我也会使用 md5 的东西。
    • 一个 md5 是一个哈希,它实际上带走了唯一性。我认为不必担心,但是如果您正在使用 md5 来制作较短的字符串或让人们认为它不是 GUID,那么我敢肯定,这很好,但是 md5 现在被认为已过时,因为它被打破(他们可以制造碰撞)。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2010-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-27
      • 1970-01-01
      • 2021-10-11
      • 2018-03-19
      相关资源
      最近更新 更多