【问题标题】:Slow response of a Php+MySql applicationPhp+MySql 应用程序响应慢
【发布时间】:2015-11-11 16:46:14
【问题描述】:

我正在使用 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日志来查看正在调用的语句和语句。查询慢的日志也给了困扰的。
  • 检查 nginx 和 apache 日志启用 ddos​​ 拦截器
  • @Tim3880,MySql 日志已经启用,没有什么奇怪的。有什么我应该记录或在日志中查找的具体内容吗?
  • @FerozAkbar,我只运行 nginx。正如我在问题中提到的那样,我已经查找了日志。访问日志未显示用户请求或来自同一 IP 的许多请求的任何颠簸。
  • 他们会记录您必须根据您的要求过滤日志的每个请求

标签: php mysql ubuntu nginx


【解决方案1】:

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

1) 清理您的输入

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

或至少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 访问日志中所说,您会发现这些睡眠查询是 GET 参数,因此,找到它并阻止该 ip

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-29
    • 1970-01-01
    • 1970-01-01
    • 2014-01-25
    • 1970-01-01
    • 1970-01-01
    • 2013-10-18
    • 1970-01-01
    相关资源
    最近更新 更多