Closed. This question needs details or clarity。它当前不接受答案。
想要改善这个问题吗?添加详细信息,并通过editing this post来解决问题。
在4个月前关闭。
Improve this question
我正在尝试编写脚本来防止在正在构建的网站中进行暴力登录尝试。逻辑如下:
用户发送登录信息。 检查用户名和密码是否正确
如果是,则让它们进入。 如果否,则在数据库中记录失败的尝试。检查在给定时间范围内是否有太多失败(例如:5分钟内发生5次):
如果是,则暂停执行10秒钟: 立即向用户报告登录失败
向同事解释这件事时,有人问我,如果黑客在一秒钟内发送1000个请求,这将有什么帮助。前5个会立即返回,然后其余995个仅用10秒吗?
我暗中怀疑我不完全了解HTTP的工作原理-这种情况是否甚至可能发生,还是服务器将处理来自一个客户端的并发请求的数量受到限制?
更好的解决方案是增加 sleep 时间吗?
因此,前5个将很快,然后每个随后的将增加 sleep 。
攻击者:通过尝试向所有用户进行身份验证来阻止所有用户(特别是如果所有登录名都是公开的)
第二解决方案
用户:烦人的等待每个错误的“amount_of_time”
攻击者:继续尝试,以较低的测试/秒
第三解决方案
攻击者:通过发送许多错误的密码来阻止用户连接
第四解决方案
攻击者:需要解决验证码(必须很复杂)
好的解决方案(很多站点都使用过),但是be careful to our CAPTCHA. implementation。无论如何,这里有一个窍门(请参阅下一个解决方案)。
第五解决方案
攻击者:用不同的用户尝试相同的密码,因为阻止是基于用户的登录次数。
最终解决方案?
攻击者:难以进行有效的蛮力攻击。
重要注意事项
登录表单或登录提交链接被阻止了吗?阻止登录表单是没有用的。
抵御暴力破解首先是密码复杂性的问题,因此您需要严格的密码策略(尤其是在分布式暴力破解的情况下)。
我没有提到用salt散列密码的事实,您已经这样做了吗?因为如果比暴力破解更容易访问密码数据库,则攻击者将选择此解决方案(“链条的强度与其最弱的链接一样强”)。
想要改善这个问题吗?添加详细信息,并通过editing this post来解决问题。
在4个月前关闭。
Improve this question
我正在尝试编写脚本来防止在正在构建的网站中进行暴力登录尝试。逻辑如下:
sleep(10)
,然后向用户报告登录失败。 向同事解释这件事时,有人问我,如果黑客在一秒钟内发送1000个请求,这将有什么帮助。前5个会立即返回,然后其余995个仅用10秒吗?
我暗中怀疑我不完全了解HTTP的工作原理-这种情况是否甚至可能发生,还是服务器将处理来自一个客户端的并发请求的数量受到限制?
更好的解决方案是增加 sleep 时间吗?
sleep($numRequestsInLast5Minutes - 5)
因此,前5个将很快,然后每个随后的将增加 sleep 。
最佳答案
问题在于用户可访问性与攻击者模型之间的平衡。
第一个解决方案
If not password correct for a certain number of time:
block the user
send a reset link to the user
用户:可能被阻止,他们不希望重置攻击者:通过尝试向所有用户进行身份验证来阻止所有用户(特别是如果所有登录名都是公开的)
第二解决方案
If not password correct:
sleep(amount_of_time)
问题是:'amount_of_time'的值是多少?用户:烦人的等待每个错误的“amount_of_time”
攻击者:继续尝试,以较低的测试/秒
第三解决方案
If not password correct:
sleep(amount_of_time)
amount_of_time = amount_of_time * 2
用户:少打扰一些密码错误攻击者:通过发送许多错误的密码来阻止用户连接
第四解决方案
If not password correct for a certain number of time:
submit a CAPTCHA
用户:需要解决验证码(不太复杂)攻击者:需要解决验证码(必须很复杂)
好的解决方案(很多站点都使用过),但是be careful to our CAPTCHA. implementation。无论如何,这里有一个窍门(请参阅下一个解决方案)。
第五解决方案
If not password correct for a certain number of time:
block the IP
(eventually) send a reset link
用户:用户可能由于无法正确记住密码而被阻止。攻击者:用不同的用户尝试相同的密码,因为阻止是基于用户的登录次数。
最终解决方案?
If several login attempts failed whatever is the user by an IP :
print a CAPTCHA for this IP
用户:用户不能被IP阻止,但必须记住其密码。攻击者:难以进行有效的蛮力攻击。
重要注意事项
登录表单或登录提交链接被阻止了吗?阻止登录表单是没有用的。
抵御暴力破解首先是密码复杂性的问题,因此您需要严格的密码策略(尤其是在分布式暴力破解的情况下)。
我没有提到用salt散列密码的事实,您已经这样做了吗?因为如果比暴力破解更容易访问密码数据库,则攻击者将选择此解决方案(“链条的强度与其最弱的链接一样强”)。
关于php - PHP中的暴力/DoS预防,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1727329/
10-13 05:31