PHP開発では、フォームの提出のソースを確認することが、偽造要求を防ぐために不可欠です。次の方法は、提出要求が予想されるページから来ているかどうかを効果的に識別し、ウェブサイトのセキュリティを改善することができます。
HTTPリファレンスヘッダーには、ユーザーが現在のページにアクセスするソースURLが含まれています。このヘッダーを検出することにより、リクエストが同じドメイン名から来るかどうかを確認できます。
if (isset($_SERVER['HTTP_REFERER']) && strpos($_SERVER['HTTP_REFERER'], 'yourdomain.com') !== false) {
// 同じドメイン名からリクエスト
}
投稿データには、フォームの提出に関する情報が含まれています。特定のフィールドの価値(隠されたフィールドなど)が期待を満たすかどうかを確認することにより、リクエストのソースを確認できます。
if (isset($_POST['nonce']) && $_POST['nonce'] === 'expected_nonce') {
// 予想されるフォームからのリクエスト
}
CSRFトークンは、各セッションでランダムに生成された文字列です。フォームの隠されたフィールドとして提出し、セッションのトークンと比較できます。
// セッションに保管します CSRF トークン
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
// フォームに隠されたフィールドを含めます
<input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token']; ?>">
// 送信されたチェックトークン
if (isset($_POST['csrf_token']) && $_POST['csrf_token'] === $_SESSION['csrf_token']) {
// 予想されるフォームからのリクエスト
}
塩は、献身的なデータに追加され、データの偽造を防ぐためにハッシュされたランダムな文字列です。
// 塩を生成します
$salt = bin2hex(random_bytes(32));
// データに塩を追加します
$data = 'some_data' . $salt;
// ハッシュデータ
$hash = hash('sha256', $data);
// 送信されたチェック hash
if (isset($_POST['hash']) && $_POST['hash'] === $hash) {
// 予想されるフォームからのリクエスト
}
上記の方法の1つ以上を通じて、開発者はPHPでのフォーム提出のソースを効果的に確認することができ、それにより偽造要求を防止し、Webアプリケーションのセキュリティを改善できます。