我正在寻找一种将 CSRF 令牌添加到我正在制作的应用程序中的方法。需要注意的是,该应用程序当前不使用 cookie 或会话。
我很想找到一种引入 CSRF 令牌的方法,而不必:
- 在我的应用程序中引入状态。
- 使用会话或 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
}
缺点是这些令牌本质上是可重用的,因此如果泄漏,攻击者可以简单地重用(或重新计算)它。您还可以尝试在哈希计算中添加表单 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";
// ...
无论如何,你对会议的厌恶是什么?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)