首頁 > 後端開發 > php教程 > 為什麼我的 CSRF 令牌在 AJAX 和標準表單中使用時有時為空,如何在 PHP 中修復此問題?

為什麼我的 CSRF 令牌在 AJAX 和標準表單中使用時有時為空,如何在 PHP 中修復此問題?

Linda Hamilton
發布: 2024-12-14 20:46:13
原創
647 人瀏覽過

Why are my CSRF tokens sometimes empty when used in AJAX and standard forms, and how can I fix this in PHP?

在PHP 中使用正確的CSRF 令牌實作來保護表單

問題:


< ;p>當嘗試將CSRF 令牌新增至兩種不同的表單時,其中一種使用AJAX 和其他基本聯絡表單,觀察到HTML中的令牌值偶爾為空。如何解決這個問題?

答案:

問題可能源自於令牌產生方法,因為所提供的程式碼是容易受到預測和缺乏熵的影響。此方法對於一次性使用和每次表單令牌驗證也是不夠的。

產生強CSRF 令牌:

將令牌產生替換為安全PHP 7 或PHP 5.3 的方法:

PHP 7


session_start();
if (empty($_SESSION['token'])) {

$_SESSION['token'] = bin2hex(random_bytes(32));
登入後複製

}
$token = $_SESSION['token'];

PHP 5.3(或使用ext-mcrypt)


session_start();
if ($($_SESSION['令牌'])) {

if (function_exists('mcrypt_create_iv')) {
    $_SESSION['token'] = bin2hex(mcrypt_create_iv(32, MCRYPT_DEV_URANDOM));
} else {
    $_SESSION['token'] = bin2hex(openssl_random_pseudo_bytes(32));
}
登入後複製

}
$token = $_SESSION['token'];

驗證CSRF 令牌:

使用hash_equals() 驗證令牌安全地:

使用hash_equals() 驗證令牌安全地:

if (hash_equals($_SESSION['token'], $_POST['token'])) {
     // Proceed to process the form data
} else {
     // Log this as a warning and keep an eye on these attempts
}
登入後複製
if (!empty($_POST['token'])) {


}

Per -表單令牌限制:

進一步限制將代幣轉換為特定形式,請使用hash_hmac():

echo hash_hmac('sha256', '/my_form.php', $_SESSION['second_token']);
登入後複製
new \Twig_SimpleFunction( 'form_token', function($lock_to = null) { if (empty($_SESSION['token'])) { $_SESSION['token'] = bin2hex(random_bytes(32)); } if (empty($_SESSION['token2'])) { $_SESSION['token2'] = random_bytes(32); } if (empty($lock_to)) { return $_SESSION['token']; } return hash_hmac('sha256', $lock_to, $_SESSION['token2']); } )$twigEnv->addFunction(


);

使用此函數,安全通用令牌可以用作:

<輸入型別=「隱藏」名稱=「令牌」 value=" form_token>

雖然可以使用下列方式產生每個表單令牌:

一次性CSRF 令牌: h2>對於一次性使用令牌要求,請考慮使用專用庫,例如來自Paragon Initiative Enterprises 的反CSRF 庫。

以上是為什麼我的 CSRF 令牌在 AJAX 和標準表單中使用時有時為空,如何在 PHP 中修復此問題?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板