最近发现大部分web server产品都接受包含连续多个“/”http请求。例如:

这是一个正常URL

http://games.yahoo.com/game/jacks-flash.html

这个是一个插入了多个slashURL:

http://games.yahoo.com//game///jacks-flash.html

 

我分别在game之前多插入一个/,在game之后多插入了两个/,但这个请求依然可以被yahoo正确解读并返回结果。
 

有人可能会问:这点小事也无伤大雅,会有什么问题吗?

其实我想谈的不只是这个http请求和交互本身,而是延伸出来的安全漏洞的问题。大家知道,安全设备可以对第七层协议做过滤。比如我们设置一个安全策略是过滤所有以“/backdoor/”开头的URL的访问,那么如果在规则中仅仅设置一个“/”是不够的!如果攻击者发送的URL包含了多个“/”,那么过滤引擎可能会放过这类访问,因为“//backdoor/*”不是以“/backdoor/”开头的。

为了防护此类漏洞,普通的字符串匹配规则就完全不够了。需要建立以正则表达式为形式的规则。例如正则表达式:

^\/+backdoor\/

使用正则表达式是有“代价”的。它对计算能力提出了更高的要求,也就是说,使用了正则表达式为匹配规则的话,安全设备的cpu资源消耗会变得更高。这也是一个系统管理员和安全工程师不得不权衡考量的问题。