HTTPヘッダ・インジェクションとは?
通常Webでサイトにアクセスをする場合、ブラウザからサーバーにリクエストを送り、サーバーからはレスポンスが返されます。
リクエスト時のデータに、悪意のあるコードが埋め込まれると場合によってはレスポンスボディが改ざんされ、本来と違ったWebコンテンツが表示される可能性があります。
といいますか、下記URLの説明を写しただけですが(汗)。
【HTTPヘッダインジェクション】の仕組みと対策のまとめ記事
被害(ほぼクロスサイト・スクリプティング攻撃による脅威と同じ脅威)
- Webサイトを閲覧していて意図しない操作をさせられてしまう(GET句にリダイレクトなどの処理を埋め込まれる)
- ニセのCookie発行(これまたGET句にSetCookieなどを入れるなど)
- 複数のレスポンスに分割し、任意のレスポンスボディをリバースプロキシなどにキャッシュさせることにより、キャッシュ汚染を引き起こし、ウェブページの改ざんと同じ脅威が発生します。
- htmlエスケープ
対策
- ヘッダの出力を直接行わず、ウェブアプリケーションの実行環境や言語に用意されているヘッダ出力用APIを使用する。要はGET句などからHTTPヘッダーになるような値の挿入を行わない。
- 改行コードを適切に処理するヘッダ出力用APIを利用できない場合は、改行を許可しないよう開発者自身で適切な処理を実装する(Perlの場合、HTTPヘッダを自力でかくことが多いため、このタイプの問題が起こりがち)。クッキーには改行が入る可能性があるため、この場合はパーセントエンコーディングなどを行う。
オープンリダイレクタとは?
リダイレクト先をGET句などで動的に指定する仕様のことです。
このアプリの場合、悪意のあるページにリダイレクとさせて個人情報を盗まれるなどの危険性があります。(フィッシング詐欺などが典型的な例です。)
対策
- そもそも動的なURLを設定しない
- やむをえず入れる場合、正規表現などのチェックを入れる