我有一个较旧的 Typo3 (v4.5.x) 网站,一段时间以来,我的服务器一直受到脚本小子的攻击。他发送了很多 PHP 请求,这些请求的 URL 在我的服务器上并不存在。我收到了许多 PHP 500 错误,一段时间后,并行 php 进程的数量超出了限制,我的网站瘫痪了一段时间,无法访问。
知道我能做什么吗?如何避免不处理此类不存在的 URL?
如果我查看这些请求并在 Google 上搜索,就会发现都是关于 wordpress 或 joomla 的一些漏洞。有人知道是否存在一些此类请求的列表,可以将其添加到 apache 级别的过滤器/阻止列表中吗?即
- 模板/原子/系统.php
- wp-内容/语言/system.php
- wp-admin/图片/系统.php
- 插件/captcha/jproicaptcha.php
- 模块/cgi.php
- 模块/mod_articles/func.php
- tmp/安装.css.php
- ...
答案1
您有多种选择:
- 如果请求来自单个 IP,只需在防火墙中阻止此 IP
- 为这些请求返回 403 或 404 响应代码。您可以在 .htaccess 文件中或直接在 Apache 配置文件中执行此操作(请参阅 LocationMatch 指令http://httpd.apache.org/docs/2.4/mod/core.html#locationmatch)
- 使用应用程序级防火墙。mod_security 将是一个明智的选择。
答案2
这实际上并不是 TYPO3 特有的问题。这是一个如何避免/阻止 DOS(拒绝服务)攻击或在这种情况下黑客攻击的问题。
越早阻止/转移攻击者越好,因为你不希望他占用你的资源并产生不必要的流量。因此,如果你可以阻止 IP,你可能想要这样做(但请记住,IP 可能是由提供商动态分配的,因此这有点残酷,不应永久执行)。
一旦攻击者确实到达您的 Web 服务器并生成 HTTP 请求,您希望他分配尽可能少的资源。因此,不要在 TYPO3 中提供错误页面(或转向起始页),而是确保完全阻止该页面或为这些已知 URL 提供最小的 404 页面(例如,不需要访问数据库或运行 PHP 脚本的静态 html 页面)。
示例:Apache Web 服务器
RewriteRule ^/?(wordpress/wp-admin/|wp-login|wp-admin|test/wp-admin/|wp-admins|phpmyadmin|test.php|cacti|hack.php|tomcat.php|db.init.php|db_session.init.php|shell.php|mysql/|admin/index.php|dbadmin/|xampp|myadmin/|typo3/phpmyadmin|templates|wp-content|plugins|modules|tmp) - [L,F,NC]
- F 表示“禁止”,参见http://httpd.apache.org/docs/2.4/rewrite/flags.html#flag_f
- RewriteRule 需要
RewriteEngine on
一次指令,并且需要模块 mod_rewrite (对于 TYPO3 重写规则,你应该有这个模块)