IPAの「安全なウェブサイトの作り方」を読み進める第7回!
※この記事は上記の文書を個人的にまとめた防備録となるので注意。
この文書の目次は以下。
1) SQL インジェクション
2) OS コマンド・インジェクション
3) パス名パラメータの未チェック/ディレクトリ・トラバーサル
4) セッション管理の不備
5) クロスサイト・スクリプティング
6) CSRF(クロスサイト・リクエスト・フォージェリ)
7) HTTP ヘッダ・インジェクション
8) メールヘッダ・インジェクション
9) アクセス制御や認可制御の欠落
前回はHTTPヘッダ・インジェクションついて学んだ。
今回は「メールヘッダ・インジェクション」について。
1.メールヘッダ・インジェクションとは
ウェブアプリケーションの中には、利用者が入力した商品申し込みやアンケート等の内容を、特定のメールアドレスに送信する機能を持つものがあります。一般に、このメールアドレスは固定で、ウェブアプリケーションの管理者以外の人は変更できませんが、実装によっては、外部の利用者がこのメールアドレスを自由に指定できてしまう場合があります。
例えば、悪意のある人に指定された任意の宛先にメールが送信される。
それは、迷惑メールとなる・・・ってこと?
発生しうる脅威は以下。
・メールの第三者中継
注意が必要なウェブサイトは以下。
・問い合わせページやアンケートページがあるサイト
2.メールヘッダ・インジェクションの対策
メールヘッダを固定値にして、外部からの入力はすべてメール本文に出力する
「To」、「Cc」、「Bcc」、「Subject」等のメールヘッダの内容が外部からの入力に依存する場合や、メール送信プログラムへの出力処理に問題がある場合、外部からの入力をそのまま出力すると、外部から与えられた改行コードが余分な改行として差し込まれることになります。
この方法なら確実だけど・・・
どうしても外部からの入力で決めたい場合もあるよね。
そういう時はアプリケーション側で判断して、複数のヘッダを用意しておけばいいのか?
ただ、複数でも全てをカバーできなさそう。
メールヘッダを固定値にできない場合、ウェブアプリケーションの実行環境や言語に用意されているメール送信用 API を使用する
外部からの入力をメールヘッダに出力する場合、ウェブアプリケーションの実行環境や言語に用意されているメール送信用 API を使用することをお勧めします。
やっぱり積極的にこういうのを使っていくべき。
FuelPHPにもメール送信用のパッケージがある。
HTML で宛先を指定しない
hiddenをそのまま使うなよってこと。
保険的対策
・外部からの入力の全てについて、改行コードを削除する
コメント