Closed. This question needs details or clarity。它当前不接受答案。












想要改善这个问题吗?添加详细信息,并通过editing this post来解决问题。

在4个月前关闭。



Improve this question




我正在尝试编写脚本来防止在正在构建的网站中进行暴力登录尝试。逻辑如下:
  • 用户发送登录信息。
  • 检查用户名和密码是否正确
  • 如果是,则让它们进入。
  • 如果否,则在数据库中记录失败的尝试。检查在给定时间范围内是否有太多失败(例如:5分钟内发生5次):
  • 如果是,则暂停执行10秒钟: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