减慢(或停止)我的.js表单上的垃圾邮件或bot活动的最佳方法是什么?


What's the best way to slow (or stop) spam or bot activity on my .js form

这是一个if语句在(.click)…

$('#submit').click(function () {
***********************************
var email = $('input[name=email]');  
***********************************
if (email.val()=='') {
    email.addClass('hightlight');
    return false;
    } else email.removeClass('hightlight');
...
$('#submit').click(function () {
...
var email = $('input[name=email]');    

这是一个带有其他数据的PHP Ajax联系人表单。我最终得到了很多垃圾邮件,例如。ru(俄罗斯),所以它是好的错误,在一个if语句中最常见的,或者是更好的只是去验证码。如果是这样,任何好的参考,一个简单的可见和明智地使用这种情况。表格在http://www.shaneofalltrades.com/index.html#contact

最好是服务器端验证(某种captcha)。不要仅仅依赖于客户端验证

我认为最好的方法是使用验证码服务,如recaptcha。或者只是实现一个简单的随机计算,必须在帖子之前回答。比如"1+3等于多少?"

如果你收到很多垃圾邮件,你最好的办法就是添加一个验证码(reCAPTCHA)。

您可以添加一些代码,仅在评论包含URL或可疑内容时添加验证码。

…还是直接用验证码更好?如果是这样,有什么好的参考,在这种情况下可以明显和明智地使用…

reCAPTCHA是非常简单的集成,广泛使用,和良好的支持。

我将在表单上添加一个鼠标移动触发器,该触发器设置一个隐藏变量以接受表单

<input type='hidden' name='isValid' value='no' />
<script type='text/javascript'>
$('form').mousemove(function(){
    $('input[name=isValid]').val('yes');
})
</script>

并在服务器端检查

我使用这两个选项都有很好的经验:

  1. 使用基于会话的令牌,该令牌与表单一起在页面上生成,然后与表单一起提交,然后在服务器端进行评估。这需要"bot"利用cookie,并使用两个请求来发布表单。

  2. 使用onsubmit事件钩子来设置提交时的实际表单操作。这样,如果不处理javascript,脚本就不能轻松地读取目标url以进行发布。例子:

<form onsubmit="this.action = ['formpost','php'].join('.')">

你可以通过在一个单独的js文件中附加事件来混淆它,但是对于javascript被禁用,删除或当页面上的javascript断行时,将没有退路。

补充:有一个名为keypic.com的新服务也值得研究。http://www.keypic.com/

它的工作方式依赖于客户端实际从第三方服务器获取图像(大多数机器人不会),然后你可以在提交时重新验证。如果你愿意,这个系统很容易复制你自己。