我正在使用IIS7请求过滤(网站级别),并且“允许未列出的文件名扩展名”#39;设置为未检查。在我访问我的Web应用程序后进行此设置时,请说_http:/ machine_name / app1然后失败。在'文件扩展名'下添加正确的文件扩展名后它开始运作但后来我在我的应用程序中浏览其他链接时失败了。我发现我需要在“允许网址”下添加网址'但我确实有大量的URL列表需要添加,例如: ' / app1 / prop1',' / app1 / prop1 / services /',' / app1 / prop2 / repository' .....等等 所以,我看到像/ app1 / *这样的模式,但是'允许URL不允许任何模式匹配。是否有任何方法可以在IIS中的某处添加正则表达式,以便匹配的网址。
提前致谢。
答案 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重写可以成为请求过滤的第二层。
以上信息基于我的PowerShell模块IISRFBaseline。通过利用Microsoft Logparser扫描网站的内容目录和IIS日志,它可以帮助建立IIS请求筛选基准。
对于fileExtensions
设置,有两种建立基准的方法:
这两种方法都有一些注意事项,here中有更详细的描述。通过两种技术,提供了降价文件,用后缀IIS
或FS
来描述每种方法。
在删除不良请求后,将这两种技术的结果合并在一起,以为此请求过滤设置创建基准。