我一直在研究会话安全性,并已阅读添加随机生成的"令牌"在提交上述表格时对表格进行验证并对其进行验证可以帮助CSRF(跨站点请求伪造)。
因此,我使用其他人的示例设置测试,看看它是如何工作的,但它并不顺利。我已经设置了它,因此表单只是提交到同一页面,但它似乎导致整个事情重新初始化并重新生成$token
,因此它将永远不会匹配提交将创建一个新的,立即使前一个无效。
我做错了什么?我的理解是因为这是一个临时令牌,我所要做的就是暂时将它存储在$ _SESSION数组中进行比较,以确保提交的任何表格来自一个来源并且是真实用户而不是伪造。
对不起,我是PHP Sessions的新手以及所需的所有安全性所以如果我误解了任何内容,那么一些澄清会非常有用。
<?php
session_start();
if (empty($_SESSION['token'])) {
$_SESSION['token'] = bin2hex(random_bytes(32));
}
$token = $_SESSION['token'];
if(isset($_POST['submit']))
{
if($_POST['token'] == $token)
{
echo $_POST['username'];
}else
{
echo 'Sorry invalid token';
}
}
?>
<form method="POST" action="">
<input type="text" name="username" placeholder="Username"><br>
<input type="text" name="token" value="<?php echo $_SESSION['token'];?>"><br>
<button type="submit" name="submit">Submit</button>
</form>