Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
防止php web联系人表单垃圾邮件_Php_Forms_Contacts_Spam - Fatal编程技术网

防止php web联系人表单垃圾邮件

防止php web联系人表单垃圾邮件,php,forms,contacts,spam,Php,Forms,Contacts,Spam,我是一个业余的网页设计师,我在stackoverflow.com和其他网站上搜索过,找到了很多解决这个问题的方法,但是没有一个有效(可能是因为我没有正确地实现它们)。我希望有更多知识的人能帮我做一个简单的修复,或者告诉我如何实现我找到的修复之一 问题是:我的企业网站上有一个非常简单的php联系人表单。多年来,它一直运行良好,但在过去的一周内被黑客入侵。我现在每天收到数百份没有评论的联系表单提交,它们只有(显然有效的)电子邮件地址,名称字段中有一串字符(如“58ee8b52eef46”) 我尝试了

我是一个业余的网页设计师,我在stackoverflow.com和其他网站上搜索过,找到了很多解决这个问题的方法,但是没有一个有效(可能是因为我没有正确地实现它们)。我希望有更多知识的人能帮我做一个简单的修复,或者告诉我如何实现我找到的修复之一

问题是:我的企业网站上有一个非常简单的php联系人表单。多年来,它一直运行良好,但在过去的一周内被黑客入侵。我现在每天收到数百份没有评论的联系表单提交,它们只有(显然有效的)电子邮件地址,名称字段中有一串字符(如“58ee8b52eef46”)

我尝试了几种技术来防止垃圾邮件,它们要么破坏了我的php表单,要么无法防止垃圾邮件如果可能,我希望解决方案不需要验证码扭曲文本测试,也不需要填写表单的所有字段。

以下是我的完整PHP代码:


感谢您联系我们。我们将很快与您联系。您现在将被重定向回example.com。

如果你收到的垃圾邮件没有评论,为什么不简单地添加一个检查呢?一个真正的人类访客绝对没有理由不加评论地提交你的联系方式

由于您不想添加验证码,短期内最简单的解决方案是检查注释是否为最小字符数,并且至少包含一定数量的单词

例如:

$comments = trim($_POST['comments']); // trim() to strip off whitespace from beginning and end, like spaces and linebreaks

if (strlen($comments) < 20 || substr_count($comments, " ") < 3) {
    died('Your comment is too short.');
}
$comments=trim($_POST['comments']);//trim()从开头和结尾去除空白,如空格和换行符
如果(strlen($comments)<20 | | substr_计数($comments,“”)<3){
死亡('你的评论太短');
}

这是一个非常简单的检查,查看注释是否包含至少20个字符和至少3个空格(4个单词)。根据需要进行调整。

一个简单的技巧是创建蜜罐字段:

html

php


隐藏字段、愚蠢的问题(3+4是什么?)等在阻止表单上的垃圾邮件方面不是很有效

几年前我研究了这个问题,并提出了一个解决方案,我称之为“FormSpammerTrap”。它使用JavaScript代码“监视”所需字段上的focus/onclick。自动化流程,除非针对特定站点进行高度定制(这需要比spambot所有者想要花费更多的时间),否则无法“聚焦/点击”所需字段

我在我的网站上有一个免费的解决方案。有一种形式,垃圾邮件可以尝试垃圾邮件…他们没有,超过3年。欢迎您尝试一下……它都是开源的,所以您可以看到它是如何工作的。(而且,如果您使用该表单,我不会获取您的电子邮件。我只回复一次,然后删除您的电子邮件。)


我的技术在阻止垃圾邮件方面更有效。他们无法在该网站上删除联系人表单。

创建表单字段并为用户隐藏它。 在php脚本中,检查此字段是否已提交,但为空。 现在您知道请求来自您的表单和用户

垃圾邮件将填充隐藏字段,或者如果他们使用您的php脚本,则不会设置垃圾邮件保护字段

HTML

PHP


您可以在这里找到更多关于如何保护php表单垃圾邮件的方法:

一种对我来说更简单的方法。 实际上,我收到的所有垃圾邮件(d)在邮件中都有一个url。因此,我对其进行了过滤,从那以后,我再也没有收到过任何垃圾邮件。我过去每周大约挣10英镑

将此添加到您的行$error_message=“”;在php文件中:

if(preg_match('/http|www/i',$comments)) {
    $error_message .= "We do not allow a url in the comment.<br />";
  }
if(preg_match('/http | www/i',$comments)){
$error_message.=“我们不允许在评论中使用url。
”; }

preg_匹配中的/i使其独立于大小写。“http”也会过滤“https”。

通常,机器人提交表单的速度非常快。因此,基于此,另一个解决方案可能是添加另一个隐藏字段,该字段包含打开页面时经过的秒数。 这可以使用JavaScript实现。
然后在PHP中检查它。如果秒数小于5秒,则为垃圾邮件(实际客户端很可能需要更多时间来适应表单)。您可以根据表单包含的字段数量来调整秒数。

我有另一种方法,我已经在多个网站上成功使用了十多年,甚至没有一次成功的垃圾邮件机器人攻击。我从服务器日志中知道,这些表单每天被垃圾邮件发送数百次,但我没有收到任何邮件。此方法不需要验证码或任何其他购买的软件。我将尽量不在这里给出所有细节,但我要说的足够多,大多数人都可以实现它。首先,您需要一个简单的基于文本的图形,该图形显示反垃圾邮件“代码”,关键是提示使用该代码的表单字段。其次,您需要一个电子邮件脚本,该脚本将接受别名(例如FormMail和许多其他)。在表单上创建一个名为“收件人”的必填字段(或电子邮件脚本希望向其发送表单输入的任何字段名)。显示“代码”图形,并在其旁边嵌入提示。确保设置电子邮件脚本以接受图形中使用的任何代码作为真实电子邮件收件人(您)的别名。实现此功能后,用户可以轻松阅读并输入您在图形中选择的代码(即电子邮件脚本中设置的电子邮件别名)。垃圾邮件机器人只能看到一个空白字段。如果机器人选择随机填充该字段,它将在电子邮件脚本中生成一个错误,实际上,该收件人不存在。你永远不会看到该错误,也不会收到任何垃圾邮件。我已经尝试了其他帖子中描述的大多数其他方法,但没有一种是100%有效的当然,一个人可以战胜这一点,但如果他做到了,你只需改变图形和
/*in your css hide the field so real users cant fill it in*/
form #website{ display:none; }
//in your php ignore any submissions that inlcude this field
if(!empty($_POST['website'])) die();
<input name="website" type="text" class="website"/>
form .website{ display:none; } /* hide because is spam protection */
# spam protection
if (isset($_POST["website"]) && $_POST["website"] == "") {
  # your php code to mail here
} else {
  http_response_code(400);
  exit;
}
if(preg_match('/http|www/i',$comments)) {
    $error_message .= "We do not allow a url in the comment.<br />";
  }