ADC

开始 URL 检查

Start URL 检查会检查传入请求中的 URL,如果该 URL 不符合指定条件,则阻止连接尝试。为满足条件,URL 必须与“开始 URL”列表中的条目匹配,除非启用了“强制 URL 关闭”参数。如果您启用此参数,则在您的网站上点击链接的用户将连接到该链接的目标。

Start URL 检查的主要目的是防止反复尝试访问网站上的随机 URL、(强制浏览)书签、外部链接,或者通过手动输入 URL 跳过访问网站该部分所需的页面来跳转到页面。强制浏览可用于触发缓冲区溢出,查找用户不打算直接访问的内容,或者找到进入 Web 服务器安全区域的后门。Web App Firewall 通过仅允许访问配置为起始 URL 的 URL 来强制执行网站的给定遍历或逻辑路径。

如果使用向导或 GUI,则在“修改开始 URL 复选”对话框的“常规”选项卡上,您可以启用或禁用“阻止”、“日志”、“统计信息”、“学习操作”和以下参数:

  • 强制执行 URL 关闭。允许用户通过单击您网站上任何其他页面上的超链接来访问您网站上的任何网页。通过单击超链接,用户可以从主页或任何指定的起始页面导航到您网站上的任何页面。 注意:URL 闭合功能允许将任何查询字符串附加到使用 HTTP GET 方法提交的 Web 表单的操作 URL 中,并随之发送。如果您受保护的网站使用表单访问 SQL 数据库,请确保已启用并正确配置 SQL 注入检查。
  • 无会话 URL 关闭。从客户端的角度来看,这种类型的URL关闭功能与标准的会话感知URL Closure完全相同,但是使用嵌入在URL中的令牌而不是cookie来跟踪用户的活动,这消耗的资源要少得多。启用无会话 URL 关闭时,Web App Firewall 会向 URL 关闭中的所有 URL 追加一个“as_url_id”标签。 注意:启用无会话(无会话 URL 关闭)时,还必须启用常规 URL 关闭( 强制关闭 URL),否则无会话 URL 关闭不起作用。
  • 验证反向链接标头。验证请求中的 Referer 标头是否包含来自受保护网站的 Web 表单数据,而不是来自其他网站的 Web 表单数据。此操作可验证您的网站(而不是外部攻击者)是 Web 表单的来源。这样做可以防止跨站请求伪造 (CSRF),而无需表单标记,表单标记比标头检查更占用 CPU。Web App Firewall 可以通过以下四种方式之一处理 HTTP Referer 标头,具体取决于您在下拉列表中选择的选项:
    • 关闭-不验证 Referer 标头。
    • If-Present —如果存在引用标头,则验证引用者标头。如果发现无效的引用标头,请求将生成引用标头冲突。如果不存在引用标头,则请求不会生成引用标头冲突。此选项使 Web App Firewall 能够对包含 Referer 标头的请求执行 Referer 标头验证,但不能阻止来自浏览器未设置 Referer 标头或使用 Web 代理或过滤器移除该标头的用户的请求。
    • 始网址除外-始终验证 Referer 标头。如果没有引用标头,并且请求的 URL 不受 StarTurl 放宽规则的限制,则请求会生成引用标头冲突。如果引用者标头存在但无效,则请求会生成引用者标头冲突。
    • 总是第一个请求除外-始终验证反向链接标头。如果没有 referer 标头,则只允许首先访问的 URL。如果没有有效的引用标头,所有其他网址都会被屏蔽。如果引用者标头存在但无效,则请求会生成引用者标头冲突。

“修改开始 URL 检查”对话框中未配置“从安全检查中免除关闭URL”的“开始 URL”设置,而是在配置文件的“设置”选项卡中进行配置。如果启用,此设置将指示 Web App Firewall 不要对符合 URL 关闭标准的 URL 进行进一步的基于表单的检查(例如跨站脚本和 SQL 注入检查)。

注意

尽管引用者标头检查和“开始 URL 安全检查”共享相同的操作设置,但是可能冲突引用者标头检查而不冲突“开始 URL 检查”。差异在日志中可见,哪些日志引用标头检查冲突与“开始 URL 检查冲突”分开检查冲突。

引用标题设置(OFF、if-Present、AlwaysExceptStartURLs 和 AlwaysExceptFirstRequest)按最少限制性的顺序排列,工作如下:

关闭:

  • 未选中 Referer 标题。

如果存在:

  • 请求没有引用标头-> 允许请求。
  • 请求有引用标头,并且引用网址处于网址关闭状态-> 允许请求。
  • 请求有 referer 标头,且引用网址 处于 URL 关闭状态-> 请求被阻止。

AlwaysExceptStartURLs:

  • 请求没有引用标头,请求网址是起始网址-> 允许请求。
  • 请求没有引用标头并且请求网址不是起始网址->请求被阻止。
  • 请求有引用标头,并且引用网址处于网址关闭状态-> 允许请求。
  • 请求有 referer 标头,且引用网址 处于 URL 关闭状态-> 请求被阻止。

除第一次请求外:

  • 请求没有引用标头,是会话的第一个请求 URL-> 允许请求。
  • 请求没有引用标头,也 不是 会话的第一个请求 URL-> 请求被阻止。
  • 请求有 referer 标头,要么是会话的第一个请求 URL,要么处于 URL 关闭状态-> 允许请求。
  • 请求有 referer 标头,既不是会话的第一个请求 URL,也不是在 URL 关闭中-> 请求被阻止。

如果使用命令行界面,则可以输入以下命令来配置“开始 URL 检查”:

  • set appfw profile <name> -startURLAction [block] [learn] [log] [stats] [none]
  • set appfw profile <name> -startURLClosure ([ON] | [OFF])
  • set appfw profile <name> -sessionlessURLClosure ([ON] | [OFF])
  • set appfw profile <name> -exemptClosureURLsFromSecurityChecks ([ON] | [OFF)
  • set appfw profile <name> -RefererHeaderCheck ([OFF] | [if-present] | [AlwaysExceptStartURLs] | [AlwaysExceptFirstRequest])

要为开始 URL 检查指定放宽,必须使用 GUI。在“修改开始 URL 检查”对话框的“检查”选项卡上,单击“添加”以打开“添加开始 URL 检查放宽”对话框,或选择现有的放宽,然后单击“打开”打开“修改开始 URL 检查放宽”对话框。这两个对话框都提供了用于配置放宽的相同选项。

以下是开始 URL 检查放宽的示例:

  • 允许用户访问 www.example.com 上的主页:

     ^http://www[.]example[.]com$
     <!--NeedCopy-->
    
  • 允许用户访问所有静态 HTML(.htm 和 .html)、服务器解析的 HTML(.htp 和 .shtml)、PHP (.php) 和 Microsoft ASP (.asp) 格式的网页,网址为 www.example.com:

     ^http://www[.]example[.]com/([0-9A-Za-z][0-9A-Za-z_-]\*/)\*
     [0-9A-Za-z][0-9A-Za-z_.-]*[.](asp|htp|php|s?html?)$
     <!--NeedCopy-->
    
  • 允许用户访问包含非 ASCII 字符的路径名或文件名的网页:

     ^http://www[.]example-espaxC3xB1ol[.]com/(([0-9A-Za-z]|x[0-9A-Fa-f][0-9A-Fa-f])([0-9A-Za-z_-]|x[0-9A-Fa-f][0-9A-Fa-f])\*/)\*
     ([0-9A-Za-z]|x[0-9A-Fa-f][0-9A-Fa-f])([0-9A-Za-z_-]|x[0-9A-Fa-f][0-9A-Fa-f])*[.](asp|htp|php|s?html?)$
     <!--NeedCopy-->
    

    注意:在上面的表达式中,每个字符类都使用字符串 x[0-9A-Fa-f][0-9A-Fa-f]进行分组,该字符串匹配所有正确构造的字符编码字符串,但不允许与 UTF-8 字符编码字符串无关联的杂散反斜杠字符。双反斜杠 () 是转义反斜杠,它告诉 Web App Firewall 将其解释为文字反斜杠。如果您只包含一个反斜杠,Web App Firewall 会将以下左方括号 ([) 解释为文字字符,而不是字符类的开头,这会破坏表达式。

  • 允许用户在 www.example.com 上访问所有 GIF (.gif)、JPEG (.jpg 和.jpeg) 和 PNG (.png) 格式的图片:

     ^http://www[.]example[.]com/([0-9A-Za-z][0-9A-Za-z_-]\*/)\*
     [0-9A-Za-z][0-9A-Za-z_.-]*[.](gif|jpe?g|png)$
     <!--NeedCopy-->
    
  • 允许用户访问 CGI (.cgi) 和 PERL (.pl) 脚本,但只能在 CGI-BIN 目录中访问:

     ^http://www[.]example[.]com/CGI-BIN/[0-9A-Za-z][0-9A-Za-z_.-]*[.](cgi|pl)$
     <!--NeedCopy-->
    
  • 允许用户访问 docsarchive 目录中的 Microsoft Office 和其他文档文件:

     ^http://www[.]example[.]com/docsarchive/[0-9A-Za-z][0-9A-Za-z_-.]*[.](doc|xls|pdf|ppt)$
     <!--NeedCopy-->
    

注意

默认情况下,所有 Web App Firewall URL 都被视为正则表达式。

警告:正则表达式很强大。特别是如果您不完全熟悉 PCRE 格式的正则表达式,请仔细检查您编写的所有正则表达式。确保他们准确地定义了要作为例外添加的URL,而不是其他任何内容。粗心使用通配符,尤其是点星号 ( .*) 元字符/通配符组合,可能会产生您不想要的结果,例如阻止访问您本来不打算阻止的 Web 内容,或者允许 Start URL 检查本来可以阻止的攻击。

提示

您可以将 -和- 添加到允许的 URL 命名方案 SQL 关键字列表中。例如,例如 https://FQDN/bread-and-butter

开始 URL 检查