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

为了确保没有可以通过.htaccess利用的安全弱点,我们如何看到Apache可以通过像SetHanlderAddHandler这样的指令来使用所有可能的处理器。

我知道我可以通过查看mod_info的输出或通过configuration文件进行grepping(这是我在find这个问题的答案时发现的一种方法)来find一些,但这并不意味着没有可用的处理程序这样列出。 我想我可以下载和searchApache的所有源代码和每个已加载的模块,看看他们正在注册什么,但有没有更好的方法?

一个快速的解决办法是不允许在.htaccess中的AddHandler和SetHandler,但是它有缺点。 例如,Drupal对SetHandler指令有一个有效的用例,因为它将它用作深层防御的一部分,以防止某人以某种方式通过file upload器将其上载到站点时运行PHP脚本。

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

 AddHandler server-parsed .shtml SetHandler server-info AddHandler application/x-httpd-php5 .php 

如果有人感兴趣的话,可以从网站/ 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指令创build(请参阅http://httpd.apache.org/docs/2.4/mod/mod_actions.html#action )。

编辑2015年9月1日:我不知道是否有一些方法来转储一个httpd进程的内存,并find那里的处理程序名称。 我尝试了这个使用gcore,但没有成功(虽然我从来没有使用过,并做了这样的警告,所以我不知道如果我做错了什么)。

不可能,对不起。 根据我对“Apache模块指南”的声明:

因此,服务器本身并不假定知道哪个模块负责处理特定的请求,并且会询问每个模块是否对给定的请求有兴趣。 然后由每个模块或者轻轻拒绝服务请求,接受服务请求或者拒绝服务请求,因为authentication/授权模块做

这些都是按照devise要求在请求时处理的,所以你不能遍历模块或以其他方式解决这个问题。 您必须阅读每个模块的源代码才能了解其处理程序名称。

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

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

编写一个可以返回这些信息的apache模块也许是可能的,但是需要对apache代码进行一些探索,以便理解那里有什么可能。