【问题标题】:Is there a way to 100% prevent a php mail script from being abused?有没有办法 100% 防止 php 邮件脚本被滥用?
【发布时间】:2012-01-12 01:52:39
【问题描述】:

我搜索了 SO 并找到了几个 good ideas,但没有 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;
}

【问题讨论】:

  • 100% 不,但是好的验证码很接近。我不明白你为什么不能使用一个。
  • 您能否详细说明为什么文本验证码回答stackoverflow.com/a/3825272/76989 不能解决您的问题?
  • 我宁愿不必依赖某些第三方服务。你用过 uniqid();创建一次性令牌?

标签: php ajax email spam


【解决方案1】:

您允许通过 POST 提交您自己的表单进行访问。所以,如果我继续在你自己的网站上使用 JavaScript 提交它,比如使用 Firebug,那有什么能阻止我呢?

每个发送邮件请求都应该有一个一次性有效令牌,以确保您的表单不能多次提交,即使是从您自己的网站。

【讨论】:

  • 感谢您的回复。你有任何代码示例吗?
  • 不幸的是,目前不是。您可以使用uniqid(); 生成一个随机密钥,并将其存储在会话中作为预期的令牌,并以要发送的令牌的形式存储。一旦表单提交一次,您就会使该令牌无效(并且可能将其替换为另一个),因此如果垃圾邮件发送者重新提交表单,您将不会接受它。
猜你喜欢
  • 1970-01-01
  • 2012-10-17
  • 2021-12-03
  • 1970-01-01
  • 2015-11-11
  • 2018-11-28
  • 2019-02-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多