You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

IIS Rewrite Module过滤规则失效问题排查求助

解决IIS Rewrite Module匹配原始未清理URL的问题

问题根源是IIS默认会先处理并清理路径中的特殊扩展段(比如你遇到的ASP.NET会话路径(A(vulnerability))),导致Rewrite Module默认拿到的是清理后的{REQUEST_URI},而非浏览器发送的原始请求URL,因此你的正则规则无法匹配到目标路径。

以下是具体解决方案:

  • 改用{UNENCODED_URL}变量匹配原始URL
    IIS Rewrite模块提供了{UNENCODED_URL}服务器变量,它保存了浏览器发送的完整原始请求URL(未经过IIS路径清理)。修改你的规则,用这个变量作为匹配输入,而非默认的路径变量。

    示例配置:

    <rule name="Block Vulnerable Session Paths" stopProcessing="true">
      <match url=".*" />
      <conditions>
        <!-- 匹配包含括号包裹路径段的请求 -->
        <add input="{UNENCODED_URL}" pattern=".+/\([^/]+\)/.+" />
      </conditions>
      <action type="CustomResponse" statusCode="404" statusReason="Not Found" statusDescription="Resource not available" />
    </rule>
    
  • 优化正则表达式精准匹配
    如果只需要拦截ASP.NET的会话路径(格式为(A(...))),可以把正则调整得更精准,避免误拦截其他合法带括号的路径:

    .+/\(A\([^)]+\)\)/.+
    

    这个正则只会匹配路径中包含(A(...)结构的段,完全对应你遇到的漏洞链接格式。

  • 验证规则有效性
    利用IIS Rewrite的测试功能:在规则配置界面点击"Test Pattern",输入原始漏洞URL(https://localhost/Account/(A(vulnerability))/Login),检查是否能成功匹配。如果需要更精准的拦截(比如只针对Account下的Login路径),可以把条件中的正则改成:

    /Account/\(A\([^)]+\)\)/Login
    
  • 关于后端代码收到清理URL的说明
    调试时后端拿到清理后的URL是正常的——ASP.NET默认使用IIS清理后的路径,但只要Rewrite规则用{UNENCODED_URL}匹配并返回404,请求根本不会到达后端代码,也就不存在漏洞触发的可能。

内容的提问来源于stack exchange,提问作者Deutsche Regierung

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 10:28:12