如何使用Apache mod_rewrite从HTTP Query中删除点

时间:2014-08-21 16:08:49

标签: regex apache .htaccess mod-rewrite

目前,我的网站将尝试使用以这种方式构建的URI向后浏览文件夹来查找目录:

http://dummy.domain.com/home/../../section/

我想使用mod_rewrite阻止此操作,但我无法编写正则表达式,该表达式将能够从URI中删除所有../。最好的尝试是:

RewriteRule ^(.*)([\.]{2}[\/]{1})(.*)$ $1$3 [L]

但上述规则只会移除一次../

2 个答案:

答案 0 :(得分:1)

匹配网址格式的正则表达式似乎是错误的。

在根目录中尝试此规则.htaccess:

RewriteRule ^(.*?)(?:\.{2}/)+(.*)$ $1$2 [L,R,NE]

RewriteRule ^((?!home)[^/]+)/?$ /home/area/$1 [L,NC]

\.{2}/模式符合../R标记将确保重定向网址。

答案 1 :(得分:0)

我最终成功阻止了使用Apache mod_security进行目录遍历以及mod_security.conf中的这条规则

  

SecRule REQUEST_URI_RAW" \。{1,2} \ /?" "登录,拒绝,消息:'指南   检测到遍历攻击 -   %{MATCHED_VAR_NAME}:%{MATCHED_VAR}',ID:123"