Citrix ADC

表单字段一致性检查

表单字段一致性检查检查网站用户返回的web表单,并验证web表单是否被客户端不适当地修改。此检查仅适用于包含web表单的HTML请求,无论是否包含数据。它不适用于XML请求。

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

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

  • 如果一个字段被发送给用户,检查确保它被用户返回。
  • 检查强制HTML字段的长度和类型。

    注意:

    • 表单字段一致性检查强制HTML对数据类型和长度的限制,但不验证web表单中的数据。您可以使用字段格式检查来设置规则,以验证web表单上特定表单字段中返回的数据。

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

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

如果用户返回的web表单违反了一个或多个表单字段一致性检查,并且您没有配置web应用程序防火墙以允许该web表单违反表单字段一致性检查,则该请求将被阻止。

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

您还可以在“常规”选项卡中配置无会话字段一致性。如果启用了无会话字段一致性,Web应用防火墙只检查Web表单结构,省去了那些依赖于维护会话信息的表单字段一致性检查部分。对于使用多种表单的网站来说,这可以加快表单字段一致性检查的速度,而安全性损失很小。若要在所有web表单上使用无会话字段一致性,请选择“开启”。若要仅对使用HTTP POST方法提交的表单使用它,请选择postOnly

如果使用命令行方式,可以输入如下命令配置“表单字段一致性检查”。

  • 设置appfw概要文件<名称> -fieldConsistencyAction[* *屏蔽* *][* *学习* *][* *记录* *][* *数据* *][* *不* *]

要为表单字段一致性检查指定松弛,必须使用GUI。在“修改表单字段一致性检查”对话框的“检查”页签上,单击“添加”打开“添加表单字段一致性检查放松”对话框,或选择一个已有的放松项,单击“打开”打开“修改表单字段一致性检查放松”对话框。两个对话框都提供了配置放松的相同选项,如中所述GUI方式手动配置

下面是表单字段一致性检查放松的例子:

表单字段名称

  • 选择名称为UserType的表单字段:

    ^ UserType $ < !——NeedCopy >
  • 选择名称以UserType_开头的表单字段,后面跟着一个以字母或数字开头的字符串,由1到21个字母、数字或撇号或连字符符号组成:

    ^ UserType_ [0-9A-Za-z] [0-9A-Za-z”——]{0,20}$ < !——NeedCopy >
  • 选择以Turkish- usertype_开头的表单字段,并且在其他方面与前面的表达式相同,除了它们可以自始至终包含土耳其特殊字符:

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

    注意:

    看到字符编码格式获取有关受支持的特殊字符以及如何正确编码它们的完整描述。

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

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

表单字段操作url

  • 选择以http://www.example.com/search.pl?并且在查询之后包含除新查询之外的任何字符串:

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

    ^ http://www [] example-espa \ xC3 \ xB1ol [] com/ (((0-9A-Za-z) | \ \ x [0-9A-Fa-f] [0-9A-Fa-f]) x ([0-9A-Za-z_ -] | \ \ [0-9A-Fa-f] [0-9A-Fa-f]) * /) * (x [0-9A-Za-z] | \ \ [0-9A-Fa-f] [0-9A-Fa-f]) x ([0-9A-Za-z_ -] | \ \ [0-9A-Fa-f] [0-9A-Fa-f]) *(。)(asp php | | htp |年代html ?) $ < !——NeedCopy >
  • 选择所有包含字符串/search.cgi?:

    ^(^ ? < >) * /搜索cgi \ [,] ? [^ ?< >] * $ < !——NeedCopy >

警告:

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

表单字段一致性检查