スパムメール踏み台攻撃@PHP技術

スパムメール踏み台攻撃とは、メールフォームを使用しているサイトの中で、フォームから送信メールアドレスを指定できる場合、リクエストを偽装することでスパムメールを送る攻撃です。

メールフォームの宛先をhiddenで送っています。
ということは、リンク先でtoという名前で宛先を放り込む口が開いてるという予想がつきます。

脆弱なコードは以下になります。

<?php
if (!empty($_POST['dosend'])) {
    mb_send_mail($_POST['to'], $_POST['subject'], $_POST['body'], "From:".$_POST['from']);
    header('Location:http://'.$_SERVER['HTTP_HOST'].$_SERVER['SCRIPT_NAME']);
    exit;
}
header("Content-Type:text/html; charset=utf-8");
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>

(メールフォーム)
<input type="hidden" name="to" value="aaa@aaa.aaa"><br>

</html>

そこで、リクエストを自動生成してアクセスすることを繰り返せば簡易スパムメールの完成です。

この攻撃の検証をするのにメールサーバーが必要なので実際にはメール送信できませんでしたが、気を付けるべきところは必要以外のインターフェースを開けないことだと思います。

とりあえず、防御策を考えてみます。

  • メールサーバー側でFromごとに送信できる最大数を決める(1時間10通までとか)
  • 送信先ホワイトリストを作る
  • mailto:で利用者のメーラーから送ってもらうようにする

でしょうか?


回答としてあったのは、

です。
ホワイトリストはわかります。配列化しちゃってマッチすればいいです。
同一IPからの利用制限ってどうするのでしょうか?Apacheでファイルを時間あたりに読み込まれる回数にリミットかけられるのかな…もしくはメールサーバー側でしょうか
データの整合性チェックは…あまり効果がわかりません。業者って有効なメールアドレスリストみたいなのを持っているとすれば、そのリストに列挙されているメールアドレスは全て"正しいメールアドレスである"という判断になる気がします。無作為送信に対抗するなら有効だとは思います。