HTTP_ORIGIN
CSRF (クロス サイト リクエスト フォージェリ) リクエストから保護する方法です。現在、Chrome のみで実装されています (2011 年 11 月現在)。Firefox と Opera をテストしましたが、失敗しました。
リクエスト ヘッダーでの名前は ですOrigin
。私のPHPスクリプトのサーバーではHTTP_ORIGIN
、$_SERVER
配列のように見えます。このヘッダーは、CSRF に対する保護が必要な場合にのみ送信されます (POST だけで十分です)。設定されているかどうかに関係なく、すべてのリクエストのリストを次に示します。
https://wiki.mozilla.org/Security/Origin
- アンカータグ - いいえ
- ウィンドウ ナビゲーション - いいえ
- 画像 - いいえ
- iframe、埋め込み、アプレット - はい
- フォーム (GET および POST) - はい
- スクリプト - はい
- スタイルシート - いいえ
- スタイルシートからの依存ロード - いいえ
- リダイレクト - はい
- XHR - はい
残念ながら、Origin
ヘッダーはChromeでのみ実装されています。2010 年 1 月に Google Chrome のブログで最初に発表されました。
http://blog.chromium.org/2010/01/security-in-depth-new-security-features.html
Origin ヘッダーによる CSRF 保護
Origin ヘッダーは、クロスサイト リクエスト フォージェリ (CSRF) 攻撃からサイトを防御するのに役立つ新しい HTML5 機能です。CSRF 攻撃では、attacker.com などの悪意のある Web サイトがユーザーのブラウザーに、example.com などのターゲット サーバーに HTTP 要求を送信するように指示し、example.com サーバーを混乱させて何らかのアクションを実行させます。たとえば、example.com が Web メール プロバイダーである場合、CSRF 攻撃は example.com をだまして電子メール メッセージを攻撃者に転送させる可能性があります。
Origin ヘッダーは、どの Web サイトが要求を生成したかを識別することにより、CSRF 攻撃からサイトを防御するのに役立ちます。上記の例では、example.com は、Origin ヘッダーに値http://attacker.comが含まれているため、悪意のある Web サイトからの要求であることがわかります。Origin ヘッダーを CSRF 防御として使用するには、サイトは、(1) Origin ヘッダーがないか、(2) ホワイトリストに登録された値を持つ Origin ヘッダーを持つ要求に応答してのみ状態を変更する必要があります。
私は PHP スクリプトに CSRF 保護を実装しているだけです。私は個人的に Chrome を使用しているので、それで十分です。他のブラウザーがすぐに Chrome に追いつくことを願っています。
おもしろいのは、Mozilla がそのセキュリティ機能を発明したことです。Web サイトでそのヘッダーのドキュメントをたくさん読むことができますOrigin
が、まだ実装する時間がありませんでした ;-)
HTTP_ORIGIN
「http://www.example.com」 - 「http://www.example.com/myform/」からフォームを送信した場合でも、最後にスラッシュなしでprotocol
andのみが含まれているようです。domain
PHP スクリプトでの CSRF に対する簡単な保護:
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if (isset($_SERVER['HTTP_ORIGIN'])) {
$address = 'http://'.$_SERVER['SERVER_NAME'];
if (strpos($address, $_SERVER['HTTP_ORIGIN']) !== 0) {
exit('CSRF protection in POST request: detected invalid Origin header: '.$_SERVER['HTTP_ORIGIN']);
}
}
}
このスクリプトは、80 以外の PORT (80 以外の場合は Origin にポートが含まれます)、HTTPS 接続、および異なるサブドメインからのフォームの送信 (例: sub.example.com => www.exampleへのリクエストの投稿) をサポートするようにアップグレードできます。 .com)。