php - 我应该使用 Sleep() 还是拒绝它们

标签 php sleep rate-limiting

我正在实现一个延迟系统,这样我认为滥用的任何 IP 都会通过 Sleep() 自动获得增量延迟。

我的问题是,如果攻击者在延迟时继续打开新实例,这是否会导致 CPU 使用率增加并因此终止我的站点?或者是 sleep() 命令使用最少的 CPU/内存并且不会对小脚本造成太大负担。我不想直截了本地否认他们,因为我宁愿他们不知道明显的限制,但愿意听听我为什么要知道。

[请不要讨论为什么我认为一个小网站上的 IP 滥用,原因如下:我最近构建了一个 cURL 页面的脚本并向用户返回信息,我注意到一些 IP 向我的愚蠢的小脚本发送垃圾邮件。 cURLing 过于频繁有时会导致我的结果无法从服务器即时轮询中获得,合法用户会失去他们的结果。 ]

最佳答案

sleep 不使用接受调用的进程尚未使用的任何 CPU 或内存。

实现 sleep() 时您将面临的问题是,您最终会用完文件描述符,而攻击者会在周围等待您的 sleep 超时,然后您的网站将对任何其他人显示为已关闭尝试连接。

这是一个典型的 DDoS 场景——攻击者实际上并没有尝试闯入您的机器(他们也可能尝试这样做,但那是另一回事),而是他们试图通过耗尽所有资源来破坏您的站点您拥有的资源,可以是带宽、文件描述符、处理线程等——当您的其中一项资源用完时,您的站点似乎已关闭,尽管您的服务器并未实际上关闭。

这里唯一真正的防御是要么不接受调用,要么有一个过滤掉调用的动态防火墙配置——或者一个路由器/防火墙盒,它做同样的事情但不在你的服务器上。

关于php - 我应该使用 Sleep() 还是拒绝它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6837763/

相关文章:

android - 如何防止 Android 应用程序锁定?

java - 如何使用 Guava RateLimiter 以特定速率向 cassandra 发送请求?

node.js - 我应该在应用程序级别应用速率限制还是使用 Nginx 的功能?

php - 排序具有不同位数的MySQL数据

php - 查询在正确执行时不获取数据

php - HTML 未在 Firefox 上显示

go - 使用 golang.org/x/time/rate 每分钟允许 N 个请求

php - 使用 php 进行 SQL 注入(inject)攻击

iOS iPhone sleep / Action 前的间隔

go - 改变 goroutine 休眠的时间