Node.js 防止暴力破解
Node.js brute force prevention
我在 Heroku 上有一个 MERN 堆栈项目 运行,今天有人开始向我的服务器发送大量登录请求(暴力破解)。每个请求都有不同的 IP 地址,因此我无法阻止该 IP。这已导致网站中断。
那我怎样才能阻止它呢?如何允许仅使用我的网站登录?
许多登录页面使用的典型解决方案是需要 human-like 交互且脚本难以复制的几种技术之一。
你肯定见过 captcha systems 要求用户解释一些图像,这些图像对于计算机分析来说并不容易或不实用。
还有一个 no-captcha system 要求用户用鼠标单击屏幕上的特定点,它会分析移动以查看它是否出现 human-like。这些通常显示为点击“我不是机器人”。
许多网站(例如某些 U.S. 航空公司和许多金融网站)现在要求用户设置“挑战”问题(例如:“您在哪里出生?”或“您最喜欢什么?”冰淇淋味?”)并且如果登录请求到达时没有为该用户预先放置签名 cookie(或其他熟悉的浏览器检测指标),那么在您尝试登录之前就需要挑战问题。
一种更严厉的方法(可能会对 end-user 产生更大的影响)是跟踪每个帐户的失败登录尝试,在达到一定次数后,您开始放慢响应速度(这会减慢关闭攻击者系统)并且在出现更多失败响应后,您会立即使每个请求失败并要求 end-user 通过发送到他们注册的电子邮件地址的电子邮件来确认他们的登录请求。这给 end-user 带来了不便,但可以防止在没有 end-user 确认的情况下对任何个人帐户进行 N 次以上的猜测。一段时间后,您可以清除任何给定帐户的先前登录尝试次数,使其腾出时间再次正常工作。
我在 Heroku 上有一个 MERN 堆栈项目 运行,今天有人开始向我的服务器发送大量登录请求(暴力破解)。每个请求都有不同的 IP 地址,因此我无法阻止该 IP。这已导致网站中断。
那我怎样才能阻止它呢?如何允许仅使用我的网站登录?
许多登录页面使用的典型解决方案是需要 human-like 交互且脚本难以复制的几种技术之一。
你肯定见过 captcha systems 要求用户解释一些图像,这些图像对于计算机分析来说并不容易或不实用。
还有一个 no-captcha system 要求用户用鼠标单击屏幕上的特定点,它会分析移动以查看它是否出现 human-like。这些通常显示为点击“我不是机器人”。
许多网站(例如某些 U.S. 航空公司和许多金融网站)现在要求用户设置“挑战”问题(例如:“您在哪里出生?”或“您最喜欢什么?”冰淇淋味?”)并且如果登录请求到达时没有为该用户预先放置签名 cookie(或其他熟悉的浏览器检测指标),那么在您尝试登录之前就需要挑战问题。
一种更严厉的方法(可能会对 end-user 产生更大的影响)是跟踪每个帐户的失败登录尝试,在达到一定次数后,您开始放慢响应速度(这会减慢关闭攻击者系统)并且在出现更多失败响应后,您会立即使每个请求失败并要求 end-user 通过发送到他们注册的电子邮件地址的电子邮件来确认他们的登录请求。这给 end-user 带来了不便,但可以防止在没有 end-user 确认的情况下对任何个人帐户进行 N 次以上的猜测。一段时间后,您可以清除任何给定帐户的先前登录尝试次数,使其腾出时间再次正常工作。