如果页面上没有提交按钮,垃圾邮件机器人能否提交表单?

问题描述:

想知道是否有人知道如果垃圾邮件机器人能够提交表单,如果没有提交按钮在页面上。只是试图做一些非常基本的垃圾邮件预防,而不使用验证码。我们的想法是,如果用户以某种方式与表单交互,则使用jQuery来呈现提交按钮。任何想法将不胜感激。如果页面上没有提交按钮,垃圾邮件机器人能否提交表单?

+0

我认为你不应该重新发明轮子... 一切都可以绕过和黑客入侵,问题是你的网站真的有这种危险吗?最好的事情将是有服务器deffence以及。但安捷伦...一切都可以绕过 – 2011-04-04 20:30:04

+1

我读到了一个欺骗垃圾邮件机器人的另一种方法,那就是向你的表单添加隐藏字段,以便正常人不会修改/发布到服务器。垃圾邮件机器人很可能会填写这些字段,在这种情况下,您可以检测到这一点并拒绝他们发布的任何内容。 – I82Much 2011-04-04 20:34:38

+2

@guy:恰恰相反。在这里,重新发明轮子将防止他对非专门的垃圾邮件。 – SLaks 2011-04-04 20:36:49

由围绕WebKit或其他浏览器核心的代码包装组成的spambot可以强制执行DOM“submit()”,或者(甚至更激进)启动它自己的POST事务。

最好把spambot想象成一个强大的邪恶机器人,它的浏览器不遵循原子能束附加到机器人大脑的规则。但是它是一个不能很好地阅读的机器人。

是的,这是可能的,一个机器人不需要提交按钮。

如果您有(pseudohtml):

<form action="POST" target="posting.php"> 
<input name="something"/> 
<!-- some logic for the submit button --> 
</form> 

的机器人可以简单地解析form标签并在窗体字段的名称和发布它自己的POST,从来没有接触提交按钮。

是的,他们可以。按钮没有完全必要:

$('#form_id').submit(); /* This is a jQuery trigger */ 

但机器人可能是讨厌的,并出具了自己 POST请求到服务器,因为它不是很难的事。

但是,如果您创建了一个<input type="hidden" />带有jQuery的secret-ish值(由服务器知道并为每个会话动态检索),并且只有在该值存在时才接受提交,则会停止所有未启用JS的机器人。

缺点是,你会阻止非JS功能的用户使用你的网页。但这是你必须争取杀死垃圾邮件发送者的持续战斗...

+0

我想我们可以放心地说,Javascript被禁用的真实情况可以忽略。你能举出一个不涉及这个人的实际案例:http://dailyyeah.com/wp-content/uploads/2010/05/unix-based-computer-reboot.jpg? – korona 2011-04-04 20:35:04

+1

^这包括所有Mac用户。 (我使用Linux,所以我被排除在外)。但是你有没有听说过NoScript Firefox插件?它阻止JS运行,直到你允许它,并且它非常流行,所以我在设计时仍然会考虑没有JavaScript的人。 – Blender 2011-04-04 20:37:31

从未编码垃圾邮件机器人,我只能做出假设。但我会假设提交按钮的存在并不会真正有效。更可能的是,它正在查看<form> -tag并根据该位置确定是否应该发出POST/GET请求。一个更好的选择(但决不是傻瓜)将不使用<form>,但手动做一个$ .post(因为你提到使用jQuery),当你点击一个按钮或链接,收集POST数据在飞行中的元素。

一个机器人绝对能找到你的帖子按钮,如果不经常。

非常流行的方法类似你正在尝试创建一个蜜罐表单元素。表单上的可编辑蜜罐字段对人们是不可见的(您可以使用jQuery/CSS来隐藏这些表单元素)。它们在表单数据发布时进行验证,如果它们包含任何输入,则提交者必须是某种类型的bot。

使用隐藏的字段名称,验证也可以停止这些漫游器。如果电子邮件字段必须有@符号,并且机器人无法确定哪个字段是电子邮件,哪些字段不是电子邮件,那么它将成功发布邮件的机会大大减少。

+0

恰恰是我在“Pragmatic Programmers”杂志上阅读过的内容。 – I82Much 2011-04-04 20:35:22

+1

+1从未听说过/使用过这种方法,#loveit – xandercoded 2011-04-04 20:35:40

+0

我刚开始使用它,很惊讶于很少有人还不知道/使用这种方法。 – ashurexm 2011-04-04 20:38:28

通常情况下,我们会制作一个隐藏字段,名为“多汁吸引人”,名字如“名字”。

然后在代码隐藏我们运行类似:

if FirstName.text <> "" Then 

    <insert your "what I want to happen" code. maybe a popup saying "oops an error has been made" or just not submit the form. maybe redirect to a fake error page. like 

    response.redirect("thisisabot.aspx") 

endif 
+1

也许**不做任何事情**。向垃圾邮件发送者提供错误信息是一个糟糕的主意:)让他们认为这一切都是正确的! ;) – 2013-01-28 10:51:11

没有必要渲染提交按钮经常将数据从远程服务器发送,而不是从页面本身填写。验证码很可怕,有时候很不清楚,我不明白它说了什么。我一次使用三种方法来阻止机器人。

  1. 比较表单源IP地址和目标IP地址,如果它们不匹配,则不会进行进一步的处理。
  2. CSS隐藏的字段留空,如果填充,它是一个bot,并被忽略。
  3. 另一个在提交表单时通过JavaScript接收预定值的字段。没有匹配,没有进一步的处理。

我还记录了IP地址到数据库表的尝试。这些尝试失败了一次,两次或全部测试。

但是,阻止血汗工厂垃圾邮件发送者完全是另一回事。血汗工厂垃圾邮件发送者是被廉价雇用来手动发送垃圾邮件的人。如果您的网站较大,则可能需要使用处理此类垃圾邮件的服务。一些服务也处理滥用的语言。