从我们在服务器上看到的日志中,有大量的请求来访问upload.php (例如: /plugins/editors/tinymce/jscripts/tiny_mce/plugins/tinybrowser/upload.php ),或者setup.php了大量的variablessetup.php为phpMyAdmin。
这些日志中有404个错误,因为我们没有这些确切的URL,但是如果我们能够否认这种types的所有潜在的攻击,我们会觉得更安全。
所以我想拒绝在我的Apache2 web服务器上包含setup.php或upload.php所有请求。
我们有几百(百)的VirtualHost,我不想写几百次的指令来拒绝每个VirtualHost中的这些文件名。
问题:如何在服务器上全局执行此操作?
您可以在serverconfig级别定义的目录环境中安装upload.php和setup.php的重写规则。 这应该检查请求,不pipevhost是什么。 目录应该只匹配那些应用程序path,所以你不会拒绝访问其他具有相同名称的脚本,而是安装在其他应用程序中
<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并设置它,你将不得不禁用上面的filter,或者为你不想禁止访问的主机添加rewriteconds。 相同的,如果你想有一个微型浏览器内的虚拟主机。
也就是说,为了让vhost blah.com的setup.php请求,你应该添加
rewritecond %{HTTP_HOST} "!blah.com"
我会说最好的办法是忽略404日志条目,并确保你的服务器上没有可利用的phpmyadmin或tinybrowser安装。 使用cron脚本来确保你没有任何setup.php在docroots中被遗忘,如果你这样做,然后chmod到0或删除它们。 做另一个cron,以确保你没有运行任何可利用的phpmyadmin / tinybrowser版本。 同样可以应用于更广泛的应用程序。
另一方面,如果logging这些虚假请求困扰你,那么你可以做一些自定义日志logging。 跳过logging假的请求:
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