![UrlScan 和请求过滤长 URL](https://linux22.com/image/697229/UrlScan%20%E5%92%8C%E8%AF%B7%E6%B1%82%E8%BF%87%E6%BB%A4%E9%95%BF%20URL.png)
我们的Windows/IIS 7.5环境配置为网址扫描和IIS 请求过滤。我们一直面临一个与长 URL 相关的问题。
/MyWeb/TestFW/prweb/Servelt1/ZsvSk3vV8PtgJEa4_x3fiQ[[*/!MyWebApp/webwb/desktop_domainsuffix_1819019784.js!yui_13833664524!desktopwrapper_12997951049!automationscripts_1864420987!ui_jquery_1796787788!desktopwrapper_12997951049!automationscripts_1864420987!ui_jquery_1796787788!
注意:我修改了 URL,但这就是结构,如果我将其放入记事本中,它大约有 880 个字节。
UlrScan.ini
文件具有“请求限制”部分的所有默认配置:
MaxAllowedContentLength=30000000
MaxUrl=260
MaxQueryString=2048
IIS 的请求过滤也已启用,并且具有默认值:
<security>
<requestFiltering>
<requestLimits
maxAllowedContentLength="30000000"
maxUrl="4096"
maxQueryString="2048"
/>
</requestFiltering>
</security>
我进行了测试,我在帖子顶部提供的 URL 失败,出现 403 错误。该 URL 为 880 字节,因此,如果请求过滤优先,它应该不会失败,所以我假设网址扫描执行时不考虑 IIS 的请求限制。
我曾多次要求我的 IIS 管理员提供 IIS 日志,但无论在哪个共享的日志中,我只看到 403。没有其他 Microsoft 支持文章中提到的 404 或 404.14 错误。
那么我的观察正确吗? 对于这种设置,哪种配置优先? 是 UrlScan 还是 IIS 的请求过滤?
我很想知道是否有一个选项可以让请求过滤优先于网址扫描设置,因为请求过滤在应用程序级别之前是可定制的,而UrlScan.ini
仅在站点级别之前是可定制的。
此外,根据 IIS 文档,网址扫描功能正在被纳入 IIS 的请求过滤中,那么为什么最大 URL 的默认值会有如此大的差异呢?urlscan.ini
IIS 请求过滤中的 260 字节和 4096 字节。
答案1
UrlScan 在请求到达 IIS 请求过滤模块之前将其停止。理想的和推荐的解决方案是在 IIS 7 及更高版本上停用 UrlScan 并单独使用 IIS 请求过滤模块,IIS 7.5 中的这个模块具有 urlscan 模块的所有功能,所以没有技术原因不使用。但由于我们的管理员对此感到不舒服,我们遵循了下面的方法。将 urlscan 模块中的 maxUrl 增加到 4096,以允许长请求。请求过滤模块可以在默认的网站级别或服务器级别配置,这是全局的,也可以在单个应用程序级别配置。因此,默认的网站级别 urlScan 保留为 460 个字符,这适用于所有应用程序,而在我的应用程序中,请求过滤的 maxUrl 设置为 4096。这样,所有其他 50 个应用程序都具有几年前默认设置的限制,而我的应用程序有更长的长度来处理长请求。
谢谢。