このトピックに関する質問がありましたが、解決策が見つからないようです。私のインデックスページで、一番上に私は単にCSRF処理時のトークンの検証
<?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';
}
したがって、単にトークンが存在することを確認します。これで十分ですか?私はトークンを作り直してセッショントークンと比較する他の例を見てきましたが、これが必要かどうかわかりません。
これを正しく検証する方法についてのアドバイスはありがたいです。
おかげ
を_「この十分ですか?」_いいえ、あなたはそれをチェックする必要がありますユーザーがPOSTしたトークンは、前に作成したトークンと一致します。さもなければ、ユーザーはちょうどトークンとしてそれを使用する目的をちょっと敗北させるどんな詐欺も送ることができます。 –
私は[OWASP CSRFチートシート](https://www.owasp.org/index.php/CrossSite_Request_Forgery_(CSRF)_Prevention_Cheat_Sheet)を読んでから、[CSRFProtector](https: //www.owasp.org/index.php/CSRFProtector_Project) – heavyd