Citrix ADC

Web应用防火墙支持谷歌Web工具包

注意:该特性在Citrix ADC release 10.5.e中可用。

采用谷歌Web Toolkit (GWT)远程过程调用(RPC)机制的Web服务器可以由Citrix Web App Firewall保护,而不需要任何特定的配置来启用GWT支持。

什么是GWT

GWT被那些不熟悉XMLHttpRequest和JavaScript的人用来构建和优化复杂的高性能web应用程序。这个开源、免费的开发工具包广泛用于开发小型和大型应用程序,并且经常用于显示基于浏览器的数据,如航班、酒店等的搜索结果。GWT提供了一组核心Java api和小部件,用于编写可在大多数浏览器和移动设备上运行的优化JavaScript脚本。GWT RPC框架使得web应用程序的客户机和服务器组件可以很容易地通过HTTP交换Java对象。GWT RPC服务与基于SOAP或REST的web服务不同。它们只是用于在服务器和客户机上的GWT应用程序之间传输数据的轻量级方法。GWT处理Java对象的序列化,交换方法调用中的参数和返回值。

有关使用GWT的流行网站,请参见

https://www.quora.com/What-web-applications-use-Google-Web-Toolkit-%28GWT%29

GWT请求如何工作

GWT RPC请求是管道分隔的,并且具有可变数量的参数。它作为HTTP POST的有效负载携带,具有以下值:

  1. Content-type = text/x-gwt-rpc。字符集可以是任何值。
  2. 方法= POST。

如果内容类型为“text/x-gwt-rpc”,GET和POST HTTP请求都被认为是有效的GWT请求。现在支持将查询字符串作为GWT请求的一部分。将App Firewall配置文件的“InspectQueryContentTypes”参数配置为“OTHER”,以检查内容类型“text/x-gwt-rpc”的请求查询部分。

下面的示例显示了GWT请求的有效负载:

5 | 0 | | 8 http://localhost: 8080 /测试/ | 16878339 f02b83818d264ae430c20468 | com.test.client.TestService | testMethod |以| . lang。整数| myInput1 | . lang。整数/ 3438268394 | 1 | 2 | 3 | 4 | 2 | 5 | 6 | 7 | 8 | 1 | < !——NeedCopy >

该请求可分为三个部分:

一)标题:8 | 5 | 0 |

前3位数字5 | 0 | 8 |在上面的请求中,分别表示“版本,subversion和表的大小”。这些都是正整数。

b)字符串表:

http://localhost: 8080 /测试/ | 16878339 f02b83818d264ae430c20468 | com.test.client.TestService | testMethod |以| . lang。整数| myInput1 | java.lang.Integer / 3438268394 |

上述以管道分隔的字符串表的成员包含用户提供的输入。这些输入将被用于Web应用防火墙检查,并被识别为如下:

  • 1:http://localhost:8080/test/

    这是请求URL。

  • 2:16878339 f02b83818d264ae430c20468

    唯一十六进制标识符。如果该字符串包含非十六进制字符,则该请求被认为是畸形的。

  • 3日:com.test.client.TestService

    服务类别名称

  • 4:testMethod

    服务方法名称

  • 5日起:以| java.lang.Integer | myInput1 | java.lang.Integer / 3438268394

    数据类型和数据。非基元数据类型指定为

    <容器>。< sub-cntnr > . name / <整数> <标识符>

c)有效载荷:1 | 2 | 3 | 4 | 2 | 5 | 6 | 7 8 | 1 | |

有效负载由对字符串表中元素的引用组成。这些整数值不能大于字符串表中的元素数。

Web应用程序防火墙保护GWT应用程序

Web应用程序防火墙理解并解释GWT RPC请求,检查负载是否违反安全检查,并采取指定的操作。

Web应用程序防火墙对GWT请求的头和cookie检查类似于对其他请求格式的检查。在适当的URL解码和字符集转换之后,将检查字符串表中的所有参数。GWT请求体不包含字段名,只包含字段值。输入值可以通过使用Web应用程序防火墙字段格式检查来根据指定的格式进行验证,这也可以用于控制输入的长度。的跨站点脚本编制而且SQL注入Web应用防火墙可以很容易地检测和阻止输入中的攻击。

学习和放松规则: GWT请求支持学习和部署松弛规则。Web应用防火墙规则以 映射的形式存在。GWT请求格式没有字段名称,因此需要特殊处理。Web应用防火墙在学习到的规则中插入虚拟字段名,这些规则可以作为放松规则部署。-isRegex标志的工作原理与非gwt规则相同。

  • 行动网址:

    响应RPC的多个服务可以在同一个web服务器上配置。HTTP请求具有web服务器的URL,而不是处理RPC的实际服务的URL。因此,松弛不是基于HTTP请求URL应用的,因为这将松弛目标字段URL上的所有服务。对于GWT请求,Web应用防火墙使用在GWT有效负载中找到的实际服务的URL,在字符串表的第四个字段中。

  • 字段名:

    由于GWT请求体只包含字段值,所以Web App Firewall在推荐学习到的规则时插入虚拟字段名,如1、2等。

    GWT学习规则的示例

    POST /abcd/def/gh HTTP/1.1 Content-type: text/x-gwt-rpc Host: 10.217.222.75 Content-length: 157 5|0|8|http://localhost:8080/acdtest/|16878339F02Baf83818D264AE430C20468| com.test.client.TestService|testMethod|java.lang. string %3b|java.lang. string整数|onblur|学习数据如下:> sh learningdata pr1 crossSiteScripting Profile: pr1 SecurityCheck: crossSiteScripting 1) Url: http://localhost:8080/acdtest/ >> From GWT Payload。字段:10 Hits: 1 Done 

    GWT松弛规则的示例

    绑定appfw profile pr1 -crossSiteScripting 1 abcd -isregex NOTREGEX

日志消息:当Web应用防火墙在GWT请求中检测到安全检查违规时,会生成日志。由格式错误的GWT请求生成的日志消息包含字符串“GWT”,以便于识别。

格式错误的GWT请求的日志消息示例

12月5日21:48:02 10.217.31.247 12/05/2014:21:48:02 GMT ns 0- pppe -0: APPFW消息696 0:“GWT RPC请求与畸形有效载荷。< >阻塞”

处理GWT和非GWT请求的区别

相同的有效负载可以针对不同的内容类型触发不同的Web应用程序防火墙安全检查违规。考虑下面的例子:

5 | 0 | | 8 http://localhost: 8080 / acdtest / | 16878339 f02baf83818d264ae430c20468 | com.test.client.TestService | testMethod |以% 3 b | java.lang.Integer |选择|

内容类型:应用程序/ x-www-form-urlencoded

如果将SQL注入类型配置为使用SQLSplCharANDKeyword、SQLSplCharORKeyword、sql关键字或SQLSplChar四种可用选项中的任何一种,则使用此内容类型发送的请求将导致SQL违规。Web应用防火墙在处理上述负载时,将' & '视为字段分隔符,' = '视为名称-值分隔符。由于这些字符都没有出现在帖子正文的任何地方,所以整个内容被视为单个字段名。这个请求中的字段名包含一个SQL特殊字符(;)和一个SQL关键字(select)。因此,所有四个SQL注入类型选项都会被捕获。

内容类型:文本/ x-gwt-rpc

只有当SQL注入类型设置为SQLSplCharORKeyword、SQLKeyword或SQLSplChar时,以该内容类型发送的请求才会触发SQL冲突。如果SQL注入类型设置为SQLSplCharANDKeyword(这是默认选项),则不会触发任何违反。Web应用防火墙考虑的是竖条|作为GWT请求中上述有效负载的字段分隔符。因此,post正文被划分为各种表单字段值,并添加表单字段名称(与前面描述的约定一致)。由于这种分割,SQL特殊字符和SQL关键字成为单独的表单字段的一部分。

表格8:. lang。年代tring%3b -\> %3b is the (;) char

表格第十栏:选择

因此,当“SQL注入类型”设置为SQLSplChar,字段8表示SQL违规。为SQLKeyword,字段10表示违规。属性配置SQL Inject类型时,这两个字段中的任何一个都可能表示违反SQLSplCharORKeyword选项,该选项查找是否存在关键字或特殊字符。缺省情况下不会捕获任何违反SQLSplCharANDKeyword选项,因为没有一个字段的值同时包含这两个字段SQLSplChar而且SQLKeyword在一起。

提示

  • 启用GWT支持不需要特殊的Web应用程序防火墙配置。
  • Content-type必须为text/x-gwt-rpc。
  • 学习和部署应用于GWT有效负载的所有相关Web应用防火墙安全检查的放松规则,其工作原理与其他受支持的内容类型相同。
  • 只有POST请求才被认为对GWT有效。如果内容类型为text/x-gwt-rpc,则阻塞所有其他请求方法。
  • GWT请求服从配置文件的POST正文限制。
  • 安全检查的无会话设置不适用,将被忽略。
  • GWT日志消息支持CEF日志格式。
Web应用防火墙支持谷歌Web工具包