相关疑难解决方法(0)

CSRF令牌生成

这是关于生成CSRF令牌的问题.

通常,我想基于与用户会话相关联的唯一数据生成令牌,并使用密钥进行散列和腌制.

我的问题是在没有唯一用户数据时生成令牌.没有可用的会话,cookie不是一个选项,IP地址和这种性质的东西是不可靠的.

我有什么理由不能将字符串包含在请求中作为请求的一部分吗?示例伪代码生成令牌并嵌入它:

var $stringToHash = random()
var $csrfToken = hash($stringToHash + $mySecretKey)
<a href="http://foo.com?csrfToken={$csrfToken}&key={$stringToHash}">click me</a>
Run Code Online (Sandbox Code Playgroud)

CSRF令牌的服务器端验证示例

var $stringToHash = request.get('key')
var $isValidToken = hash($stringToHash + $mySecrtKey) == request.get('csrfToken')
Run Code Online (Sandbox Code Playgroud)

散列中使用的字符串在每个请求上都是不同的.只要它包含在每个请求中,CSRF令牌验证就可以继续进行.由于每个请求都是新的,并且只嵌入在页面中,因此无法访问令牌.然后令牌的安全性落到了仅为我所知的$ mySecretKey.

这是一种天真的做法吗?我错过了一些为什么这不起作用的原因?

谢谢

csrf

46
推荐指数
3
解决办法
8万
查看次数

标签 统计

csrf ×1