是否有人能够成功地阻止其网站上的垃圾邮件,而不会给您的访问者带来负担(例如 CAPTCHA),也无需使用集中式垃圾邮件报告系统(例如 Akismet)
我想展示我的 Web 表单,而不会给我的用户带来类似 CAPTCHA 的技术的负担,而且还能主动自动防止垃圾邮件。
似乎没有关于如何实施这种技术的详细说明/教程。
免责声明
此外,我意识到没有适合防止垃圾邮件的灵丹妙药。但是,如果简单地部署一个非侵入性(用户不可见)的预防系统,可以阻止 95% 以上的垃圾邮件,那么值得努力部署。
是否有人能够成功地阻止其网站上的垃圾邮件,而不会给您的访问者带来负担(例如 CAPTCHA),也无需使用集中式垃圾邮件报告系统(例如 Akismet)
我想展示我的 Web 表单,而不会给我的用户带来类似 CAPTCHA 的技术的负担,而且还能主动自动防止垃圾邮件。
似乎没有关于如何实施这种技术的详细说明/教程。
免责声明
此外,我意识到没有适合防止垃圾邮件的灵丹妙药。但是,如果简单地部署一个非侵入性(用户不可见)的预防系统,可以阻止 95% 以上的垃圾邮件,那么值得努力部署。
我基本上在我的网站上使用了一种技巧来防止垃圾邮件,并且效果很好(至少在垃圾邮件程序程序员阅读这篇文章之前;))。
代码是这样的:
在构建包含表单的站点的脚本中,我实现了:
$_SESSION['lastSiteId'] = 'something Unique';
$_SESSION['lastSiteRequest'] = time();
包含将评论写入数据库的逻辑的脚本包含以下内容:
if($_SESSION['lastSiteId'] == 'something Unique'
&& $_SESSION['lastSiteRequest'] + 5 < time()){
insertComment();
}else{
echo "Please read the article before posting a comment";
}
请记住,这是为您提供想法的伪代码。你最终必须独自实现它...... ;)
它所做的只是检查在重新生成表单和发送 POST 请求之间是否超过 5 秒。
请注意,垃圾邮件工程师没有睡觉。赌注是,如果程序员希望这样,垃圾邮件机器人可以在发布不需要的输入之前等待几秒钟。问题是:如果垃圾邮件发送者必须在请求之间等待 5 秒,可以发送多少垃圾邮件?看,也许这是防止垃圾邮件的最终解决方案。
将时间测试与 javascript 测试(如果可能并且想要的话)加上预填充/未填充的隐藏字段技巧相结合,您应该在几年后远离垃圾邮件。
蜜罐验证码(Phil Haack 的文章)。是用来做你正在寻找的东西的常用方法。这不是万无一失的,但究竟是什么?
这似乎是您已经探索过的内容。只要尽职尽责地了解解决方案的局限性是什么,如果您仍然发现它满足您的需求,请确保该技术已被其他人充分利用。
如果有最终解决方案,则根本不需要 CAPTCHA。但是,如果您的网站的大小不足以保证有人手动寻找破解它的方法,那么通过默默无闻的安全性可能是最好的方法。例如您在上面提供的链接,或者添加一个名为“City_2”之类的输入并将其隐藏。如果填写了输入框,那么您很可能遇到了垃圾邮件发送者,因为他们会自动填写每个字段 - 只需转储数据并继续前进……只需我的 2 美分。
摆脱 99% 的垃圾邮件,看这个 - http://wordpress-plugins.feifei.us/hashcash/
显然它只能防止自动垃圾邮件,将它与 Akismet 或其他东西一起使用并获得 100% 的保护。
更新:HashCash 是如何工作的? 垃圾邮件免费(使用僵尸网络免费),这就是它起作用的原因。所以这个想法是,如果这个过程可以使(CPU)昂贵,那么批量垃圾邮件/消息将不起作用。更多细节在这里 - http://en.wikipedia.org/wiki/Hashcash
可以使用 JavaScript 实现更简单的版本。在提交表单之前,脚本会生成一个计算值。这个过程必须是 CPU 昂贵的。大多数僵尸网络会避免这样做,因此不会自动发送垃圾邮件。
我最近尝试了一种非常简单的技术。我注意到,当出现一组单选按钮时,垃圾邮件机器人似乎总是要么选择第一个选项,要么接受预先检查的任何内容。因此,在我运行的一个网站上,我有一个表格,用户填写了可能有六个问题。其中一个问题是带有用于选择的单选按钮的“条目类型”。因此,我添加了一个新的首选选项“我是垃圾邮件发送者”,并附有解释为什么存在该选项的注释,并将其设为默认选项。如果表单是在选中该选项的情况下提交的,我会返回一条错误消息,而不是通常的确认消息。自从这样做以来,我收到的垃圾邮件数量几乎为零。我不知道是什么'
大多数情况下,我这样做是为了看看它是否会起作用——坦率地说,因为它很有趣,可以欺骗垃圾邮件机器人,让他们简单地承认并自首!大多数情况下,我把它提出来讨论:也许它会有助于一个更好的想法。
如果垃圾邮件发送者认为我的小网站值得特别关注,他们可以使用更智能的垃圾邮件机器人轻松击败它。但这可以说是许多反垃圾邮件计划。
在您的表格(评论或联系表格)中,您应该添加一个隐藏的输入
<input type="text" id="hidden_input" name="hidden_input" style="display:none;"/>
并编写一个小 php 来检查此输入是否已填充,因此您可以选择“if than else”来控制
if($_POST['hidden_input'] != ""){
echo('<p>You are a spambot!!!</p>');
}
这是因为人们看不到这张表格,所以我们无法填写。以这种方式确实机器人填充了每个输入,所以如果每个输入都被填充 PHP 发送此错误消息并且它不会发送到服务器评论或电子邮件,
这是一个非常好的工作解决方案,我在我的项目中使用它。
值得一试...
我使用Akismet,它实际上与垃圾邮件过滤器非常相似,但非常强大,因为它不断构建贝叶斯配置文件,其中包含使用该服务的每个站点的组合垃圾邮件(每天大约 1800 万条评论)。他们的网络服务非常简单而且速度非常快——只需通过网络发送评论,他们就会发回“垃圾邮件”或“非垃圾邮件”响应。几乎每个平台都有现有的 Akismet 库。
在我的网站上,如果评论通过了,我就把它存入数据库,否则我就默默地忽略它。
关于任何反垃圾邮件系统的一般评论:您所做的任何事情都不会是 100% 安全的。如果您的网站足够大或奖励足够多,以至于垃圾邮件发送者决定特别注意破坏它,他们可能会找到方法。但这就像他们经常说的家庭安全:当然,一个熟练、专业的小偷可以击败普通房主可能负担得起的任何警报系统。但是你会把笨拙的业余爱好者挡在门外,如果你给专业人士造成了足够的麻烦,你就会增加他的风险,当他打破它时,你已经回家了,或者邻居会看到他并打电话给他警察。当我为军队工作时,我们经常讨论安全和阻止合法用户工作之间的平衡。军队的目标不是一些假设的“ 我当然希望保护核弹头的人们坚持比我们在雷达系统周围设置的更高级别的安全性。在疑似发生袭击的地区,比如中东的基地,人们的安全性比我们在中美洲基地的安全性更高。等等。我当然希望保护核弹头的人们坚持比我们在雷达系统周围设置的更高级别的安全性。在疑似发生袭击的地区,比如中东的基地,人们的安全性比我们在中美洲基地的安全性更高。等等。
要点是:您的网站成为目标的可能性有多大?我当然希望我的银行使用更严格的安全措施来保护我的资金,而不是我费心使用来防止在我运营的会议网站上提交垃圾邮件摘要。拥有数百万访问者且知名的网站可能比拥有数千或数百名访问者的晦涩网站需要更好的安全性。“足够好”是多少?
问用户一个简单、随机的数学问题。如果他们解决了问题,他们会看到提交按钮。否则,他们不会。这也适用于静态站点。
这是问题输入组
<div class="input-group">
<input type="text" value="" id="testInput" class="form-control">
<span class="input-group-btn">
<button class="btn btn-default" type="button" id="mathTest">Go!</button>
</span>
</div>
这是生成和验证问题的脚本。
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript" src="https://ajax.microsoft.com/ajax/jquery.validate/1.7/jquery.validate.js"></script>
< script > jQuery(function($) {
$("#wj-form").validate();
var rnuma = Math.floor(Math.random() * 11);
var rnumb = Math.floor(Math.random() * 11);
var sum = rnuma + rnumb;
$("#rnuma").text(rnuma);
$("#rnumb").text(rnumb);
$("#mathTest").click(function() {
if (sum == $("#testInput").val()) {
$("#wj-form").append('<div class="form-group"><input type="submit" value="Send Message" class="btn btn-primary"></div>');
} else {
alert('Sorry, please try again.');
}
});
}); < /script>
上面的脚本正是这样做的。确保您没有将提交按钮放在表单中。只有在问题解决后才应附加它。我在这里实现了这个。确保使用id
脚本中提到的正确形式。
不过有一个警告。如果用户的浏览器上没有运行 javascript,则该技巧将不起作用。