Language agnostic 验证码验证逻辑?
我需要为我正在开发的集成软件编写一个验证码服务。经过一番思考后,我认为我并不完全理解captcha在技术上是如何工作的(我确实理解它在功能上是如何工作的),因此无法做出一些设计决策。有几件事困扰着我:Language agnostic 验证码验证逻辑?,language-agnostic,captcha,Language Agnostic,Captcha,我需要为我正在开发的集成软件编写一个验证码服务。经过一番思考后,我认为我并不完全理解captcha在技术上是如何工作的(我确实理解它在功能上是如何工作的),因此无法做出一些设计决策。有几件事困扰着我: 我应该为每个用户保留一个会话吗?(即记住他们的IP、域等) 我应该在失败时重新生成密码短语吗?(我知道像谷歌和digg这样的网站会这么做) 每次调用都会碰到数据库,我不确定这是否会影响服务器上的性能,但我会考虑使用像MyCAHED之类的东西。但我想无论如何都不能不命中db或缓存,因为您需要先读取,
- 客户是www中的其他人
- 我的服务包括:验证码服务和其他客户可以通过http请求访问的服务
session\u start()
和access$\u session
,例如JSP/Servlet,您可以通过HttpServletRequest#getSession()
获得它。由于您没有提到您使用的是哪一种,我无法给出更具体/详细的答案。我所能建议的只是查阅相关编程语言的文档/教程/书籍
你不需要记住IP。只需在会话中设置一个密钥/令牌就足够了,而这通常已经得到了cookie的支持,因此,如果您打算将这一切都进行homegrow,理论上也可以使用cookie(注意:不要将答案放在cookie中,而只使用一些唯一的密钥来标识客户机!)
2:我应该在失败时重新生成密码短语吗?(我知道像谷歌和digg这样的网站会这么做)
你当然应该。否则,机器人很容易对验证码进行暴力攻击
也就是说,是否有任何理由不使用现有的验证码API,您可以只插入其中,例如?验证码很难使用。在设计它们和打破它们方面有很多研究。
一个更好、更有用的解决方案是使用像reCAPTCHA这样的工具:它提供了相当好的安全性,使集成变得容易,并使键入的时间变得有用。我应该从为什么使用captcha开始?因为显而易见的答案是防止垃圾邮件机器人,我认为为每个用户保存会话是个坏主意。这可能导致错误地阻止合法用户。此外,它不会阻止智能机器人继续尝试破解您的验证码 此外,如果您不重新生成CAPTCHA,一个好的机器人最终会破坏它
因此,IMHO,最好不要阻止用户(可能会阻止注册用户,但如果是匿名用户,则不会),并为每个请求重新生成验证码。FYI,有验证码替代方案,如从列表中选择奇数项、解方程等。@Am,作为一个经常使用纯文本浏览器的用户(linux上的链接)我很欣赏非视觉验证码。@Ross这是一个网站,我不能决定是否使用它。但我确实理解。我更新了我的问题,这在某种程度上解释了为什么我不能使用recaptcha(问题的底部)。也许我可以,但我不知道如何修改recaptcha以满足我的需要。@BalusC:我也打算建议recaptcha,因为OP似乎对如何实现CAPTCHA感到困惑。。。但在重新阅读(编辑)的问题后,显然他想为他的客户自己提供一个类似于reCAPTCHA的服务:(@Wizardofods,从某种意义上说你是对的,但它更适合B2B和SOA,所以它不需要像reCAPTCHA那样复杂。顺便说一句,我一直在使用reCAPTCHA。但我不确定我是否能让reCAPTCHA按我的意愿去做(需要)。