ADC

开始 URL 检查

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

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

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

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

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

注意

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

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

关闭:

  • 裁判标题未检查。

如果存在:

  • 请求没有引用标题-> 允许请求。
  • 请求具有引用标题,并且引用 URL 处于 URL 关闭-> 允许请求。
  • 请求具有引用标题,并且引用 URL 在 URL 关闭中-> 请求被阻止。

AlwaysExceptStartURLs:

  • 请求没有引用标题,请求 URL 是一个开始 URL-> 允许请求。
  • 请求没有引用标头,请求 URL 不是开始 URL-> 请求被阻止。
  • 请求具有引用标题,并且引用 URL 处于 URL 关闭-> 允许请求。
  • 请求具有引用标题,并且引用 URL 在 URL 关闭中-> 请求被阻止。

永远性别优先请求:

  • 请求没有引用标头,是会话的第一个请求 URL-> 允许请求。
  • 请求没有引用标头,并且 是会话的第一个请求 URL-> 请求被阻止。
  • 请求具有引用标头,是会话的第一个请求 URL,或者是 URL 关闭-> 允许请求。
  • 请求具有引用标头,既不是会话的第一个请求 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-->
    
  • 允许用户访问 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 内容,或允许启动 URL 检查会阻止的攻击。

提示

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

开始 URL 检查