Cookies 使验证码对用户暂时具有粘性?

Cookies 使验证码对用户暂时具有粘性?,cookies,captcha,sticky,Cookies,Captcha,Sticky,我有一个论坛,允许匿名者发布,受验证码保护。为了方便用户,我为这样的用户设置了一个Cookie,该Cookie将持续大约一个月,这样用户就不会一次又一次地获取验证码。在最简单的形式中,cookie称为一个月的no\u captcha\u,其值为1。当用户返回并匿名发布时,他不会得到验证码 有人看到缺陷吗?一个论坛垃圾邮件发送者只需要正确填写验证码一次,并使用cookie信息为他的机器人,他就去了 我考虑过发挥创意,使用服务器端散列来生成cookie值,该散列包括用户IP地址和一些秘密salt,当

我有一个论坛,允许匿名者发布,受验证码保护。为了方便用户,我为这样的用户设置了一个Cookie,该Cookie将持续大约一个月,这样用户就不会一次又一次地获取验证码。在最简单的形式中,cookie称为一个月的
no\u captcha\u
,其值为
1
。当用户返回并匿名发布时,他不会得到验证码

有人看到缺陷吗?一个论坛垃圾邮件发送者只需要正确填写验证码一次,并使用cookie信息为他的机器人,他就去了

我考虑过发挥创意,使用服务器端散列来生成cookie值,该散列包括用户IP地址和一些秘密salt,当然,它对该IP地址仍然有效


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

有了这样的解决方案,总是可以将cookie用于机器人。无论您尝试什么。

使用这种解决方案,始终可以将cookie用于机器人。无论您尝试什么。

我建议您实施cookie value+salt实现,不是为了解决问题,而是出于安全原因。正如这篇文章所解释的,wordpress也有一个类似的问题,尽管问题严重得多,因为cookie安全性差。在你的情况下,一个坚定的垃圾邮件发送者总是可以绕过你的验证码,即使cookie已经过期

为了解决所提出的问题,我想到的唯一解决方案是实现一个强制验证码算法,如果用户感觉被垃圾邮件攻击,该算法将覆盖新保护的cookie。在我的脑海中,我会使用一些属性,如自上次发布以来的时间、今天的帖子数量、在表单上撰写消息所用的时间长度等


编辑:我还应该提到,通过在用户提交的链接上实现rel=“nofollow”属性,您可以首先降低论坛对垃圾邮件发送者的吸引力。请参阅。

我建议实施cookie value+salt实现,这不是为了解决问题,而是出于安全原因。正如这篇文章所解释的,wordpress也有一个类似的问题,尽管问题严重得多,因为cookie安全性差。在你的情况下,一个坚定的垃圾邮件发送者总是可以绕过你的验证码,即使cookie已经过期

为了解决所提出的问题,我想到的唯一解决方案是实现一个强制验证码算法,如果用户感觉被垃圾邮件攻击,该算法将覆盖新保护的cookie。在我的脑海中,我会使用一些属性,如自上次发布以来的时间、今天的帖子数量、在表单上撰写消息所用的时间长度等


编辑:我还应该提到,通过在用户提交的链接上实现rel=“nofollow”属性,您可以首先降低论坛对垃圾邮件发送者的吸引力。请参阅。

如下所述,cookie可以很容易地从浏览器中取出并粘贴到机器人程序代码中,因此解决方案并不健壮

其他解决办法:

  • 找到一些在论坛上发了很多帖子的用户,询问他们是否自愿担任版主。像AutoHotkey one这样的论坛使用这个系统,效果很好。垃圾邮件发送者倾向于避免活跃的论坛,因为这些论坛的调节速度快且效率高。他们更喜欢死论坛
  • 限制每个IP地址的匿名帖子数量。对用户来说可能很烦人,但可以避免垃圾邮件泛滥。仅当您遇到此类洪水时才应设置

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

其他解决办法:

  • 找到一些在论坛上发了很多帖子的用户,询问他们是否自愿担任版主。像AutoHotkey one这样的论坛使用这个系统,效果很好。垃圾邮件发送者倾向于避免活跃的论坛,因为这些论坛的调节速度快且效率高。他们更喜欢死论坛
  • 限制每个IP地址的匿名帖子数量。对用户来说可能很烦人,但可以避免垃圾邮件泛滥。仅当您遇到此类洪水时才应设置

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

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

你提到的问题;事实上,一个月一次的时间可能不足以阻止垃圾邮件发送者,你无法回避这一点。你必须向每一个真正的用户显示验证码,只要你想让垃圾邮件发送者也输入验证码。请记住,验证码是必要的,因为您无法区分垃圾邮件发送者和普通用户


你应该经常进行验证码显示,它将说服人们无论如何都要注册。

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

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

你提到的问题;事实上,一个月一次的时间可能不足以阻止垃圾邮件发送者,你不能