gpt4 book ai didi

php - PHP 中没有 cookie 的 CSRF token

转载 作者:行者123 更新时间:2023-12-05 08:10:03 28 4
gpt4 key购买 nike

我正在寻找一种方法来将 CSRF token 添加到我正在制作的应用程序中。需要注意的是,该应用程序当前不使用 cookie 或 session 。

我很想找到一种方法来引入 CSRF token ,而不必:

  1. 在我的应用程序中引入状态。
  2. 使用 session 或cookie($_SESSION/$_COOKIE)存储

这是否有可能,或者我是否一直在我的应用程序中创建新状态。

最佳答案

可以,但不会很安全。

这是一个示例但不要使用它,这可能是个坏主意:

// Do this somewhere
define('CSRF_SALT', '4dedMj4CWgBMNhRsoTpJlokwB5wTz7UsmF8Mq4uzFIbv');

$token = base64_encode(
hash_hmac(
'sha256',
date('Ymd') . $_SERVER['REMOTE_ADDR'] . $_SERVER['HTTP_USER_AGENT'],
CSRF_SALT,
true
)
);

if (\hash_equals($_POST['security_token'], $token)) {
// Form passes validation
}

缺点是这些 token 本质上是可重用的,因此如果有人泄漏,攻击者可以简单地重用(或重新计算)它。您也可以尝试在哈希计算中添加表单 action=""值。

function getToken($action)
{
return base64_encode(
hash_hmac(
'sha256',
hash_hmac(
'sha256',
date('Ymd') . $_SERVER['REMOTE_ADDR'] . $_SERVER['HTTP_USER_AGENT'],
hash('sha256', $action, true),
true
),
CSRF_SALT,
true
)
);
}

echo "<form action='register.php' method='post'>\n";
echo "<input type='hidden' name='security_token' value='".getToken('register.php')."' />\n";
// ...

无论如何,您对 session 的厌恶是什么?

关于php - PHP 中没有 cookie 的 CSRF token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28679327/

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