2012-01-12 70 views
0

我已经搜索过,并发现了几个good ideas但没有100%解决了这个PHP邮件问题我有。有没有办法100%防止php邮件脚本被滥用?

注意:当我从服务器上删除此文件时,垃圾邮件会停止。 Captcha也不是一个真正的选择,这是一个Ajax调用,它需要很快。我不是100%确定垃圾邮件发送者是如何做到的,但任何帮助都会让人赏心悦目。

这里是HTML的位添加到窗体:

<input name="spam_stopper" value="DO NOT CHANGE THIS VALUE" style="display:none;"/> 

这里是额外的代码我在mail.php文件的顶部并没有阻止垃圾邮件说:

if ($_POST['spam_stopper'] != 'DO NOT CHANGE THIS VALUE') { 
     echo '<h3>Incorrect use of this form!</h3>'; 
     exit; 

} 


if(!strpos($_SERVER['HTTP_REFERER'],'my-sample-domain-name.com')) 
{ 
     echo '<h3>Incorrect use of this form!</h3>'; 
     exit; 

} 
if($_SERVER['REQUEST_METHOD'] != "POST"){ 
    echo("Unauthorized attempt to access page."); 
    exit; 
} 
+0

100%不,但是一个好的验证码很接近。我不明白你为什么不能使用它。 – 2012-01-12 01:56:14

+1

你能不能详细说明为什么文本验证码回答http://stackoverflow.com/a/3825272/76989不是你的问题的解决方案? – mmhan 2012-01-12 02:00:09

+0

我宁愿不必依靠某些第三方服务。你有没有使用uniqid();创建一次性令牌? – 2012-01-13 02:11:55

回答

1

您允许通过POST提交您自己的表单。所以,如果我一直在自己的网站上使用JavaScript提交它,使用Firebug说,那么阻止我的是什么?

您应该为每个发送邮件请求附带一个唯一有效的标记,以确保您的表单不能多次提交,即使是从您自己的网站提交。

+0

感谢您的回复。你有任何代码示例吗? – 2012-01-12 02:22:32

+1

不幸的是,现在不是。您可以使用'uniqid();'生成一个随机密钥,并将其作为期望的令牌存储在会话中,并以表单的形式存储为要发送的令牌。一旦表单被提交一次,您就会使该令牌无效(可能会替换为另一个令牌),因此如果垃圾邮件发送者重新提交表单,您将不会接受该表单。 – 2012-01-12 02:27:09

相关问题