从日志中我们可以看到我们的服务器上有大量的访问请求upload.php
(例如/plugins/editors/tinymce/jscripts/tiny_mce/plugins/tinybrowser/upload.php
:),或者有大量的setup.php
phpMyAdmin 变体。
日志中出现了 404 错误,因为我们没有这些确切的 URL,但是,如果我们可以拒绝所有此类潜在攻击,我们会感到更安全。
所以我想拒绝Apache2 网络服务器上所有包含setup.php
或的请求。upload.php
我们有几个(数百个)VirtualHost,我不想在每个VirtualHost中编写数百次指令来拒绝这些文件名。
问题:如何在服务器上全局执行此操作?
答案1
您可以在 serverconfig 级别定义的目录上下文中安装 upload.php 和 setup.php 的重写规则。无论 vhost 是什么,这都应该检查请求。目录应该只匹配那些应用程序路径,这样您就不会拒绝访问其他应用程序内安装的同名脚本
<directory ~ "phpmyadmin_path_global_regex">
rewritengine on
options followsymlinks
rewriterule "setup.php$" - [F]
</directory>
<directory ~ "tiny_mce/plugins/tinybrowser">
rewriteengine on
options followsymlinks
rewriterule "upload.php$" - [F]
</directory>
#vhost defs at the same level
但是,这是……全局的。如果您稍后想要安装 phpmyadmin 并进行设置,则必须禁用上述过滤器或为您不想禁止访问的主机添加 rewriteconds。如果您想在 vhost 中拥有一个 tinybrowser,也是一样的。
也就是说,为了允许 setup.php 请求 vhost blah.com,您应该添加
rewritecond %{HTTP_HOST} "!blah.com"
我认为最好的办法是忽略 404 日志条目,并确保你的服务器上没有安装可利用的 phpmyadmin 或 tinybrowser。使用 cron 脚本确保你没有在 docroots 中忘记任何 setup.php,如果有,则将它们 chmod 设置为 0 或删除它们。再执行一次 cron 以确保你没有运行任何可利用的 phpmyadmin/tinybrowser 版本。同样可以应用于更广泛的应用程序。
另一方面,如果记录这些虚假请求让您感到困扰,那么您可以进行一些自定义日志记录。以跳过记录虚假请求:
setenvif Request_URI tiny_mce/plugins/tinybrowser/upload\.php$ bogus-ignore
customlog access.log common env=!bogus-ignore
#if you still want to log upload.php requests but in another log file then add:
customlog bogus-ignore.log common env=bogus-ignore