【问题标题】:Browser based cryptographic challenge [closed]基于浏览器的密码挑战[关闭]
【发布时间】:2020-11-04 17:36:53
【问题描述】:

我们希望将密码挑战作为必需的表单字段来运行以减缓暴力破解(我们无法按源 IP 或任何其他常见元素进行过滤)。

每次客户端发送表单时,都必须解决 CPU 密集型挑战(解决它应该不超过 2 秒)对于客户端来说是可以接受的(不幸的是,验证码不是一个有效的选项,因为挑战需要完全被动/自动化)。

您知道适合这种用例的任何算法吗?挑战必须是唯一的,并且不能重复使用,以确保每个发送的表单都必须解决自己的挑战。

是否会要求浏览器强制使用 sha+salt 哈希并将原始字符串发送到服务器一个选项? (我会给客户端带有有效负载的字符串的长度)

【问题讨论】:

  • 什么是暴力破解?表单中是否有秘密元素,例如密码?
  • 登录表单被暴力破解(电子邮件和密码)

标签: javascript cryptography anti-bot


【解决方案1】:

您正在寻找类似 CloudFlare JavaScript 反机器人挑战的 JS 挑战

我亲自试验了该技术,因为它看起来是减缓蛮力攻击的候选好方法。

请记住,有像 https://github.com/evyatarmeged/Humanoid 这样的解决方案可以绕过上述 Cloudflare JS 挑战等挑战。

我遇到的一个问题是对于台式电脑来说是一个体面的挑战,对于 4 年前的移动设备来说通常是一个相当艰巨的挑战。这意味着对于台式电脑来说可能是 2 秒的挑战,而对于旧的移动设备来说可能是 10 秒的挑战。出于这个原因,我们放弃了这个解决方案。

为什么要他们解决密码学难题?也许提供一个值并在 3 秒后要求返回该值,以认为表单有效。

已经有解决方案。在我上面提到的项目中,我们使用了 AntiBot Cloud (https://antibot.cloud/en.html)。

通过快速搜索,我还发现:

【讨论】:

  • ...也许提供一个值并在 3 秒后要求返回该值,以认为该表单有效... 那行不通。流水线和并行性可以克服这一点。
  • 好的,因为您无法按 IP 地址过滤。所以是的,内存密集型挑战是唯一的方法。为什么不要求 bcrypt 挑战?也许使用这个包npmjs.com/package/bcryptjs
  • 我虽然也给客户端一个 sha 哈希、盐和响应长度,并且必须在客户端暴力破解哈希并将原始字符串发送回服务器以便能够验证表格。
  • 它可以是一个选项。因此,bcrypt 不是暴力破解,而是让您更好地控制获得最终哈希所需的操作集,因为它结合了所需的内存和 CPU 能力。我想到了其他替代方案来请求客户端挑战,但到目前为止我还没有找到比这更好的替代方案
  • 如何将 bcrypt 集成到这个工作流程中?因为如果我还需要在后端为每个请求(与前端一样多)计算它,这将占用我们太多的 CPU。
猜你喜欢
  • 1970-01-01
  • 2023-03-05
  • 1970-01-01
  • 1970-01-01
  • 2018-02-08
  • 1970-01-01
  • 1970-01-01
  • 2021-02-13
  • 2017-01-25
相关资源
最近更新 更多