我有一个小型游戏网站,有 400 名成员(其中约 50 名活跃成员),基于 MySQL 数据库构建。我是唯一的开发人员,而且我是业余爱好者,所以我会犯不少错误。
为了保护我自己、网站和我的成员的贡献,我已将服务器设置为使用纯文本“我们遇到了错误”消息并自动通过电子邮件向我发送 PHP 错误信息。
当然,这在公司环境中是行不通的,太过严厉,但我的成员们都很理解,因为我们是一起发展网站的,而且我和他们中的大多数人都有私人关系。他们通常都是不懂技术的老人,这意味着故障软化的情况会让他们感到困惑。
该网站还在所有地方使用 PDO。
/背景故事完成
我今早醒来发现有 90 封错误邮件。不寻常!
所有这些都是在 2 分钟内触发的……极不寻常!
错误消息如下
PDOStatement::execute() expects parameter 1 to be array, string given
从我的代码来看,如果没有外界干扰这是不可能的。
于是我抓取了我的流量日志,发现来自东京的 IP 219.117.193.20 正在向我的网站发起如下请求:
GET /search.php?type=basic%20AND%201%20=%201
其中第一部分GET /search.php?type=basic
有效,并列在主导航中。其余所有内容均附加。
看起来像一次简单的Bobby Tables
攻击。
这种情况持续了几分钟,打了大约 100 个电话,然后就停止了。
我想问你们的是:
我是否应该尝试针对此 IP 采取一些措施?
或者这仅仅是可见性的代价并且太频繁以至于不值得关心?
您是否禁止了该 IP?子网?您是否联系了 ISP?
我只是好奇专业的服务器管理员在这种情况下会做什么,因为我想这肯定会发生极其频繁地...?
答案1
这是成名的代价。每隔一段时间,就会有人尝试针对几乎每个网站采取某种措施(例如,每隔几天,我就会发现一次针对 phpMyAdmin 易受攻击版本的扫描)。由于所涉及的机器几乎全部是僵尸终端用户机器,因此“采取行动”对它们毫无用处(当然,任何形式的“主动对策”都是完全错误的,但即使试图向所有者报告受感染的机器也几乎肯定是徒劳的)。
确保您的网站是安全的,然后继续您的一天。
答案2
由于您也是开发人员,您可能会考虑编写适当的错误处理程序来忽略和/或甚至触发“tar pit”响应/处理。
答案3
您要做的第一件事是验证收到的每个输入,并完全参数化传入数据库的每个查询。这样 SQL 注入攻击就不会成功。
正如 @womble 所说,试图禁止 IP 或子网是毫无意义的。发起攻击的人很可能根本不在该 IP 上。他们只会切换到另一个僵尸并继续攻击。
确保一切安全,然后就大功告成了。攻击将会失败,他们会感到厌倦,然后继续前进。
答案4
您可以尝试使用自行生成的客户端密钥来保护您的网站。仅将该密钥分发给您的成员并每年更新一次。
缺点:您可能必须解释如何在所有类型的网络浏览器中安装和使用该密钥……
更简单的方法可能是使用 .htdigest 密码保护您的服务器。