はじめに
メールヘッダーインジェクションについてまとめる。
メールヘッダーインジェクションとは
メールヘッダーに不正なヘッダー情報を混入させることで、スパムメールなどを送信させる攻撃のこと。
例
以下のようなコードがあったとして、
mail_send.php
mb_send_mail('test@example.com', $_POST['subject'], $_POST['body'],
"From: {$_POST['from']}");
"From: {$_POST['from']}")
の箇所に以下のような値を渡した時、
test@example.com
Bcc: injection@example.com
新たなBccヘッダーが認識されてしまう。
(入力値を介して、ユーザーが勝手に送付先を忍び込ませることができてしまう。)
メールヘッダーインジェクションのあるサイトは、スパムメールの踏み台にされる。
対策
メールアドレスの妥当性を検証する。
「/\A\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*\z/
」は、メールアドレスを表す正規表現パターン。
このようなチェックを入れることで、メールアドレスを複数含んだ文字列は指定できなくなる。
mail_send.php
if (!preg_match('/\A\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*\z/', $_POST['from']))
{
die('不正なメールアドレスです。');
}
mb_send_mail('test@example.com', $_POST['subject'], $_POST['body'], "From: {$_POST['from']}");