处理

时间:2017-11-10 15:29:37

标签: php csrf csrf-protection

我已经看过关于这个主题的问题,但似乎无法找到解决方案。在我的索引页面上,我只是在做

<?php
session_start();

function generate_secure_token($length = 16) {
    return bin2hex(openssl_random_pseudo_bytes($length));
}

$_SESSION['token'] = generate_secure_token();
$token = $_SESSION['token'];

?>

然后我将$token设置为表单中的隐藏字段。我的问题与表格的处理有关。目前我有

if ( empty( $_POST[ 'csrf_token' ] ) )
{
    $errors['token'] = 'Something went wrong';
}

所以它只是检查一个令牌是否存在。这够了吗?我看过其他示例重新创建令牌然后将其与会话令牌进行比较,但不确定我是否需要它?

关于如何正确认识这一点的任何建议。

由于

1 个答案:

答案 0 :(得分:1)

您应该将给定令牌与会话令牌进行比较,以确保引入的令牌有效:

if ( empty( $_POST[ 'csrf_token' ] ) ||  
     $_POST[ 'csrf_token' ] != $_SESSION['token'])
{
    $errors['token'] = 'Something went wrong';
}