我有一个允许匿名发帖的论坛,受CAPTCHA保护。为了方便用户,我为这样的用户设置了一个Cookie,持续了大约一个月,因此用户不会一遍又一遍地获得CAPTCHA。在最简单的形式中,cookie称为no_captcha_for_one_month
,其值为1
。当用户匿名返回并发帖时,他不会获得CAPTCHA。
有人看到这个漏洞吗?论坛垃圾邮件发送者只需要正确填写验证码一次,并将cookie信息用于他的机器人,并在那里。
我想要获得创意并使用服务器端哈希,其中包括:用户的IP地址和一些秘密盐来生成cookie值,但它当然对这个IP地址有效。
我得到的印象是问题很愚蠢,我试图解决无法解决的问题。
答案 0 :(得分:2)
我建议实施你的cookie值+ salt实现,不是为了解决你的问题,而是出于安全考虑。正如此blog post wordpress所解释的那样,由于cookie安全性差,因此有类似的问题,尽管它更严重。在您的情况下,即使Cookie已过期,确定的垃圾邮件发送者也可以绕过您的验证码。
为了解决提出的问题,我想到的唯一解决方案是实现强制CAPTCHA算法,如果它感觉用户是垃圾邮件,它将覆盖新安全的cookie。在我的头脑中,我将使用自上一篇文章以来的时间,今天的帖子数量,在表单上撰写邮件所花费的时间长度等属性。
编辑:我还应该提一下,通过在用户提交的链接上实施rel =“nofollow”属性,您可以首先使您的论坛对垃圾邮件发送者的吸引力降低。请参阅Wikipedia。
答案 1 :(得分:1)
使用这样的解决方案,总是可以将cookie用于机器人。无论你怎么做。
答案 2 :(得分:0)
如下所述,cookie可以很容易地从浏览器中获取并粘贴在机器人代码中,因此解决方案并不健全。
其他解决方案:
答案 3 :(得分:0)
更糟糕的是,因为您使用的是cookie,所以垃圾邮件发送者甚至不需要执行CAPTCHA一次。 Cookie可以由客户端更改,它们由浏览器发送页面请求,因此客户端可以发送它想要的任何内容。实际上垃圾邮件请求来自脚本,因此制作cookie更加容易。
存储变量服务器端窗台解决了我提到的问题;您将随机哈希设置为cookie,并具有一个表,用于在服务器上存储CAPTCHA状态。为了让垃圾邮件发送者不获取CAPTCHA,他们必须猜测存储服务器端存储正确变量的哈希值,这很难做到。
你提到的问题;事实上,每月一次可能不足以阻止垃圾邮件发送者,你无法解决这个问题。您必须向每个真实用户显示一个CAPTCHA,因为您希望垃圾邮件发送者也经常输入一个CAPTCHA。请记住,CAPTCHA是必要的,因为您无法告知普通用户的垃圾邮件发送者。
你应该经常参加CAPTCHA节目,无论如何都会说服人们注册。
答案 4 :(得分:0)
加密时间(以皮秒或纳秒为单位)将其设置为输入值()&使用列名'hash'
在DataBase中设置它在每个页面中设置它&看它是否与数据库匹配。