ホームページ > バックエンド開発 > PHPチュートリアル > PHP で CSRF トークンを安全に実装するにはどうすればよいですか?

PHP で CSRF トークンを安全に実装するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-12-08 00:39:12
オリジナル
328 人が閲覧しました

How to Securely Implement CSRF Tokens in PHP?

PHP で CSRF トークンを実装する方法: 包括的なガイド

強力なトークンの生成にランダム バイトを使用する

CSRF トークン生成のコンテキストで rand() と uniqid() を使用するとセキュリティが確保されます予測可能性と限られたエントロピーによるリスク。代わりに、

session_start();
if (empty($_SESSION['token'])) {
    $_SESSION['token'] = bin2hex(random_bytes(32));
}
$token = $_SESSION['token'];
ログイン後にコピー

CSRF トークンを安全に検証する

直接等価性チェック (== または ===) の使用を避けます。代わりに、PHP 5.6 の場合は hash_equals() を、以前のバージョンの場合は paragonie/hash-compat を使用してください:

if (!empty($_POST['token'])) {
    if (hash_equals($_SESSION['token'], $_POST['token'])) {
         // Proceed to form data processing
    } else {
         // Log and monitor these attempts
    }
}
ログイン後にコピー

フォームごとのトークンによるセキュリティの強化

トークンを制限するには特定のフォームに使用するにはhash_hmac():

echo hash_hmac('sha256', '/my_form.php', $_SESSION['second_token']);
ログイン後にコピー
$calc = hash_hmac('sha256', '/my_form.php', $_SESSION['second_token']);
if (hash_equals($calc, $_POST['token'])) {
    // Continue...
}
ログイン後にコピー

簡素化のためのハイブリッド アプローチ

Twig テンプレートを使用すると、カスタム Twig 関数を使用してトークン生成を簡素化できます。

$twigEnv->addFunction(
    new \Twig_SimpleFunction(
        'form_token',
        function($lock_to = null) { // ... }
    )
);
ログイン後にコピー
<input type="hidden" name="token" value="{{ form_token() }}" />
ログイン後にコピー

または、ロックされたトークン:

<input type="hidden" name="token" value="{{ form_token('/my_form.php') }}" />
ログイン後にコピー

使い捨て CSRF トークン

必要に応じて、使い捨て CSRF トークンを管理するための特殊なライブラリの使用を検討してください。 Paragon Initiative Enterprises による CSRF ライブラリ。

以上がPHP で CSRF トークンを安全に実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート