セキュリティセンターTOP > セキュアプログラミング講座 > Webアプリケーション編 > サイトデザインにかかわる対策 > メールの第三者中継対策

第3章 サイトデザインにかかわる対策
メールの第三者中継対策

メールの第三者中継とは

ショッピングサイト等のWebアプリケーションでは、ユーザから入力された商品申込みや問合せ等の内容を、メールで送信する機能をもつものがある。
このような場合、送信先のメールアドレスは固定されており、Webアプリケーションの管理者以外は変更できないようになっている。その実装によっては、外部の利用者が送信先メールアドレスを自由に指定できてしまう場合がある。この問題は「メールの第三者中継」と呼ばれ、迷惑メールやウイルス等を送信する際に身元を隠すために使用される。

メールの第三者中継
図3-2:メールの第三者中継

パラメータの削減/検査強化/案内掲載

To、Cc、Bcc、Subject等のメールヘッダの内容が外部からの入力に依存する場合、ヘッダおよび本文を含むメール全体が改ざんされ、任意の宛先と内容でメールを送信されてしまう可能性がある。例えば、フォームのhiddenフィールドで指定したメールアドレスを宛先とする場合、そのhiddenフィールドのパラメータを改変されると、意図しない宛先にメールを送信してしまう。

この「メールの第三者中継」の根本的対策は、外部からのパラメータをメールヘッダの内容に指定しない実装をすることである。もし外部からのパラメータを使用する場合には、その入力検査を厳しく行うべきであり、また悪用される事を想定して、その旨の案内文も記載する。

  1. 宛先(To,Cc,Bcc)をパラメータにしない、もしくは厳しい入力検査を行う。
  2. 発信人(From)をパラメータにしない、もしくは厳しい入力検査を行う。
  3. 標題全体(Subject)をパラメータにしない。
  4. 標題の一部をパラメータとする場合は、厳しい入力検査を行う。
  5. 本文全体をパラメータにしない。
  6. 本文の一部をパラメータとする場合は、厳しい入力検査を行う。
  7. 本文の末尾等に当該メール発信責任者を明記する。
  8. 本文の末尾等に当該メールに心当たりのない受信者への相談窓口を記載する。

メールヘッダへの改行混入防止

外部からのパラメータをメールヘッダに指定する場合は、危険な文字を排除する。これは上記、根本的対策を実施できない場合の保険的対策となる。

外部からのパラメータをメールヘッダに指定する場合は、危険な文字を排除すべきである。例えば、perl言語のopen関数を利用したパイプ出力で sendmailコマンドにメール内容を渡している場合で、メールヘッダの内容に該当する変数に対しては、メールヘッダの区切りとして認識される改行コード(\n、\r\n、\r等)を許可しないようにする。

この対策により、改行コードに続けて任意の他のメールヘッダを指定されたり、更に続けてメール本文を指定されたりする「メール内容の改変」を回避することができる。

自動化クライアント対策

メールの第三者中継では、自動化クライアントを利用して大量の迷惑メール送信が行われる場合がある。そのため、自動化プログラムではメールの送信処理が困難となるような実装が推奨される。例えば、メール送信フォームに自動化プログラムによる判読が困難なノイズの入った文字列の画像を表示し、そこから読み取れる文字列をユーザに入力してもらうことでメール送信が行われるような実装方法がある。