你是人类吗?(或如何防止垃圾邮件)

12

您知道有哪些机制可以防止匿名垃圾邮件发送者滥用您的网站。

例如,假设我有一个网站,人们可以投票。但是,我不希望有人将某个选项垃圾投票到顶部。因此,我发现了(a)创建一个账户并只允许投票一次,以及(b)使用验证码来减少垃圾邮件。您还知道其他方法吗?它们的效果如何?

11个回答

17

13

我注意到的一件大事是,无论你做什么,你都希望你的系统是独特的。你希望攻击者必须为你特定的网站定制他们的自动化程序,而不是只是在它上面运行一个几乎可以在任何地方工作的预先存在的脚本。这甚至不需要具有加密安全性; 它只需使您的站点与常规站点有所不同。

这并不意味着您不能或不应该使用像预先构建的验证码小部件之类的东西。绝对可以使用其中之一作为起点! 这只是意味着您必须在某个地方进行自定义,以便发生了超出常规范围的额外操作,并且会破坏任何通常可以打败它的预先存在的脚本。

如果您的网站变得足够大,以致于有攻击者专门针对它进行攻击,那么您简单的小定制可能不再有效,您可能需要做一些更特殊的事情并考虑真正的加密等问题。但这是一种“好”问题。


8

对于 CAPTCHA 系统,我强烈推荐 reCAPTCHA

传统的计算机生成的 CAPTCHA 最终会被开发出足够智能的系统攻破。例如,这里有人声称可以攻破曾经被认为无法攻破的 Google CAPTCHA,成功率达到了30%。而 reCAPTCHA 则只显示无法通过光学字符识别认证的图像。

同时,您的用户的努力将有助于共同的好处 - 他们通过识别无法自动识别的单词来帮助数字化书籍。

请参见 此处 进行进一步解释和尝试。


6

2
编写一个计算机程序来击败那个东西可能会很烦人,但并不难。大多数由该物体产生的问题都可以通过智能计算机来解决。 - Brian

4
我是“隐藏域”验证码的粉丝。我不记得在哪里读到过这个想法,但其思路如下:
  • 按照正常流程创建表单
  • 添加一个额外的字段,但将其隐藏(例如,在周围的div或表格行上使用style="display:none"
  • 提交后,如果该字段为空,则执行适当的操作(例如发送电子邮件);如果该字段已填写,则为机器人提交者。

唯一会出现问题的情况是用户的浏览器无法处理CSS(或他们已将其关闭),这种情况非常罕见。


我的解决方案有点像这个:我使用JavaScript隐藏一个输入字段并设置其值。如果没有JavaScript,我会要求访问者在其中输入一个非平凡的值。如果有JavaScript,则是自动的。然后我在服务器端执行一个简单的测试。 - Aif

4
  • 限制每个IP地址每次投票的数量
  • 阻止匿名代理。
  • 对于投票:如何在“会话基础上”洗牌必须由表单返回的值。一旦“1”表示第一个项目,“2”表示第二个项目。然后,“77”表示第一个项目,“812”表示第二个项目,...可能有一些简单的数学在幕后,但它可以防止用户反复发送相同的HTTP查询。
  • 我非常喜欢的方法是使用AJAX表单,而不是简单的HTTP表单。从技术上讲,伪造投票并不比简单的HTTP表单复杂,但我编写了一个简单的博客软件,它的唯一垃圾邮件保护机制是通过AJAX提交评论-到目前为止没有垃圾邮件。

2

像一些电视“选秀”节目一样,为投票收费,并且不断地被垃圾邮件轰炸,赚取银行的利润!

说真的,这是一个非常棘手的问题,而且有一天(如果你听雷·库兹韦尔的话,可能很快),计算机将进行测试来筛选人类。我添加到列表中的答案显然有缺点,但只是为了列举:审查(让人类进行测试)和基于IP的跟踪(限制来自主机的投票数)。


美国偶像不收取投票费。 - jimyi
糟糕,我想我不能用这个借口阻止我的孩子们投票了。我会更新我的答案! - erickson
@jimyi:你发送文本消息投票的电话公司。 - Aric TenEyck

0

Stackoverflow有一些功能可以帮助解决这个问题。我认为你能够采取的最有用步骤就是禁止匿名用户和新账号进行投票。这样,没有人可以注册成百上千个账号,并利用他们的一票压倒其他用户。我觉得要求发表几篇帖子或者在一定时间内加入会员都是不错的选择。

有些人会说,你可以允许每个IP地址只投一票来解决这个问题,但我玩过很多游戏,在那些游戏中,恶意用户利用几乎无限的代理绕过基于IP地址的安全保障。这只是一个威慑手段,聪明的用户很容易克服它。


0

0

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