反CSRF表单令牌验证总是失败

时间:2018-04-30 09:51:18

标签: php session csrf-protection

我一直在研究会话安全性,并已阅读添加随机生成的"令牌"在提交上述表格时对表格进行验证并对其进行验证可以帮助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>

0 个答案:

没有答案
相关问题