本文分步说明如何配置 URLScan 工具以防止 Web 服务器受到攻击和利用。

修改 URLScan.ini 文件

URLScan 的所有配置都是通过 URLScan.ini 文件执行的,此文件位于 %WINDIR%\System32\Inetsrv\URLscan 文件夹中。要配置 URLScan,请在文本编辑器(如记事本)中打开此文件,进行相应的更改,然后保存此文件。

注意:要使更改生效,必须重新启动 Internet 信息服务 (IIS)。一种快速的实现方法是在命令提示符处运行 IISRESET。

URLScan.ini 文件包含以下几节:

•       [Options]:此节描述常规 URLScan 选项。

•       [AllowVerbs] 和 [DenyVerbs]:此节定义 URLScan 允许的谓词(又称作 HTTP 方法)。

•       [DenyHeaders]:此节列出 HTTP 请求中不允许的 HTTP 标头。如果 HTTP 请求中包含此节中列出的 HTTP 标头之一,URLScan 将拒绝该请求。

•       [AllowExtensions] 和 [DenyExtensions]:此节定义 URLScan 允许的文件扩展名。

•       [DenyURLSequences]:此节列出 HTTP 请求中不允许的字符串。URLScan 拒绝那些包含此节中出现的字符串的 HTTP 请求。

本文将更详细地介绍每一节。

[Options] 节

在 [Options] 节中,可以配置许多 URLScan 选项。此节中的每一行都具有以下格式:

OptionName=OptionValue

可用选项及其默认值如下所示:

•UseAllowVerbs=1

默认情况下,此选项设置为 1。如果将此选项设置为 1,则 URLScan 仅允许那些使用 [AllowVerbs] 节中列出的谓词的 HTTP 请求。URLScan 禁止任何不使用这些谓词的请求。如果将此选项设置为 0,则 URLScan 忽略 [AllowVerbs] 节,相反仅禁止那些使用 [DenyVerbs] 节中列出的谓词的请求。

•UseAllowExtensions=0

默认情况下,此选项设置为 0。如果将此选项设置为 0,则 URLScan 禁止对 [DenyExtensions] 节中列出的文件扩展名的请求,但允许对任何其他文件扩展名的请求。如果将此选项设置为 1,则 URLScan 仅允许对带 [AllowExtensions] 节中列出的扩展名的文件的请求,而禁止对任何其他文件的请求。

•NormalizeUrlBeforeScan=1

IIS 收到用 URL 编码的请求。这表示某些字符可能被替换为百分号 (%) 后跟特定的数字。例如,%20 对应于一个空格,因此,对 http://myserver/My%20Dir/My%20File.htm 的请求与对 http://myserver/My Dir/My File.htm 的请求是相同的。标准化就是对 URL 编码请求进行解码的过程。默认情况下,此选项设置为 1。如果将 NormalizeUrlBeforeScan 选项设置为 1,则 URLScan 分析已解码的请求。如果将此选项设置为 0,则 URLScan 分析未解码的请求。将此选项设置为 0 会影响 URLScan 禁止某种攻击的能力。

•VerifyNormalization=1

由于百分号 (%) 本身可以是 URL 编码的,所以攻击者可以向服务器提交一个精心制作的、基本上是双重编码的请求。如果发生这种情况,IIS 可能会接受本应视作无效而拒绝的请求。默认情况下,此选项设置为 1。如果将 VerifyNormalization 选项设置为 1,则 URLScan 将对 URL 执行两次标准化。如果第一次标准化后的 URL 与第二次标准化后的 URL 不同,URLScan 将拒绝该请求。这样就可以防止那些依赖双重编码请求的攻击。

•AllowHighBitCharacters=0

默认情况下,此选项设置为 0。如果将此选项设置为 0,则 URLScan 拒绝任何包含非 ASCII 字符的请求。这样可以防止某些类型的攻击,但同时可能也会禁止对某些合法文件的请求,如带有非英文名的文件。

•AllowDotInPath=0

默认情况下,此选项设置为 0。如果将此选项设置为 0,则 URLScan 拒绝所有包含多个句点 (.) 的请求。这样可以防止通过将安全的文件扩展名放入 URL 的路径信息或查询字符串部分,以达到伪装请求中的危险文件扩展名的企图。例如,如果将此选项设置为 1,则 URLScan 可能允许对 http://servername/BadFile.exe/SafeFile.htm 的请求,因为它认为这是对 HTML 页的请求,但实际上这是一个对可执行 (.exe) 文件的请求,而该文件的名称在 PATH_INFO 区域中显示为 HTML 页的名称。如果将此选项设置为 0,URLScan 可能还会拒绝对包含句点的目录的请求。

•RemoveServerHeader=0

默认情况下,Web 服务器返回一个标头,其中指出了 Web 服务器在所有响应中运行的 Web 服务器软件。这会增加服务器遭受攻击的可能性,因为攻击者可以确定服务器正在运行 IIS,于是便攻击已知的 IIS 问题,而不是试图使用为其他 Web 服务器设计的攻击手段来攻击 IIS 服务器。默认情况下,此选项设置为 0。如果将 RemoveServerHeader 选项设置为 1,可以防止您的服务器发送将其标识为 IIS 服务器的标头。如果将 RemoveServerHeader 设置为 0,则仍发送此标头。

•AlternateServerName=(默认情况下不指定)

如果将 RemoveServerHeader 设置为 0,可以在 AlternateServerName 选项中指定一个字符串以指定将在服务器标头中传回的内容。如果将 RemoveServerHeader 设置为 1,则此选项将被忽略。

•EnableLogging=1

默认情况下,URLScan 在 %WINDIR%\System32\Inetsrv\URLScan 中保留所有被禁止的请求的完整日志。如果不希望保留此日志,可将 EnableLogging 设置为 0。

•PerProcessLogging=0

默认情况下,此选项设置为 0。如果将此选项设置为 1,URLScan 将为承载 URLScan.dll 的每个进程创建一个单独的日志。如果将此选项设置为 0,所有进程将记录到同一个文件中。

•PerDayLogging=1

默认情况下,此选项设置为 1。如果将该值设置为 1,则 URLScan 每天创建一个新的日志文件。每个日志文件的名称都是 Urlscan.MMDDYY.log,其中

MMDDYY 是日志文件的日期。如果将该值设置为 0,则所有日志记录都保存在同一个文件中,与日期无关。

•AllowLateScanning=0

默认情况下,此选项设置为 0。如果将此选项设置为 0,则 URLScan 作为高优先级筛选器运行,这表示它先于服务器上安装的所有其他 Internet 服务器应用程序编程接口 (ISAPI) 筛选器执行。如果将此选项设置为 1,则 URLScan 作为低优先级筛选器运行,以便其他筛选器可以在 URLScan 进行任何分析之前修改 URL。FrontPage Server Extensions (FPSE) 要求将此选项设置为 1。

•RejectResponseUrl=(默认情况下不指定)

此选项指定在 URLScan 禁止请求时运行的文件的虚拟路径。这允许您自定义针对被禁止的请求发送给客户机的响应。必须将 RejectResponseUrl 指定为相应文件的虚拟路径,如 /Path/To/RejectResponseHandler.asp。可以指定 URLScan 通常禁止的文件,如 Active Server Pages (ASP) 页。还可以从该页指定以下服务器变量:

•HTTP_URLSCAN_STATUS_HEADER:此变量指定请求被禁止的原因。

•HTTP_URLSCAN_ORIGINAL_VERB:此变量指定被禁止的请求中的原始谓词(例如 GET、POST、HEAD 或 DEBUG)。

•HTTP_URLSCAN_ORIGINAL_URL:此变量指定被禁止的请求中的原始 URL。

如果将 RejectResponseUrl 设置为特殊值 /~*,则 URLScan 使用“仅日志记录”模式。这允许 IIS 为所有请求提供服务,但它会在 URLScan 日志中为所有通常被禁止的请求添加相应的项。这在需要测试 URLScan.ini 文件时很有用。

如果没有指定 RejectResponseUrl 的值,则 URLScan 使用默认值 /<Rejected-By-UrlScan>。

•UseFastPathReject=0

默认情况下,此选项设置为 0。如果将此选项设置为 1,则 URLScan 忽略 RejectResponseUrl 设置并立即向浏览器返回 404 错误信息。这比处理 RejectResponseUrl 要快,但它允许的日志记录选项没有那么多。如果将此选项设置为 0,则 URLScan 使用 RejectResponseUrl 设置来处理请求。

•[AllowVerbs] 节和 [DenyVerbs]

[AllowVerbs] 节和 [DenyVerbs] 节定义 URLScan 允许的 HTTP 谓词(又称作方法)。常用的 HTTP 谓词包括 GET、POST、HEAD 和 PUT。其他应用程序(如 FPSE 和 Web 分布式创作和版本控制 (WebDAV))使用更多的谓词。

[AllowVerbs] 节和 [DenyVerbs] 节的语法相同。它们由 HTTP 谓词列表组成,每个谓词占一行。

URLScan 根据 [Options] 节中 UseAllowVerbs 选项的值来决定使用哪一节。默认情况下,此选项设置为 1。如果将 UseAllowVerbs 设置为 1,则 URLScan 仅允许那些使用 [AllowVerbs] 节中列出的谓词的请求。不使用任何这些谓词的请求将被拒绝。在这种情况下,[DenyVerbs] 节被忽略。

如果将 UseAllowVerbs 设置为 0,则 URLScan 拒绝那些使用 [DenyVerbs] 节中明确列出的谓词的请求。允许任何使用未在此节中出现的谓词的请求。在这种情况下,URLScan 忽略 [AllowVerbs] 节。

•[DenyHeaders]

当客户机向 Web 服务器请求页面时,它通常会发送一些包含有关此请求的其他信息的 HTTP 标头。常见的 HTTP 标头包括:

•Host:此标头包含 Web 服务器的名称。

•Accept:此标头定义客户机可以处理的文件类型。

•User-Agent:此标头包含请求页面的浏览器的名称。

•Authorization:此标头定义客户机支持的身份验证方法。客户机可能会向服务器发送其他标头以指定其他信息。

在 [DenyHeaders] 节中,您定义 URLScan 将拒绝的 HTTP 标头。如果 URLScan 收到的请求中包含此节中列出的任何标头,它将拒绝该请求。此节由 HTTP 标头列表组成,每个标头占一行。标头名后面必须跟一个冒号 (:)(例如 Header-Name:)。

[AllowExtensions] 节和 [DenyExtensions]

大多数文件都有一个标识其文件类型的文件扩展名。例如,Word 文档的文件名一般以 .doc 结束,HTML 文件名一般以 .htm 或 .html 结束,纯文本文件名一般以 .txt 结束。[AllowExtensions] 节和 [DenyExtensions] 节允许您定义 URLScan 将禁止的扩展名。例如,您可以配置 URLScan 以拒绝对 .exe 文件的请求,防止 Web 用户在您的系统上执行应用程序。

[AllowExtensions] 节和 [DenyExtensions] 节的语法相同。它们由文件扩展名列表组成,每个扩展名占一行。扩展名以句点 (.) 开头(例如 .ext)。

URLScan 根据 [Options] 节中 UseAllowExtensions 的值来决定使用哪一节。默认情况下,此选项设置为 0。如果将 UseAllowExtensions 设置为 0,则 URLScan 仅拒绝对 [DenyExtensions] 节中列出的文件扩展名的请求。允许此节中未列出的任何文件扩展名。[AllowExtensions] 节被忽略。

如果将 UseAllowExtensions 设置为 1,则 URLScan 拒绝对 [AllowExtensions] 节中未明确列出的任何文件扩展名的请求。仅允许对此节中列出的文件扩展名的请求。[DenyExtensions] 节被忽略。

有关如何配置 URLScan 以允许对没有扩展名的文件的请求的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

312376 如何配置 URLScan 以在 IIS 中允许使用空扩展名的请求

[DenyUrlSequences]

可以配置 URLScan 以禁止那些 URL 中包含某些字符序列的请求。例如,可以禁止那些包含两个连续句点 (..) 的请求,利用目录遍历漏洞的攻击中经常采用这种手段。要指定一个想要禁止的字符序列,请将此序列单独放在 [DenyUrlSequences] 节中的一行上。

请注意,添加字符序列可能会对 Microsoft Exchange 的 Outlook Web Access (OWA) 产生负面影响。当您从 OWA 打开一个邮件时,该邮件的主题行包含在服务器所请求的 URL 中。由于 URLScan.ini 文件禁止任何包含百分号 (%) 和连字符 (&) 的请求,因此,当用户尝试打开主题行为“Sales increase by 100%”或“Bob & Sue are coming to town”的邮件时,会收到 404 错误信息。要解决此问题,可以从 [DenyUrlSequences] 节中删除这些序列。请注意,这样做会降低安全性,因为它有可能允许危险的请求到达服务器。

有关其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

325965 URLScan 工具可能会导致 Outlook Web Access 中出现问题

配置 URLScan 用于依赖于 IIS 的应用程序

Exchange、FPSE 和 Microsoft Visual Studio .NET 这类应用程序的正常运行依赖于 IIS。如果没有正确配置 URLScan,这些应用程序可能会停止正常运行。

有关如何配置 URLScan 用于这些应用程序的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

309508 Exchange 环境中的 IIS 锁定和 URLscan 配置

309394 如何协同使用 URLScan 和 FrontPage 2000

318290 如何协同使用 URLScan 和 FrontPage 2002

310588 PRB:安全工具包中止 Visual Studio .NET 中的 ASP.NET 调试

此文章来自官网:https://support.microsoft.com/zh-cn/help/326444/how-to-configure-the-urlscan-tool

URLScan参数说明的更多相关文章

  1. IIS漏洞过滤

    IIS漏洞报告会提示网站HEAD包含Server版本信息导致版本泄漏,看起来不是大问题的漏洞却被分到中危或高危的行列中, 因为攻击者可能使用被披露信息获取特定版本发现的安全漏洞以及利用程序. 下面提供 ...

  2. 《连载 | 物联网框架ServerSuperIO教程》2.服务实例的配置参数说明

    1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍  <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制 一.综述 SuperIO(SIO)定位 ...

  3. JQuery UI dialog 弹窗实例及参数说明

    按钮代码: <a id="suprise" style="margin-left: 0.5em;cursor:pointer;">点我会有惊喜< ...

  4. 服务器.htaccess 详解以及 .htaccess 参数说明(转载)

    htaccess文件(或者”分布式配置文件”)提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录.作为用户,所能使用的命令受到限 ...

  5. Mongodb启动命令mongod参数说明

    Mongodb启动命令mongod参数说明 mongod的主要参数有: 基本配置 ----------------------------------------------------------- ...

  6. Connect to Database Using Custom params链接数据库配置参数说明

    使用RF的关键字Connect to Database Using Custom params链接数据库,对应的参数说明: a)     第一个参数我使用的是cx_Oracle,就写这个 b)     ...

  7. .htaccess详解及.htaccess参数说明【转】

    目录(?)[-] htaccess 详解 htaccess rewrite 规则详细说明 RewriteEngine OnOff RewriteBase URL-path RewriteCond Te ...

  8. 转载《SimpleAdapter的参数说明》

    SimpleAdapter的参数说明 第一个参数 表示访问整个android应用程序接口,基本上所有的组件都需要 第二个参数表示生成一个Map(String ,Object)列表选项 第三个参数表示界 ...

  9. Redis配置文件参数说明

    Redis配置文件参数说明   1. Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程 daemonize no 2. 当Redis以守护进程方式运行时,Redis ...

随机推荐

  1. Sql Server递归查询(转)

    有如下数据表 假如我们要查询ID为003的数据的所有子节点我们可以使用CTE 递归查询完成... if OBJECT_ID('tb','N') is not null drop table tb; c ...

  2. Jenkins发布PHP代码

    实验环境 10.0.0.12 Jenkins服务器 10.0.0.13 远程服务器 一个远程的公开的git仓库(php代码在这个仓库里) 一.检查插件是否安装并安装插件 在通过Jenkins发布php ...

  3. Druid 架构

    本篇译自 Druid 项目白皮书部分内容( https://github.com/apache/incubator-druid/tree/master/publications/whitepaper/ ...

  4. WeGame导致WSL无法监听端口问题

    Windows 10 系统自带Linux子系统(WSL),可以方便的使用WSL运行Linux程序和脚本.笔者在WSL上运行Redis时突然发现无法监听6379端口,尝试重新安装WSL无果. 后来重新安 ...

  5. python3下安装aiohttp遇到过的那些坑

    python3下安装aiohttp遇到过的那些坑 最近需要用到aiohttp这个库,在安装过程中遇到很多坑.google.baidu后,依然没有找到合适的解决方案. 后来通过去python官方的PyP ...

  6. centos 7 的安全检查和ip封锁设置

    查看最近登录失败的验证记录 tail -f grep "authentication failure;" /var/log/secure 发现有个ip频繁尝试登录, /sbin/i ...

  7. poj 1068(模拟题)

    Parencodings Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 23545   Accepted: 13802 De ...

  8. [BZOJ5248][九省联考2018]一双木棋(连通性DP,对抗搜索)

    5248: [2018多省省队联测]一双木棋 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 43  Solved: 34[Submit][Status ...

  9. [TCO2013]Block3Checkers

    题意:一个网格上有一些障碍和$3$个在网格边界上的棋子,你要添加一些障碍使得没有两个棋子四连通,问最少添加多少个障碍 官方题解——一张图教你做人... 三个棋子将网格边界分成三段,添加障碍后网格中一定 ...

  10. 【推导】【数学期望】Gym - 101237D - Short Enough Task

    按照回文子串的奇偶分类讨论,分别计算其对答案的贡献,然后奇偶分别进行求和. 推导出来,化简一下……发现奇数也好,偶数也好,都可以拆成一个等比数列求和,以及一个可以错位相减的数列求和. 然后用高中数学知 ...