公開日:2007年6月28日
独立行政法人情報処理推進機構
セキュリティセンター
本ページの情報は2007年6月時点のものです。
記載の資料は資料公開当時のもので、現在は公開されていないものも含みます。
ショッピングサイト等のWebアプリケーションでは、ユーザから入力された商品申込みや問合せ等の内容を、メールで送信する機能をもつものがある。
このような場合、送信先のメールアドレスは固定されており、Webアプリケーションの管理者以外は変更できないようになっている。その実装によっては、外部の利用者が送信先メールアドレスを自由に指定できてしまう場合がある。この問題は「メールの第三者中継」と呼ばれ、迷惑メールやウイルス等を送信する際に身元を隠すために使用される。
To、Cc、Bcc、Subject等のメールヘッダの内容が外部からの入力に依存する場合、ヘッダおよび本文を含むメール全体が改ざんされ、任意の宛先と内容でメールを送信されてしまう可能性がある。例えば、フォームのhiddenフィールドで指定したメールアドレスを宛先とする場合、そのhiddenフィールドのパラメータを改変されると、意図しない宛先にメールを送信してしまう。
この「メールの第三者中継」の根本的対策は、外部からのパラメータをメールヘッダの内容に指定しない実装をすることである。もし外部からのパラメータを使用する場合には、その入力検査を厳しく行うべきであり、また悪用される事を想定して、その旨の案内文も記載する。
外部からのパラメータをメールヘッダに指定する場合は、危険な文字を排除する。これは上記、根本的対策を実施できない場合の保険的対策となる。
外部からのパラメータをメールヘッダに指定する場合は、危険な文字を排除すべきである。例えば、perl言語のopen関数を利用したパイプ出力で sendmailコマンドにメール内容を渡している場合で、メールヘッダの内容に該当する変数に対しては、メールヘッダの区切りとして認識される改行コード(\n、\r\n、\r等)を許可しないようにする。
この対策により、改行コードに続けて任意の他のメールヘッダを指定されたり、更に続けてメール本文を指定されたりする「メール内容の改変」を回避することができる。
メールの第三者中継では、自動化クライアントを利用して大量の迷惑メール送信が行われる場合がある。そのため、自動化プログラムではメールの送信処理が困難となるような実装が推奨される。例えば、メール送信フォームに自動化プログラムによる判読が困難なノイズの入った文字列の画像を表示し、そこから読み取れる文字列をユーザに入力してもらうことでメール送信が行われるような実装方法がある。