淹没网络脚本&绕过安全

时间:2015-01-17 12:52:59

标签: php

我目前有一个连接到mysql的简单脚本。每次客户端连接到该脚本时,我都会为该IP数据库内的总max_connections添加+1。

在这个脚本中,我有一个限制,例如

if($user['max_cons'] < 5)
{
    # ... do some things
}

但是,如果用户同时使用多个线程充斥此Web脚本,他将能够绕过它并打开5个以上的连接。我尝试了一个python flooding脚本,它工作。

我想这是因为MySQL查询需要一些时间才能导入数据库。

我能做些什么来防止这种情况?

(顺便说一下:我不想阻止用户即使他淹没)

谢谢!

3 个答案:

答案 0 :(得分:0)

MySQL为您保留连接数。请参阅此answer以获取该号码。

答案 1 :(得分:0)

如果您担心泛滥或其他形式的攻击,您还需要在系统的基础架构和网络层中采取行动。一旦攻击到达您的代码,您就没有太大的操作空间,因为应用程序层已经被破坏了。

此外,如果您以这种方式设计防御,则需要在编程的每一段代码中重复或包含此代码。对基础架构和/或网络层执行操作将使您有机会将安全性和保护作为交叉问题或系统的“方面”添加,添加一次并拦截所有请求。

为每个用户检查'max_conns'的代码看起来更像是对我的配额检查,如果你愿意的话,这是你网站的一项功能。您可以使用它来防止用户意外使用比您想要允许的更多连接,但如果您想要抵御实际的预期攻击,则需要对基础架构和网络安全性进行一些研究,因为它是一个非常广泛的主题。

还有两个注释:

  • 也许你的托管服务提供商已经提供了某种防御措施,你可以依靠它吗?或者你自己主持?
  • 也许把它带到superuser.com

答案 2 :(得分:0)

您可以使用

sleep(1);//sleep for one second

在检查连接数之前,但是在增加了ip的连接数之后。像

这样的东西
   increaseConnectionsCount($user);//but max_cons should be affected n this method
   sleep(1);
   $user = reloadUser();
   if($user['max_cons'] < 5) {
     ...