language-agnostic - 验证码验证逻辑?

标签 language-agnostic captcha

我需要为我正在开发的集成软件编写验证码服务。经过一番思考,我想我并没有完全理解验证码在技术上是如何工作的(我确实了解它在功能上是如何工作的),因此无法做出一些设计决策。困扰我的几件事是:

  • 我应该为每个用户保留一个 session 吗? (即记住他们的 IP、域等)
  • 我应该在失败时重新生成密码吗? (我知道像 google 和 digg 这样的网站会这样做)
  • 每次调用都会访问数据库我不确定这是否会影响服务器的性能,但我会考虑使用诸如 memcahed 之类的东西。但是我无论如何都想不出不命中数据库或缓存,因为您需要先读取,然后验证然后更新。
  • 我需要验证码的有效期吗?说15分钟?

  • 如果 1 是肯定的,那么我认为逻辑变得复杂,因为我需要做这样的事情:
    这个密码之前是否经过验证?过期了吗?是同一个ip吗?等等

    如果我需要记住 IP 并对其进行验证,在太多无效请求之后我该怎么办?我阻止他们吗?

    所以我认为验证码应该这样工作,简单的方法:

    有点无状态,这意味着生成的每个验证码只能在 2 个请求中存活,初始请求和子序列请求。结果要么失败,要么通过。如果失败,则创建一个新的。

    我很感激可以提出一些建议或解释正确验证码如何工作的人。谢谢。

    更新:

    我需要解释一下功能需求:

    条款:
  • 客户是别人在 www
  • 我的服务包括:验证码服务和客户可以通过http请求访问的其他服务。

  • 工作流程:
  • 客户向验证码服务提出请求
  • 验证码服务生成 token 、密码并保存到数据库
  • 客户向验证码 Web 发出 http 请求以检索图像
  • 客户向我们的其他服务提出请求并传递密码
  • 我们的其他服务将使用密码来验证我们的验证码服务
    等等...

  • 我也在考虑是否需要 3。或者我应该在步骤 2 中租用图像流。

    最佳答案

    1: Should I keep a session for each user? (i.e. remember their IP, domain, etc)



    取决于您使用的服务器端 Web 编程语言。大多数他们只提供内置的方式来管理 session ,例如 PHP 使用 session_start()和访问 $_SESSION例如在 JSP/Servlet 中,您可以通过 HttpServletRequest#getSession() 获得它.由于您没有提到您使用的是哪一个,我无法给出更具体/详细的答案。我所能建议的只是查阅相关编程语言的文档/tuts/书籍。

    您无需记住 IP。只需在 session 中设置一个 key / token 就足够了——这通常已经由 cookie 支持,因此如果您打算自行开发这一切,理论上您也可以只使用 cookie(注意:不要把cookie 中的答案,但只是一些唯一的 key 来识别客户端!)。

    2: Should I regenerate a passphrase on fail? (I know that sites like google and digg do it)



    你当然应该。否则,机器人很容易对验证码进行暴力破解。

    也就是说,您是否有任何理由不使用可以插入的现有验证码 API,例如 reCAPTCHA ?

    关于language-agnostic - 验证码验证逻辑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2218913/

    相关文章:

    javascript - Recaptcha 适用于移动设备,但不适用于桌面设备

    asp.net - reCaptcha 验证超时异常

    language-agnostic - 在对数时间内找到向量之间的最小角度

    language-agnostic - 现代软件开发抽象的含义

    language-agnostic - 我是否应该缩进所有赋值语句以使所有 "="符号位于同一行?

    language-agnostic - 确定具有非唯一选择的无序组合数量的函数

    oop - 继承可以完全被组合取代吗?

    php - "Could not open socket"

    azure - 如何添加验证码以在 Azure AD B2C 中注册体验

    c# - 更改 Recaptcha 的主题?