欢迎加入站点基地设计开发交流群:30720409
详细内容
ModSecurity for Apache2[三十四]
发布日期:2010-07-21     点击:2248     字体:[ ]
五.处理阶段
 
处理阶段
ModSecurity 2.x允许规则放在以下五个阶段之一:

请求头(REQUEST_HEADERS)

请求的主体(REQUEST_BODY)

响应头(RESPONSE_HEADERS)

响应体(RESPONSE_BODY)

日志(记录)

下面是一个标准的Apache的请求循环图。在图中显示了5ModSecurity的5个处理阶段。



为了在一个规则的执行时选择一个阶段,可以用阶段(phase)动作在规则里直接指定或者使用SecDefaultAction指令:

SecDefaultAction "log,pass,phase:2"
SecRule REQUEST_HEADERS:Host "!^$" "deny,phase:1"
 

注意:
注意,规则是根据阶段来执行的,因此,即使两个规则在配置文件里是相邻的,但设置为不同的阶段执行,它们不会一个执行后另一个紧接着执行。在同一个阶段里规则的顺序才是重要的,这一点当使用skip和skipAfter时尤其重要。

注意:
日志阶段是比较特殊的,不管发生了什么它都在每个交互的最后发生。这就意味着不管请求是被拦截还是允许执行它都要被处理。

请求头阶段:
在Apache读完请求头(post-read-request phase)后该阶段里的规则立即被处理。这时请求体还没有被读,这意味着不是所有的请求参数都可用。如果你需要它们运行的早一点(在Apache与请求处理之前)那么你需要在这个阶段里替换规则,在请求体被读之前做一些事,决定请求体是否应该被缓存,或者决定你想怎么处理请求体(例如是否解析为XML)。

注意:

在这个阶段里的规则不能使用Apache范围的指令(Directory, Location, LocationMatch, etc...),因为post-read-request还没有获得信息。这里虚拟主机指令是个例外。如果你想在Apache地址下使用ModSecurity,那么它们应该在第二阶段运行。请参考上图。

请求体阶段
这是通用输入分析阶段。大部分面向应用的规则都应该放在这里。在该阶段你可以接收到请求参数(提供的的请求体已经被读取)。 ModSecurity在请求体阶段支持三种编码类型:

 
 
l         application/x-www-form-urlencoded – 用于表单数据交互
      multipart/form-data- 用于文件传输
l         text/xml- 用于XML数据传输


其他的编码大多数Web应用程序不使用。

响应头阶段
该阶段发生在响应报头发送至客户端之前。如果你想观察在响应之前发生什么应该在这里运行,以及你是否想用响应报头来决定你是否要缓冲响应体。请注意,一些响应状态码(例如404)在请求处理周期里是早于Apache请求周期的,所以可能并不能像期待的那样触发,此外,还有一些响应报头是在晚一点时候被Apache添加的(像Date,Server和连接),以至于我们不能触发或审查。这个应该在一个代理模式或第五阶段执行。

响应体阶段
这是一个通用输出分析阶段。此时,你可以对输出体应用规则(当然,它要被缓存),在这个阶段里,你可以检查信息披露,错误信息或没有验证出站的HTML文本。

日志阶段
这一阶段就在统计日志运行之前进行。规则置于这一阶段只能影响如何进行日志统计。这一阶段可以用来检查由Apache记录的错误信息。你不能拒绝/阻挡连接在这个阶段,因为为时已晚。这一阶段还允许检查那些在第3或第4阶段不响应的报头。请注意,你不能在这一阶段继承一个中断的动作,因为在ModSecurity 2.5.0及更高版本中这是一个配置错误。


用户评论
昵称 
内容  *
验证码   
   
Copyright © 2010 zdbase.com All Rights Reserved. 苏ICP备15039389号 可人软件设计