ホームページ > バックエンド開発 > PHPチュートリアル > クロスサイトリクエストフォージェリを防ぐためにPHPフォームでHTTPリファラーを設定する方法

クロスサイトリクエストフォージェリを防ぐためにPHPフォームでHTTPリファラーを設定する方法

WBOY
リリース: 2023-06-25 19:24:02
オリジナル
1935 人が閲覧しました

インターネットの急速な発展とユーザーのニーズのますます複雑化により、Web アプリケーションの要件と機能はますます複雑かつ多様になっています。しかし、これにより Web セキュリティの問題がますます顕著になり、一般的な攻撃手法の 1 つとしてクロスサイト リクエスト フォージェリ (CSRF) 攻撃が挙げられます。

簡単に言えば、CSRF 攻撃とは、攻撃者が特定のサイトで正規のユーザーの ID 認証を使用して、ユーザーの ID になりすまし、ユーザーの許可や知識なしにユーザーの名前で特定のタスクを完了することを意味します。 . 一部の操作上の動作を攻撃する方法。 URL、iframe、画像などを介して悪意のあるリクエストを送信するなど、一般的な攻撃方法が多数あります。CSRF 攻撃を防ぐには、PHP フォームで HTTP リファラーを設定することが効果的です。

それでは、PHP フォームで HTTP リファラーを設定するにはどうすればよいでしょうか?

HTTP リファラーは、リクエストを送信する前に、ブラウザーが現在のページのソース アドレス、つまりリクエストのソースをチェックすることを意味します。リクエストの送信元が、サーバーが受信したリクエスト内の送信元アドレスと同じである場合、リクエストは正当であるとみなされます。したがって、HTTP リファラーを設定することで、フォームに保護層を追加し、フォーム送信の送信元アドレスを制限することで、CSRF 攻撃を効果的に防ぐことができます。

具体的な設定プロセスは次のとおりです:

1. 次のコードをフォーム ページに追加します:

<?php 
session_start();
$token = md5(uniqid(rand(), TRUE)); 
$_SESSION['csrf_token'] = $token;
?>
<form action="" method="post">
    <input type="hidden" name="csrf_token" value="<?php echo $token; ?>">
    //其他表单元素
    <input type="submit" value="提交">
</form>
ログイン後にコピー

まず、フォーム ページでセッションを開き、ランダムなトークンを生成します。CSRF トークンとしてセッションに保存します。トークンを非表示要素に割り当て、フォーム要素の一部としてフォームとともにサーバーに送信します。

2. 次に、次のコードをフォーム処理ページに追加します:

session_start();
if($_POST['csrf_token'] != $_SESSION['csrf_token']) {
    //不合法的请求
    exit("非法请求!");
}
//处理表单数据之前。...
ログイン後にコピー

フォーム処理ページで、まずセッションを開き、フォーム内の csrf_token を以前のトークンと比較します。セッション比較に保存されます。トークンが矛盾している場合、送信は違法とみなされ、ハンドラーは終了します。それ以外の場合、フォーム データは正常に処理できます。

要約すると、PHP フォームでの HTTP リファラーの設定は難しくありません。フォーム ページでランダムな CSRF トークンを生成し、セッションに保存して、フォーム処理ページでフォームを比較するだけです。 . トークン in とセッション中のトークンで十分です。これにより、クロスサイト リクエスト フォージェリ攻撃を効果的に回避できます。

以上がクロスサイトリクエストフォージェリを防ぐためにPHPフォームでHTTPリファラーを設定する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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