Apache 安全 - 列出所有可能的处理程序/操作

Apache 安全 - 列出所有可能的处理程序/操作

为了确保不存在可通过 .htaccess 利用的安全漏洞,我们如何才能通过诸如SetHanlder和之类的指令查看 Apache 可以使用的所有可能的处理程序AddHandler

我知道我可以通过查看 mod_info 的输出或 grepping conf 文件(这是我在尝试寻找此问题的答案时发现的一种方法)来找到一些,但这并不意味着没有以这种方式列出的可用处理程序。我想我可以下载并搜索 Apache 的所有源代码和每个加载的模块,看看它们正在注册什么,但有没有更好的方法?

一种快速解决方法是不允许在 .htaccess 中使用 AddHandler 和 SetHandler,但这样做有其缺点。例如,Drupal 有一个 SetHandler 指令的有效用例,因为它将其用作纵深防御的一部分,以防止有人设法通过文件上传器将 PHP 脚本上传到网站时运行。

以下是我所指的一些示例:

AddHandler server-parsed .shtml

SetHandler server-info

AddHandler application/x-httpd-php5 .php

如果有人感兴趣的话,这是来自 sites/default/files/.htaccess 的 Drupal 用例:

# Set the catch-all handler to prevent scripts from being executed.
SetHandler Drupal_Security_Do_Not_Remove_See_SA_2006_006
<Files *>
  # Override the handler again if we're run later in the evaluation list.
  SetHandler Drupal_Security_Do_Not_Remove_See_SA_2013_003
</Files>

2015 年 7 月 30 日编辑:这不是一个详尽的答案,但万一对任何人都有帮助,我发现一些处理程序列在顶部http://httpd.apache.org/docs/2.4/handler.html还可以通过 Action 指令创建自定义处理程序(请参阅http://httpd.apache.org/docs/2.4/mod/mod_actions.html#action)。

编辑于 2015 年 9 月 1 日:我想知道是否有某种方法可以转储 httpd 进程的内存并在其中找到处理程序名称。我尝试使用 gcore 来实现这一点,但没有成功(虽然我以前从未使用过它,并且在执行时收到警告,所以我不确定我是否做错了什么)。

答案1

抱歉,不可能。根据我的声明Apache 模块指南

因此,服务器本身并不知道哪个模块负责处理特定请求,而是会询问每个模块是否对给定请求感兴趣。然后由每个模块决定是温和地拒绝服务请求、接受服务请求还是断然拒绝服务请求,就像身份验证/授权模块所做的那样

根据设计,这一切都是在请求时处理的,因此您无法遍历模块或以其他方式弄清楚这一点。您必须阅读每个模块的源代码才能了解它们的处理程序名称。

最好的办法是自己制作一个模块,根据一组可接受的处理程序名称检查当前为请求设置的处理程序,如果列表中不存在则将其更改为默认值。

答案2

我很确定没有已经实现的方法来返回处理程序可以将请求映射到的现有操作、脚本等的列表。

也许可以编写一个可以返回此类信息的 apache 模块,但需要对 apache 代码进行一些探索才能了解那里可能实现的功能。

相关内容