PHP 中的暴力/DoS 预防 [关闭]

2024-01-02

我正在尝试编写一个脚本来防止在我正在构建的网站中进行暴力登录尝试。逻辑是这样的:

  1. 用户发送登录信息。
  2. Check if username and password is correct
    • 如果是,请让他们进来。
    • If No, record a failed attempt in the database. Check if there's too many fails within a given timeframe (eg: 5 in 5 minutes):
      • 如果是,则暂停执行 10 秒:sleep(10),然后向用户报告登录失败。
      • 立即向用户报告登录失败

在向同事解释这一点时,有人问我,如果黑客在一秒钟内发送 1000 个请求,这会有什么帮助。前5个会立即返回,然后剩下的995个都只需要10秒吗?

我隐隐怀疑我并不完全理解 HTTP 的工作原理 - 上述情况是否可能,或者服务器处理来自一个客户端的并发请求数量是否有限制?

更好的解决方案是增加睡眠时间吗?

sleep($numRequestsInLast5Minutes - 5)

所以前 5 个会很快,然后接下来的每一个都会增加睡眠。


问题在于用户可访问性和攻击者模型之间的平衡。

第一个解决方案

If not password correct for a certain number of time:
    block the user
    send a reset link to the user

User:可能会被阻止,而且他们不喜欢重置
Attacker:通过尝试对所有用户进行身份验证来阻止所有用户(特别是在所有登录信息都是公开可用的情况下)

第二种解决方案

If not password correct:
    sleep(amount_of_time)

问题是: 'amount_of_time' 的值是多少?

User:等待每个错误的“amount_of_time”可能会很烦人
Attacker:继续尝试,以较低的测试/秒数

第三种解决方案

If not password correct:
    sleep(amount_of_time)
    amount_of_time = amount_of_time * 2

User:较少出现密码错误的烦恼
Attacker:通过发送大量错误密码来阻止用户连接

第四种方案

If not password correct for a certain number of time:
    submit a CAPTCHA

User:需要解析验证码(不要太复杂)
Attacker:需要解析验证码(必须复杂)

很好的解决方案(并被很多网站使用)但是请小心我们的验证码。执行 http://svedic.org/programming/worst-captcha-ever。无论如何,有一个技巧(请参阅下一个解决方案)。

第五种解决方案

If not password correct for a certain number of time:
    block the IP
    (eventually) send a reset link

User:用户可能因为无法正确记住密码而被阻止。
Attacker:对不同的用户尝试相同的密码,因为阻止是基于用户登录的次数。

最终解决方案?

If several login attempts failed whatever is the user by an IP :
    print a CAPTCHA for this IP

User:用户不能被 IP 封锁,但必须记住其密码。
Attacker:很难进行有效的暴力攻击。

重要注意事项

登录表单或登录提交链接是否被阻止?阻止登录表单是没有用的。

抵抗暴力破解首先是密码复杂性的问题,因此您需要严格的密码策略(特别是在分布式暴力破解的情况下)。

我没有提到用盐对密码进行哈希处理的事实,您已经这样做了,对吗?因为如果访问密码数据库比暴力破解更容易,攻击者就会选择这种解决方案(“链条的强度取决于它最薄弱的一环”).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP 中的暴力/DoS 预防 [关闭] 的相关文章

  • 附加之前检查数据库中是否存在 ID

    我通过选择一个带有类别的数组json decode并将它们附加到文章中 public static function setArticleCategory Request request article Article where id r
  • PHP UTF-8 配置

    我正在使用 PHP 5 3 5 配置 Apache 2 2 17 服务器 我的目标是创建一个默认为内容类型的干净配置UTF 8 php ini default charset UTF 8 default mimetype applicati
  • WordPress 计划事件未在设定时间触发

    在 WordPress 中 我正在创建一个插件 用于向用户发送电子邮件 为此 我使用 WordPresscron工作 所以基本上它要做的就是每小时向用户发送电子邮件 所以我的代码看起来像这样 public function construc
  • 通过 AJAX jquery 更改表格背景颜色?

    设想 当我的网页加载时 自动搜索单元格已由用户输入并且具有价值 如果已输入 表格背景颜色将为红色 否则为绿色 假设该表尚未输入 桌子背景绿色是这样的 和表的源代码 table width 1023 height 200 border 1 t
  • 如何使用图像生成 SVG 二维码?

    我有一个用于生成 jpeg 和 png 格式的 qrcode 的代码 但也想在 PHP 中生成带有背景图像的 svg qrcode 我正在使用 qrlib php 生成 jpeg 和 png 格式 QRlib php 也支持 SVG 不是吗
  • 如何在 Yii 中设置 returnUrl 值

    我正在使用 Yii 我遇到的问题是Yii app gt user gt returnUrl 它总是让我回到index php page 由于我不知道用户从哪个页面访问了当前页面 如何将其值设置为请求当前页面的页面 您可以使用Yii app
  • MySQL 连接不工作:2002 没有这样的文件或目录

    我正在尝试设置 WordPress 我已经运行了 Apache 和 MySQL 并且帐户和数据库都已设置 我尝试建立一个简单的连接 我总是得到这个 错误 2002 没有这样的文件或 目录 它正在谈论什么文件或目录 我使用的是 OS X Sn
  • PHP 变量、方法、类等名称中的有效字符是什么?

    您可以在 PHP 变量 常量 函数 方法 类等名称中使用哪些有效字符 说明书上有some http php net manual en language oop5 basic php mentions http www php net ma
  • PHP中是否可以使用filter_var过滤带小数点的整数?

    我需要像这样过滤值100 50在 PHP 中使用filter var 现在我这样使用 filter var POST amount FILTER SANITIZE NUMBER INT 它给我的结果是10050 我怎么解决这个问题 提前致谢
  • 如何检测CSRF漏洞[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 给定一个网站 如何检测潜在的 CSRF 漏洞 提前致谢 这是一个CSRF https www owasp org index php
  • 使用 Laravel Fluent 查询生成器从多个表中进行选择

    我正在重写一些 PHP MySQL 来与 Laravel 一起使用 我想做的一件事是使数据库查询更加简洁使用 Fluent 查询生成器 http laravel com docs database fluent但我有点迷失 SELECT p
  • ActiveMQ发送ObjectMessage

    我正在使用 ActiveMQ 在我当前的项目中实现消息系统 我需要发送和接收 Java 对象 而不是简单的文本或二进制消息 Java 对象 我的消息对象 根据需要实现了 Serialized 接口 ActiveMQ 的最新版本添加了一些安全
  • 迁移时未找到 Laravel 致命错误类

    我已经跑了artisan migrate reset 我删除了一些迁移文件 因为我不再需要这些表 I ran composer dump autoload其次是artisan dump autoload I ran artisan migr
  • 我可以在 Laravel 5.2 中创建一个继承自 User 的新类吗?

    我对 Laravel 还很陌生 使用的是迄今为止的最新版本 5 2 因此我遇到了以下困境 我知道 Laravel 附带了一个User开箱即用的类 但我想开发一个系统 在其中我可以有另外两种类型的用户 称为Researcher and Adm
  • Symfony 5.4 Security Bundle,注册后无法登录

    我在 5 4 版本上构建空的新项目 我使用这些命令来构建项目 composer create project symfony skeleton 5 4 testapp54 cd testapp54 composer require weba
  • 如何在 php 中为每个其他函数调用自动调用函数

    Class test function test1 echo inside test1 function test2 echo test2 function test3 echo test3 obj new test obj gt test
  • 在 Woocommerce 的单个产品页面上显示特定的自定义产品属性

    我找到了以下代码 https isabelcastillo com woocommerce product attributes functions在产品详细信息页面上显示所有自定义属性 具有我需要的特定条形设计 代码的工作方式就像一个魅力
  • Laravel中with()和compact()有什么区别

    功能有什么区别with and compact 在 Laravel 中这两个例子 示例1 return View make books index gt with booksList booksList 示例2 return View ma
  • Symfony2 dev环境可以工作,prod环境给出404错误

    我最近在我的机器上成功安装了 Symfony2 我可以访问http localhost app dev php 开发环境 但是 当我尝试访问 prod 环境时 http localhost app php 我在浏览器中收到以下错误消息 哎呀
  • Cakephp - CSRF 令牌不匹配

    我在 Cakephp 3 6 中有一个项目 其中 MessageController 中的 3 个操作由 Ajax 调用 但是 我有一个问题 当我向其中一个操作发送请求时 XHR 会向我返回以下内容 message CSRF token m

随机推荐