我通常只做前端用户界面。但是,在我一直在努力的项目中,我必须制作一个表格。该表单可以通过电子邮件发布,但不幸的是,有大量垃圾邮件正在通过。我已经添加了CAPTCHA输入但是,如果有的话,这似乎并没有减少垃圾邮件数量。
经过一番研究,看来蜜罐是最好的选择。但是因为我不太了解php和javascript(在此工作:)),我不确定这个的最佳代码是什么或放在哪里。
但是,我还没有找到关于如何做到这一点的明确指南。
所以我的问题是;有没有人知道有关如何制作和实现蜜罐输入的指导的明确指南(使用服务器端条件代码)?
感谢任何帮助。感谢。
P.S。表格在灯箱"中,因此可能影响事物。
答案 0 :(得分:2)
<form>
<input name="not-honeypot" type="text">
<input name="honeypot" type="text" style="display: none">
</form>
<?php
if (!empty($_POST['honeypot'])) {
// this is a spam!
}
display: none
注意[name=honeypot]
。如果您的垃圾邮件发送者足够聪明,无法填充隐藏字段,则需要另一种方法来隐藏用户的蜜罐字段。或者根本不隐藏它。
答案 1 :(得分:1)
实际上非常简单。我将从记忆中尝试,所以预计会出现错别字。您可以随时谷歌获得更加可靠的答案,因为我确信那里的教程很少。
<form method = "POST" action = "post.php">
<input type = "email" name = "email>
<input type = "email" name = "emailb">
<input type = "submit">
</form>
$(document).ready(function(){
$(".another[attribute='emailb']").hide();
});
<?php
if (!empty($_POST['emailb']))
throw new Exception("SPAAAAM");
你需要使用javascript,因为大多数自动机器人都不会使用它。但是,您还需要检查从该IP发送的X分钟内发送的表单数量以及其他一些选项以防止更多。注意:不要自动将其删除,将recaptcha显示为最后一行。
答案 2 :(得分:0)
spam
可能是什么:垃圾邮件可能包括:
1. 比小写字母更多的大写字符
2. 比文字更多的空格
3. 非常短的帖子(例如10个字符)
1. if (strlen(preg_replace('![^A-Z]+!', '', $post)) > strlen(preg_replace('![^a-z]+!', '', $post))){
//spam post
}
2. if(!isset($post) || strlen(strip_tags($post))<150){
//too short - spam post
}
3. if (strlen(preg_replace('/\S/', '', $post)) > strlen(preg_replace('/\s+/', '', $post)))
{
//spam post
}
这不会阻止垃圾邮件,但它应该过滤掉它。