絶対に公開してはいけないPHPプログラミング

ネタ元:AjaxMail:Ajaxを活用したフリーPHPメールフォーム

これはひどいのに誰もつっこみを入れていないので、ツッコミを入れておきます。
セキュリティーフィックスされたました。

AjaxMailを利用しているサイトはスパムメールの踏み台にされます。

送信プログラムであるsendmail.phpの

150行目でPOSTで受け取ったアドレスをそのまま変数に入れて、

$reto = $_POST['email'];

168行目で直接メール関数に利用している。

  if($remail == 1) { mail($reto,$resbj,$rebody,$reheader); }

ありえない。

mail関数の第一引数には送信先のメールアドレスを設定できるのですが、カンマ区切りで複数のメールアドレスが指定できます。

リターンメールの性質上、リファラーチェックなどを行ってもスパムを100%防ぐのは不可能なのですが、メールアドレスのチェックを行っていないので好きなだけスパムを送信できます。

リファラーチェックとメールアドレスのチェックを行った上で連続送信などの対応をしないと

142行目を見る限りメール本文も自由に書きかえれますね。

foreach($_POST as $key=>$var) {

もっとひどいのがこれ、

  $header="From: $from\nReply-To: ".$_POST['email']."\nContent-Type: text/plain;charset=iso-2022-jp\nX-Mailer: PHP/".phpversion();

メールのheaderに直接POSTで受け取った値が入っています。

これで、headerの内容をいくらでも書きかえれます。

メール周りは、第三者(スパムを受ける人)に迷惑をかけるので、もう少し慎重に作ったほうがよいです

セキュリティーフィックスしたバージョンがでるまで利用は控えたほうがよいかと。
セキュリティフィックスされたバージョンになっています。

セキュアなメールプログラムの作成方法は時間があるときに書こうと思いますが、ひとまずツッコミを入れておこうと思ったので。

セキュリティ意識の低いプログラマの方には『PHPサイバーテロの技法―攻撃と防御の実際』をお勧めしますので、ぜひご一読ください。
(メール周りはそんなに詳しく書かれていないですが・・・)

関連エントリー

ふつうのリロード対策
WEBデザイナーの為のXSS(クロスサイトスクリプティング)入門

スポンサードリンク

«MTでコメントアウト | メイン | Movable Typeに直接エントリーを投稿するCGI»