php - Php+MySql应用程序响应慢

标签 php mysql ubuntu nginx

我正在使用 mysql+php 运行一个聊天室 ( phpfreechat )。我有一个专用服务器来运行此脚本,因为它会消耗大量资源。 100 个并发用户时一切正常。然而,最近一位用户威胁我们要杀死这个聊天室,他成功地做到了:(

只有 40 个用户,聊天室已经死了。发送一条消息需要 10-20 秒。 MySql 正在吃掉 300% 以上的 CPU。然而,如果有 100 个用户(未受到攻击时),聊天室仅使用 200-300% 的 CPU。我检查了以下内容,以确保他没有对我们的服务器进行 DoSing/DDoSing。

1 - Limited 3 requests per seconds.
2 - Analyzed access.log to see any weird activity or CRLF slow attacks. There is none.
3 - Looked per IP connections using netstat command and none has lots of connections. 
4 - I disabled ping of death

服务器上的静态网站即使受到攻击也能正常工作。我假设他正在通过聊天室发送许多请求来利用 mysql。我运行以下查询来查看当前与 mysql 的连接:

SHOW STATUS WHERE `variable_name` = 'Threads_connected'

结果只有 7,看起来很正常。我可以执行任何其他步骤来阻止他的攻击并保护我的服务器(聊天室)吗?

最佳答案

(来自最后一条评论) 啊,这意味着攻击者正在尝试使用 mysql 注入(inject)进行一些查询,所以首先你必须

1) 清理您的输入

如果您使用 pdo 或 mysqli,则使用绑定(bind)参数(准备好的语句)功能来过滤您的输入

或至少mysqliescapestring输入

如果您的 php 页面采用类似这样的值 .../page.php?id=10 然后检查该值并确保它只是整数,如下所示

if(is_numeric($_GET['id'])){ //do operations...}else { //suspicious input given by someone so exit}

2)限制查询执行时间

由于您有长时间运行的查询(由黑客发起),因此限制查询执行时间,使用语句超时、wait_timeout 功能,以便查询的执行时间受到限制

正如我之前在您的 apache 访问日志中所说的,您会发现这些 sleep 查询作为 GET 参数,因此,找到它并阻止该 ip

关于php - Php+MySql应用程序响应慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30832194/

相关文章:

PHP MySQL : Better Way to Update tag system

php - 创建表 "alias",并更改表类型

php - 如何将数组转换为键值对数组?

php - 仅更新帐户设置页面中提交的字段

android - 当我尝试在 UBUNTU 14.04 上的 Android Studio 中使用 Gradle 进行编译时,不断出现此错误

PHP、MYSQL 和 JSON

php - 电话号码改为2147483647?如何表示电话号码?

php - 我的 MySql、php 组合不能正常工作

Perl 抛出 "Can' t 在 @INC 中定位 Config/YAML.pm"

java - 登录失败