【发布时间】:2018-07-14 13:25:55
【问题描述】:
我有一个登录表单,我在其中使用了一个隐藏字段,我正在使用随机值设置会话以避免 CSRF 攻击,就像这样
<input type="hidden" name="valid" value="<?= $_SESSION['validation'] ?>">
这就是我设置 $_SESSION['validation']
$_SESSION['validation'] = Hash::create('md5', rand(30, 3000), HASH_KEY);
当用户登录时,它会检查
if ($_SESSION['validation'] == $_POST['valid']) {
//login
} else {
// Invalid Request
}
所以当用户点击登录页面上的提交按钮时,$_SESSION['validation'] 的值将被比较以进行额外的安全检查。现在的问题是,如果打开登录页面,然后我打开查看源代码页面,然后我回到登录页面并点击登录按钮。
我正面临"Invalid Request",因为打开查看源代码页面会更改$_SESSION['validation'] 值,而我们之前打开的登录页面在表单中有旧的$_SESSION['validation'] 值作为隐藏值。如何应对?
【问题讨论】: