0

我有一个允许匿名发帖的论坛,受 CAPTCHA 保护。为了方便用户,我为这样的用户设置了一个cookie,持续大约一个月,这样用户就不会一遍又一遍地得到验证码。以最简单的形式调用 cookie no_captcha_for_one_month,其值为1. 当用户返回并匿名发帖时,他不会得到验证码。

有人看到漏洞吗?论坛垃圾邮件发送者只需要正确填写一次验证码,然后将 cookie 信息用于他的机器人,然后就可以了。

我曾想过要有创意并使用服务器端哈希,其中包括例如用户 IP 地址和一些秘密盐来生成 cookie 值,但它当然对于这个 IP 地址仍然有效。

有人给我的印象是这个问题很愚蠢,我试图解决一些无法解决的问题。

4

5 回答 5

2

我建议实施您的 cookie 值 + salt 实施不是为了解决您的问题,而是出于安全原因。正如这篇博客文章所解释的那样,由于 cookie 安全性差,wordpress 也有类似的问题,尽管它更严重。在您的情况下,即使 cookie 已过期,一个确定的垃圾邮件发送者总是可以绕过您的 CAPTCHA。

为了解决提议的问题,我想到的唯一解决方案是实施强制验证码算法,如果它认为用户是垃圾邮件,它将覆盖您新安全的 cookie。在我的脑海中,我会使用自上次发布以来的时间、今天的帖子数量、在表单上撰写消息所花费的时间等属性。

编辑:我还应该提到,您可以通过在用户提交的链接上实现 rel="nofollow" 属性来降低您的论坛对垃圾邮件发送者的吸引力。参见维基百科

于 2011-03-07T12:07:06.090 回答
1

通过这样的解决方案,始终可以将 cookie 用于机器人。无论你尝试什么。

于 2011-03-07T12:05:40.247 回答
0

如下所述,cookie 可以很容易地从浏览器中获取并粘贴到机器人代码中,因此该解决方案并不可靠。

其他解决方案:

  • 找一些在论坛里发了很多帖子的用户,问他们是否自愿当版主。像 AutoHotkey 这样的论坛使用了这个系统,而且效果很好。垃圾邮件发送者倾向于避开审核快速有效的活跃论坛。他们更喜欢死论坛...
  • 限制每个 IP 地址的匿名帖子数量。对用户来说可能很烦人,但可以避免垃圾邮件泛滥。仅当您遇到此类洪水时才应设置。
于 2011-03-07T12:07:27.603 回答
0

更糟糕的是,因为您使用的是 cookie,所以垃圾邮件发送者甚至不需要执行一次验证码。Cookies可以由客户端更改,它们是由浏览器随页面请求一起发送的,因此客户端可以发送任何它想要的东西。事实上,垃圾邮件请求将来自脚本,因此更容易制造 cookie。

存储变量 server side sill 解决了我提到的问题;您将随机散列设置为 cookie,并在服务器上有一个存储 CAPTCHA 状态的表。对于垃圾邮件发送者来说,没有验证码,他们必须猜测一个哈希值,该哈希值存储了正确的变量存储在服务器端,这很难做到。

你提到的问题;事实上,每月一次可能不足以阻止垃圾邮件发送者,你无法解决这个问题。您必须向每个真实用户显示验证码,就像您希望垃圾邮件发送者也输入验证码一样频繁。请记住,验证码是必要的,因为您无法区分垃圾邮件发送者和普通用户。

你应该经常看验证码,它会说服人们注册。

于 2011-03-07T12:09:56.197 回答
0

加密时间(以皮秒或纳秒为单位)将其设置为输入值()并使用列名“哈希”将其设置在您的数据库中

在每个页面中设置它并查看它是否与数据库匹配。

于 2013-10-04T11:00:06.617 回答