不正リクエストとヘッダインジェクションによるスパムメール中継

スパムメール中継とは、第三者が管理するメールサーバを踏み台にして不正なプログラムを送信させる攻撃です。管理者自身がログなどから気づくこともありますが、セキュリティ対策をしていなかったり、発見が遅れると、被害者であると同時に加害者にもなってしまうこともあります。特にメールサーバがスパムメールの踏台にされてしまうとブラックリストに登録されてしまうこともあり、そうなってしまうときちんとしたメールさえもスパム扱いされ、受け取って貰えなくなるリスクがあります。また、サーバのリソースも奪われます。

ヘッダインジェクションで攻撃される場所

input要素のname属性にメールの宛先を指定して外部からのリクエストを受け取っているフォームやメールのヘッダ部分に改行コードを含む文字列を注入できる環境など。

対策

外部リクエストへの対策

外部からのリクエストを受け取る場合、メールアドレスの「@」より左側のローカル部と右側のドメインの有効性を判定できるのが理想ですが、現実には困難です。従って、メールアドレスの形式が妥当であるかどうかを正規表現を使って判定します。メールアドレス判定のための正規表現は100%というものはありませんので、時代に合わせてその都度調べるべきです。

ヘッダインジェクションへの対策

ヘッダインジェクションは、mb_send_mail()関数の第四引数に改行コードを挿入されることで発生します。mail()やmb_send_mail()関数の第四引数は、「From」「Cc」「Bcc」といったヘッダ情報を追加するために使われます。追加する場合、「\r\n」で区切らなければならないという構文のため、こういったヘッダインジェクションが攻撃が発生します。従って、メールヘッダに改行が挿入されていればメール送信ができないようにプログラムを組みます。具体的にはmb_send_mail()関数の第二引数と第四引数に対し、preg_match()関数で「[\r\n]」をパターンに指定し、「[\r\n]」が存在するかどうかを判定します。存在すればメール送信ができないようにします。