ADC

表单字段一致性检查

表单字段一致性检查将检查网站用户返回的 Web 表单,并验证客户端是否未对 Web 表单进行不适当修改。此检查仅适用于包含 Web 表单的 HTML 请求,包含或不包含数据。它不适用于 XML 请求。

表单字段一致性检查可防止客户在填写和提交表单时对网站上的 Web 表单的结构进行未经授权的更改。它还确保用户提交的数据符合 HTML 对长度和类型的限制,并且隐藏字段中的数据不会被修改。这样可以防止攻击者篡改 Web 表单并使用修改后的表单来获得对网站的未经授权访问、重定向使用不安全脚本的联系表单的输出,从而发送未经请求的批量电子邮件,或利用 Web 服务器软件中的漏洞获得对 Web 的控制服务器或底层操作系统。Web 表单在许多网站上都是一个薄弱环节,吸引了各种攻击。

表单字段一致性检查验证以下所有内容:

  • 如果将字段发送给用户,则检查将确保该字段由用户返回。
  • 该检查强制执行 HTML 字段的长度和类型。

    注意

    • 表单字段一致性检查强制执行对数据类型和长度的 HTML 限制,但不会以其他方式验证 Web 窗体中的数据。您可以使用“字段格式”检查设置用于验证 Web 表单上特定表单字段中返回的数据的规则。

    • 表单字段一致性保护会在发送给客户端的响应表单中插入隐藏字段 “as_fid”。当客户提交表单时,ADC 将删除相同的隐藏字段。如果有任何客户端 JavaScript 在表单字段上执行校验和计算并在后端验证相同的校验和可能会导致应用程序中断。在这种情况下,建议从客户端 javascript 校验和计算中放松应用程序防火墙表单字段一致性隐藏字段 “as_fid”。

  • 如果 Web 服务器未向用户发送字段,则检查不允许用户添加该字段并返回其中的数据。
  • 如果字段是只读字段或隐藏字段,则检查将验证数据是否未更改。
  • 如果字段是列表框或单选按钮字段,则检查将验证响应中的数据是否与该字段中的某个值相对应。

如果用户返回的 Web 表单冲突了一个或多个表单字段一致性检查,并且您尚未将 Web App Firewall 配置为允许该 Web 表单冲突表单字段一致性检查,请求将被阻止。

如果您使用向导或 GUI,则在“修改表单字段一致性”对话框中的“常规”选项卡上,您可以启用或禁用“阻止”、“日志”、“学习”和“统计”操作。

您还可以在“常规”选项卡中配置无会话字段一致性。如果启用了无会话字段一致性,Web App Firewall 将仅检查 Web 表单结构,并取消表单字段一致性检查中依赖于维护会话信息的部分。对于使用多种表单的网站,这可以加快表单域一致性检查的速度,而不会造成安全若要在所有 Web 表单上使用无会话字段一致性,请选择“开”。若要仅对使用 HTTP POST 方法提交的表单使用它,请选择“postOnly”

如果您使用命令行界面,则可以输入以下命令来配置表单字段一致性检查:

  • set appfw profile <name> -fieldConsistencyAction [**block**] [**learn**] [**log**] [**stats**] [**none**]

若要为表单字段一致性检查指定放宽,必须使用 GUI。在“修改表单字段一致性复选”对话框的“检查”选项卡上,单击“添加”以打开“添加表单字段一致性检查放宽”对话框,或选择现有的放宽,然后单击“打开”打开“修改表单字段一致性检查放宽”对话框。任何一个对话框都提供了相同的配置放宽选项,如 使用 GUI 手动配置中所述。

以下是表单字段一致性检查放宽的示例:

表单字段名称

  • 选择名称为 UserType 的表单域:

     ^UserType$
     <!--NeedCopy-->
    
  • 选择以 UserType_ 开头的表单字段,后跟一个字母或数字开头的字符串,由一到二十一个字母、数字或撇号或连字符组成:

     ^UserType_[0-9A-Za-z][0-9A-Za-z'-]{0,20}$
     <!--NeedCopy-->
    
  • 选择以 Turkish-UserType_ 开头的名称的表单字段,除了它们可以包含土耳其语特殊字符之外,它们与之前的表达式相同:

     ^T\xC3\xBCrk\xC3\xA7e-UserType_([0-9A-Za-z]|\x[0-9A-Fa-f][0-9A-Fa-f])+$
     <!--NeedCopy-->
    

    注意 : 有关支持的特殊字符以及如何正确 编码它们的完整说明,请参阅 PCRE 字符编码格 式。

  • 选择以字母或数字开头的表单字段名称,仅由字母和/或数字组合组成,并且包含字符串中任意位置的字符串 Num:

     ^[0-9A-Za-z]\*Num[0-9A-Za-z]\*$
     <!--NeedCopy-->
    

表单字段操作 URL

  • 选择以查询后包含任何字符串开头的 URL,但新查询除外:http://www.example.com/search.pl?

     ^http://www[.]example[.]com/search[.]pl?[^?]*$
     <!--NeedCopy-->
    
  • 选择以路径http://www.example-español.com 和文件名开头的 URL,这些路径和文件名由路径中的大写字母和小写字母、数字、非 ASCII 特殊字符和所选符号组成。n 字符和任何其他特殊字符表示为编码的 UTF-8 字符串,其中包含分配给 UTF-8 字符集中每个特殊字符的十六进制代码:

     ^http://www[.]example-espa\xC3\xB1ol[.]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-->
    
  • 选择包含字符串/搜索 .cgi 的所有 URL? :

     ^[^?<>]\*/search[.]cgi?[^?<>]\*$
     <!--NeedCopy-->
    

小心:

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

表单字段一致性检查

在本文中