インターネット アプリケーションでは、セキュリティの問題は常に重要な問題です。その中でも、クロスサイト リクエスト フォージェリ (CSRF) 攻撃は一般的な脆弱性であり、攻撃者によって簡単に悪用されます。では、PHP 開発で安全なプログラミングを実装するにはどうすればよいでしょうか?この記事では、CSRF 攻撃と防御ソリューションに焦点を当てます。
1. CSRF 攻撃とは何ですか?
CSRF 攻撃 (クロスサイト リクエスト フォージェリ) は、被害者のログイン状態を利用して、被害者の知らないうちに標的の Web サイトに悪意のあるリクエストを送信する攻撃手法です。攻撃者はさまざまな方法で被害者のログイン状態を取得し、気づかれずに標的の Web サイトに偽のリクエストを開始して攻撃を実行する可能性があります。攻撃者は、電子メールやチャット ソフトウェアのリンクを通じて、またはソーシャル ネットワークにリンクを投稿することによって、被害者にサードパーティの Web サイトへのアクセスを許可することで、被害者に操作を実行させることで、攻撃を引き起こす可能性があります。
次の例では、攻撃者は被害者を悪意のある Web サイトに訪問させ、POST リクエストを生成し、それをターゲット Web サイトからのリクエストとして偽装し、被害者のログイン時の許可を取得できます。
<form action="https://www.targetwebsite.com/comment" method="post"> <input type="hidden" name="comment" value="harmful comment" /> <input type="submit" value="Submit Comment" /> </form> <script> document.forms[0].submit(); </script>
攻撃者はターゲット Web サイトを直接攻撃するのではなく、ターゲット Web サイトの脆弱性を利用して攻撃を実行するため、この攻撃方法は非常に巧妙です。被害者は気づいていないため、攻撃を検出することは困難です。対象となる Web サイトが CSRF 攻撃を防止できなかった場合、データ漏洩や悪意のある操作などのリスクが生じる可能性があります。
2.CSRF から防御するにはどうすればよいですか?
CSRF 攻撃は非常に危険なので、どのように防御すればよいでしょうか?一般的な防御戦略は次のとおりです:
1. トークン検証の追加
ユーザーがログインすると、バックエンド サーバーはトークンを生成してフロントエンドに送り返し、トークンを保存します。その後のサーバーとの対話では、フロントエンドはリクエストとともにトークンをサーバーに送信する必要があります。サーバーは、トークン検証を通じてリクエストが正当であるかどうかを判断できます。
以下は簡単なコード例です:
<!-- 后端代码 --> <?php session_start(); if(!isset($_SESSION['token'])){ $_SESSION['token'] = md5(uniqid(rand(), true)); } $token = $_SESSION['token']; ?> <!-- 前端代码 --> <form method="post" action="/some/url"> <?php echo "<input type='hidden' name='token' value='".$token."' />"; ?> <input type="text" name="username" /> <input type="text" name="password" /> <input type="submit" value="Submit" /> </form>
この例では、バックグラウンドでランダムなトークンを生成し、それをフロントエンドに返します。次に、トークンが非表示の入力タグに追加されます。フロントエンドがリクエストを送信すると、トークンも送信され、サーバー上のコードは、送信されたトークンに基づいてリクエストが正当であるかどうかを検証します。
2.リファラー検証の追加
リファラーは HTTP ヘッダーの一部であり、ユーザーが現在のページにリダイレクトしたページが含まれます。 HTTP ヘッダーのリファラーをチェックすることで、サーバーはリクエストが正当なページからのものであるかどうかを判断できます。リファラーが正しくないと検出された場合、サーバーはリクエストへの応答を拒否します。
以下は簡単なコード例です:
<?php $referer = $_SERVER['HTTP_REFERER']; if(parse_url($referer, PHP_URL_HOST) != 'www.validwebsite.com') { die("Invalid Referer"); } // 处理正常的请求 ?>
この例では、HTTP ヘッダーのリファラーを取得し、リクエストが「www.validwebsite.com」という名前の Web サイトからのものであるかどうかを確認します。 Webサイト。リクエストがこの Web サイトから送信されたものでない場合、サーバーは応答を拒否し、「無効なリファラー」メッセージを表示します。
3. ブラウザの cookie を追加する
Cookie ベースの CSRF 攻撃は、ユーザーのログイン状態を利用し、ユーザーの Cookie を攻撃者の Web サイトに送信する攻撃方法です。これを行うには、機密性の高いページに有効期間の短い Cookie を設定し、そのページに関連するアクションを実行するときに Cookie の存在を確認します。
以下は簡単なコード例です:
header('Set-Cookie: csrf_cookie=' . uniqid(rand(), true) . '; path=/; HttpOnly');
この例では、ランダムな csrf_cookie を生成し、それを HttpOnly に設定しました。これは、Cookie が HTTP プロトコル転送を通じてのみ渡されることを意味します。 JavaScript からはアクセスできません。リクエストがサーバーに到達すると、その Cookie がそのページと一致するかどうかを確認して、攻撃の可能性を特定できます。
概要
CSRF 攻撃は非常に危険な攻撃方法です。 CSRF 攻撃に対する防御は、データ セキュリティの保護に役立つだけでなく、安全なプログラミングを実装するための基本要件でもあります。 PHP 開発環境では、トークン検証、リファラー検証の設定、ブラウザの Cookie の追加など、CSRF 攻撃を防ぐための対策を講じることができます。これらの対策により、ユーザーのログイン状態や機密データを含むページを攻撃から効果的に保護できます。
以上がPHP による安全なプログラミングの実装: CSRF の攻撃と防御の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。