gpt4 book ai didi

CSRF 代币生成

转载 作者:行者123 更新时间:2023-12-03 06:19:11 25 4
gpt4 key购买 nike

这是一个关于生成 CSRF token 的问题。

通常,我希望根据与用户 session 关联的唯一数据片段生成 token ,并使用 key 进行散列和加盐处理。

我的问题是关于在没有可用的唯一用户数据时生成 token 的问题。没有可用的 session ,cookie 不是一个选项,IP 地址和类似性质的东西不可靠。

是否有任何原因导致我无法将要哈希的字符串也包含在请求中?生成 token 并嵌入它的伪代码示例:

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

CSRF token 的服务器端验证示例

var $stringToHash = request.get('key')
var $isValidToken = hash($stringToHash + $mySecrtKey) == request.get('csrfToken')

哈希中使用的字符串在每个请求中都会有所不同。只要它包含在每个请求中,CSRF token 验证就可以继续进行。由于它对于每个请求都是新的并且仅嵌入在页面中,因此外部对 token 的访问将不可用。然后, token 的安全性就落到了只有我自己知道的 $mySecretKey 上。

这是一种天真的做法吗?我是否遗漏了一些无法正常工作的原因?

谢谢

最佳答案

是否有任何原因导致我无法将要哈希的字符串也包含在请求中?

CSRF token 有两部分。嵌入表单中的 token ,以及其他地方的相应 token ,无论是在 cookie 中,还是存储在 session 中或其他地方。这种对其他地方的使用会阻止页面自包含。

如果您在请求中包含要散列的字符串,则该请求是自包含的,因此攻击者只需复制表单即可,因为他们拥有 token 的两个部分,因此没有保护。

即使将其放在表单 URL 中也意味着它是自包含的,攻击者只需复制表单和提交 URL。

关于CSRF 代币生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1805838/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com