打击机器人垃圾邮件的不同方式

3
我有一个网站,其中包含一个简单的表单,可以将输入内容发布为推文到Twitter账户上。
目前没有安装任何验证码或反垃圾邮件系统,因此很自然地,垃圾机器人已经疯狂地发布其虚假内容。
现在,我想建立一种不需要任何验证码的验证方法。
这是我的想法,我需要你的诚实意见。
如果机器人在发布内容时没有使用鼠标或键盘(可能是通过某种生成的脚本),那么这实际上意味着它们无法给表单本身任何焦点。
我的想法是创建一个简单的JS条件,即必须获得某种焦点才能提交表单。
你对此有什么看法? 还有其他类似的想法吗?
谢谢!

如果你完全不加载JavaScript,它会起作用吗?因为机器人可能不会加载JS。 - Calavoow
我认为这是一个不好的想法,因为POST请求可以直接使用Perl、cURL、Python等发送,完全绕过您的表单,并将数据直接作为POST请求发送到服务器。 - adeneo
1
我同意。请阅读下面的答案和精选评论 :) - Slavisa Perisic
1个回答

3
一个想法是发布未经验证的消息,听起来本身就不太安全。但是,有几种方法可以最小化垃圾邮件。
例如,您可以实现蜜罐变体,向提交表单添加另一个字段,但以对实际用户隐藏的方式。机器人会错误地填写它,您可以在服务器端拒绝提交-信不信由你,大多数评论垃圾邮件都来自爬虫,因此即使像这样的基本方法也可以大大减少恶意内容的提交量。
您的假设是正确的,大多数机器人发帖时“不使用鼠标或键盘” - 这比模拟客户端活动更加微不足道。同样,您可以利用这一点-添加一个将通过JS填充并在服务器端验证其内容的字段。

3
此外,使用一个带有多个data-属性的隐藏输入字段作为数字(例如data-num1="7" data-num2="5"),然后使用JavaScript将这些数字相加并填充隐藏输入字段的值。在验证时,如果输入不是这两个数字的总和,则很可能是垃圾邮件。 - Richard Parnaby-King
一个有趣的想法,我之前也做过类似的事情。基本上,我可以实现用JS填充隐藏字段为无关紧要的字符串,并且只有当隐藏字段具有该值时才提交表单。否则,它不会被提交。这个怎么样? - Slavisa Perisic
2
或者,使用JavaScript在5秒后添加一个隐藏的输入字段?如果该字段缺失,则视为垃圾邮件。 - Richard Parnaby-King
太棒了,比我快几秒钟 :) - Slavisa Perisic
2
使用JS或任何其他不显眼的技术(recaptcha确实很显眼)的问题在于,如果有人真的想攻击您的网站,他们可能会成功。在客户端执行的任何逻辑都容易被恶意脚本模拟。 - Oleg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接