IIS 10请求过滤配置无效,如何防范路径遍历攻击?
IIS 10路径遍历防护配置无效的问题排查与修正
请求过滤配置的核心问题
直接添加“..”作为拒绝字符串/序列无法生效,是因为IIS会预先对URL进行规范化处理:比如将../../css/test.txt转换为对应物理路径,或是把编码后的%2e%2e解码,此时原始的“..”序列已被处理,简单字符串匹配无法命中。
修正步骤:
- 切换到请求过滤的**“URL”选项卡**,禁用“允许双重转义”,阻止编码后的
%2e%2e这类绕过方式。 - 在“规则”选项卡创建正则表达式规则,用匹配模式
(\.\./)+来捕获连续的上级目录跳转序列。 - 确认
applicationHost.config中已注册请求过滤模块:<add name="RequestFilteringModule" />
URL重写规则的错误点
你写的<em>/../</em>.*是HTML标签,不属于正则表达式语法,这是规则无效的直接原因。
正确配置:
- 创建“阻止请求”规则,在“匹配URL”区域选择“使用正则表达式”,输入匹配模式:
^.*(\.\./)+.*$ - 添加条件检查原始请求路径:条件字段选
{REQUEST_URI},匹配模式同样用^.*(\.\./)+.*$,避免IIS规范化后导致匹配失效。 - 确认规则动作设置为**“中止请求”**,而非仅记录日志。
- 检查IIS模块列表中
RewriteModule已安装并启用。
测试与验证注意事项
- 不要直接用浏览器测试,因为浏览器会自动规范化URL,建议用curl或Postman发送原始请求,比如:
curl http://yourdomain/../../css/test.txt - 检查站点
web.config是否继承了服务器级applicationHost.config的配置,避免局部配置被覆盖。
内容的提问来源于stack exchange,提问作者Anoosh Saghiri
相关产品推荐
相关产品推荐

