※動作テストは自己責任で必ず自分の環境で確認すること。
スパムメールとは
何らかの方法で入手したメールアドレスに対して無差別に、本人に許諾を得ずに一方的に営利目的の広告メールを配信すること。
メールヘッダ生成部にカンマを含めることで、任意の宛先にメールを送る攻撃。
■攻撃先
関数:mail()、mb_send_mail()
■被害
スパムメール送信のためにサーバリソースが消費される。 利用中のメールサーバがスパム送信メールサーバとしてブラックリスト登録される。
Case 1
<?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=EUC-JP"); ?> <html> <body> <form action="" method="post"> Mailaddress:<input type="text" name="from" /><br /> Subject:<input type="text" name="subject" /><br /> Body:<input type="text" name="body" /><br /> <input type="hidden" name="to" value="example@example.jp" /> <input type="submit" name="dosend" value="send"> </form> </body> </html>
80番ポートに任意の宛先を指定したPOSTデータをリクエストすれば、hiddenの宛先を無視して、任意の宛先に送りつけることが可能。
Case 2
<?php mb_send_mail(固定メールアドレス, $_POST['subject'], $_POST['body'], 'From: '.$_POST['from']); ?>
メールヘッダに改行を含んだものを送りつける事によって、任意の宛先に送りつける事が可能
対策方法
・第1引数の固定化
mail()関数の第1引数(to)は固定とする。 hiddenタグは改竄される恐れがあるので使用しない。
・第1引数のホワイトリスト化
メールの宛先が複数の場合、それが少数であればメールアドレス一覧表を作っておき、一覧に乗っている宛先のみmail()関数を実行する。
・同一IPアドレスの利用回数制限
データベースかデータファイルに、IPごとのフォームメールの利用回数を記録し、指定回数以上を超えるようならmail()関数を実行しない。
・データ整合性チェック
mail()関数の第4引数にリクエスト変数を含める場合は、そのメールヘッダ項目に応じた厳密なチェックを実施する。
新品価格 |
![]() |