PHPで拒否型を許可型に変更したい
写メールBBSというPHPがあります。
http://php.s3.to/bbs/bbs7.php
これは、特定のメールアドレスに届いたメールについて、「PHP上のボータンをクリックすると、メールサーバーからメールをダウンロードし、data.cgiに書き込む」というものです。このPHPでは、不正メールや広告メールを書き込まないように、拒否アドレスを設定できるようになっています。
******************************************
【config.php】
//拒否アドレス
$deny_from = array('yahoo.co.jp');
【pop.php】
// 送信者アドレスの抽出
if (preg_match("/\nFrom:[ \t]*([^\r\n]+)/i", $head, $freg)) {
$from = addr_search($freg[1]);
} elseif (preg_match("/\nReply-To:[ \t]*([^\r\n]+)/i", $head, $freg)) {
$from = addr_search($freg[1]);
} elseif (preg_match("/\nReturn-Path:[ \t]*([^\r\n]+)/i", $head, $freg)) {
$from = addr_search($freg[1]);
}
// 拒否アドレス
foreach ($deny_from as $dfrom) {
if (stristr($from, $dfrom)) $write = false;
}
******************************************
やりたいこと。
拒否アドレスを設定するのではなく、許可アドレス型とし、特定メールアドレス以外は全て書き込まないようにしたいと考えています。
そこで下記のように修正しましたが、全てのメールで書き込めてしまいます。
ご指導いただけましたら幸いです。
よろしくお願いいたします。
******************************************
【config.php】
//許可アドレス
$allow_from = array('hoge.co.jp');
【pop.php】
// 送信者アドレスの抽出
if (preg_match("/\nFrom:[ \t]*([^\r\n]+)/i", $head, $freg)) {
$from = addr_search($freg[1]);
} elseif (preg_match("/\nReply-To:[ \t]*([^\r\n]+)/i", $head, $freg)) {
$from = addr_search($freg[1]);
} elseif (preg_match("/\nReturn-Path:[ \t]*([^\r\n]+)/i", $head, $freg)) {
$from = addr_search($freg[1]);
}
// 許可アドレス
foreach ($allow_from as $afrom) {
if (stristr($from, $afrom)) { $write = true;
} else { $write = false; }
}
結果、許可アドレス以外の書き込みが出来てしまう。