防止字典攻击的最佳方法是什么?我已经想到了几种实现方式,但它们似乎都存在一些缺陷:
- X 次登录尝试失败后锁定用户。问题:很容易变成拒绝服务攻击,在短时间内锁定许多用户。
- 逐渐增加用户名每次登录尝试失败的响应时间。问题:字典攻击可能使用相同的密码但不同的用户名。
- 逐渐增加 IP 地址每次登录尝试失败的响应时间。问题:通过欺骗 IP 地址很容易绕过。
- 逐渐增加会话中每次登录尝试失败的响应时间。问题:通过创建每次尝试都会启动新会话的字典攻击,很容易绕过。
我非常喜欢gmail的反暴力破解系统。它基于用户可以积累的“热量”,在用户过热后,系统会通过验证码进行提示。您可以使用 sql 数据库或使用Redis 增量 https://redis.io/commands/incr。热量被分配给一个ip地址。通过互联网“欺骗”TCP 连接是 100% 不可能的因为三次握手 http://www.linuxsecurity.com/resource_files/documentation/tcpip-security.html,但是代理服务器很多并且IP地址非常便宜。代理服务器通常用于发送垃圾邮件,您可以检查黑名单 http://www.spamhaus.org/并自动提示他们输入验证码。
针对您的系统的每一个不良行为都会更新热表。例如,登录失败将累积 35% 的热量。一旦热度水平大于或等于 100%,用户就被迫解决验证码。解决验证码将“冷却”该 IP 地址。热表可以包含一个时间戳列,该列设置为更新时的当前时间。大约24小时后热量可以恢复到0。
验证码 https://www.google.com/recaptcha/intro/invisible.html是您可以使用的最安全的验证码。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)