簡體   English   中英

處理時的CSRF令牌驗證

[英]CSRF Token validation when processing

我已經看到有關此主題的問題,但似乎找不到解決方案。 在索引頁面的頂部,我只是在做

<?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設置$token表單中的隱藏字段。 我的問題與表格的處理有關。 此刻我有

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

因此,它僅檢查令牌是否存在。 這夠了嗎? 我看到了其他示例重新創建令牌,然后將其與會話令牌進行比較,但不確定是否需要此令牌?

關於如何驗證這一點的任何建議都應受到贊賞。

謝謝

您應該將給定令牌與會話令牌進行比較,以確保引入的令牌有效:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM