IIS请求筛选允许URL

时间:2014-06-04 10:03:16

标签: regex url iis iis-7 requestfiltering

我正在使用IIS7请求过滤(网站级别),并且“允许未列出的文件名扩展名”#39;设置为未检查。在我访问我的Web应用程序后进行此设置时,请说_http:/ machine_name / app1然后失败。在'文件扩展名'下添加正确的文件扩展名后它开始运作但后来我在我的应用程序中浏览其他链接时失败了。我发现我需要在“允许网址”下添加网址'但我确实有大量的URL列表需要添加,例如: ' / app1 / prop1',' / app1 / prop1 / services /',' / app1 / prop2 / repository' .....等等 所以,我看到像/ app1 / *这样的模式,但是'允许URL不允许任何模式匹配。是否有任何方法可以在IIS中的某处添加正则表达式,以便匹配的网址

提前致谢。

3 个答案:

答案 0 :(得分:0)

好的,最后我得到了解决方案。诀窍是没有使用' requestfiltering'但是' URL重写'。它可以选择允许或拒绝基于正则表达式或通配符的URL,并选择'与模式不匹配'。我为URL /文件创建了与我的应用程序模式不匹配的规则,并通过重定向404类型的错误来拒绝这些规则。

答案 1 :(得分:0)

我认为网址类似于' / app1 / prop1',' / app1 / prop1 / services /',' / app1 / prop2 / repository'不能将'Allow unlisted file name extensions'设置为false,因为您不允许无扩展请求。

要允许无扩展请求,请将<add fileExtension="." allowed="true" />添加到您的web.config中,如下所示:

  <system.webServer>
    <security>
      <requestFiltering>
        <fileExtensions allowUnlisted="false">
          <add fileExtension="." allowed="true" />
        </fileExtensions>
      </requestFiltering>
    </security>
  </system.webServer>

如果这有帮助或问题仍然存在,请告诉我。

答案 2 :(得分:0)

@alexander-abakumov是正确的。在allowUnlisted=false时,必须包含提供的xml(<add fileExtension="." allowed="true" />),以允许无扩展名的请求(例如/App//Folder/)。

请求过滤限制

使用URL Rewrite来实现RegEx模式匹配是正确的。以下是请求过滤的限制。

  • 无状态-请求过滤不了解应用程序或会话状态。不管是否建立会话,都会单独处理每个请求。
  • 仅请求标头-请求过滤只能检查请求标头。它无法查看请求正文或响应的任何部分。
  • 基本逻辑-正则表达式和通配符匹配不可用。大多数设置包括建立大小限制,而其他设置则执行简单的字符串匹配。

仍然使用请求过滤

我仍然建议使用请求过滤,因为它在IIS请求管道中运行得如此之早。甚至在URL重写之前。这使您有机会立即丢弃错误的请求。然后,URL重写可以成为请求过滤的第二层。

IISRFBaseline

以上信息基于我的PowerShell模块IISRFBaseline。通过利用Microsoft Logparser扫描网站的内容目录和IIS日志,它可以帮助建立IIS请求筛选基准。

对于fileExtensions设置,有两种建立基准的方法:

  1. IIS日志-通过解析先前成功的请求并确定请求的扩展名。
  2. 内容目录-扫描网站内容目录的文件系统以查看正在使用的文件扩展名。

这两种方法都有一些注意事项,here中有更详细的描述。通过两种技术,提供了降价文件,用后缀IISFS来描述每种方法。

在删除不良请求后,将这两种技术的结果合并在一起,以为此请求过滤设置创建基准。