Citrix ADC

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

注意:此功能在Citrix ADC版本10.5。E中提供。

遵循谷歌Web Toolkit (GWT)远程过程调用(RPC)机制的Web服务器可以由Citrix Web应用防火墙保护,而无需任何特定配置即可启用GWT支持。

什么是GWT

GWT用于构建和优化复杂的高性能网络应用程序,由没有XMLHttpRequest,和JavaScript专业知识的人员。这个开源的免费开发工具包广泛用于开发小型和大型应用程序,并且经常用于显示基于浏览器的数据,例如航班、酒店等搜索结果。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. 内容类型=文本/x gwt-rpc。字符集可以是任何值。
  2. 方法 = 发布。

如果内容类型为“文本/ x gwt-rpc”,GET和POST HTTP请求都被认为是有效的GWT请求。查询字符串现在支持作为GWT请求的一部分。将应用程序防火墙配置文件的“InspectQueryContentTypes”参数配置为“其他”,以检查内容类型”文本/ 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 |

上述请求5 | 0 | 8 |中的前3位数字分别表示“表格的版本,颠覆和大小”。这些必须是正整数。

b)字符串表:

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

上述管道分隔字符串表的成员包含用户提供的输入。这些输入将针对Web应用防火墙检查进行解析,并按如下方式进行标识:

  • 第一:http://localhost:8080/test/

    这是请求url。

  • 第二:16878339 f02b83818d264ae430c20468

    唯一的十六进制标识符。如果此字符串具有非十六进制字符,请求将被视为格式错误。

  • 第三:com.test.client.TestService

    服务类名称

  • 第四:testMethod

    服务方法名称

  • 第 5 次开始:以| java.lang.Integer | myInput1 | java.lang.Integer / 3438268394

    数据类型和数据.非原始数据类型被指定为

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

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

负载包含对字符串表中元素的引用。这些整数值不能大于字符串表中的元素数。

针对GWT应用程序的Web应用程序防火墙保护

GWT Web应用防火墙理解和解释RPC请求,检查有效负载是否存在安全检查冲突,并采取指定的操作。

针对GWT请求的Web应用防火墙标头和饼干检查类似于针对其他请求格式的检查。在适当的url解码和字符集转换后,将检查字符串表中的所有参数。GWT请求正文不包含字段名称,只包含字段值。通过使用Web应用防火墙字段格式检查,可以根据指定的格式验证输入值,该检查也可用于控制输入的长度。Web应用防火墙可以很容易地检测和阻止输入中的跨站点脚本SQL注入攻击。

学习和放宽规则: gwt请求支持学习和部署放宽规则。Web应用防火墙规则采用 映射的形式。GWT 请求格式没有字段名称,因此需要特殊处理。Web App Firewall 会在已学习的规则中插入虚拟字段名称,这些规则可以作为放宽规则部署。-isregex 标志与非 GWT 规则一样工作。

  • 操作网址:

    可以在同一个Web服务器上配置响应RPC的多个服务。HTTP请求具有Web服务器的URL,而不是处理RPC的实际服务的URL。因此,不会基于HTTP请求url应用放宽,因为这会放宽目标字段的该url上的所有服务。对于GWT 请求,Web App Firewall 使用 GWT 有效负载中找到的实际服务的 URL(字符串表的第四个字段)。

  • 字段名称:

    由于GWT请求正文仅包含字段值,因此Web应用程序防火墙会在推荐学习规则时插入虚拟字段名称,如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形式编码

如果SQL注入类型配置为使用四个可用选项中的任何一个,则使用此内容类型发送的请求会导致SQL冲突:SQLSplCharANDKeyword, SQLSplCharORKeyword, SQLKeyword或SQLSplChar。在处理上述有效负载时,Web应用程序防火墙将“&”视为字段分隔符,“=”视为名称——值分隔符。由于这些字符都不会出现在帖子正文中的任何位置,因此整个内容被视为单个字段名称。此请求中的字段名称包含SQL特殊字符(;)和SQL关键字(选择)。因此,针对所有四个SQL注入类型选项捕获冲突行为。

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

仅当SQL注入类型设置为以下三个选项之一时,使用此内容类型发送的请求才会触发SQL冲突:SQLSplchar关键字,SQL关键字或SQLSplchar。如果SQL注入类型设置为SQLSplCharANDKeyword(默认选项),则不会触发冲突。Web应用防火墙将垂直条|视为GWT请求中上述有效负载的字段分隔符。因此,帖子正文被分为不同的表单字段值,并添加表单字段名称(根据前面描述的约定)。由于这种拆分,sql特殊字符和sql关键字将成为单独表单字段的一部分。

表单域 8:. lang。字符串%3b -\> %3b是(;)字符

表单域 10:选择

因此,当SQL注入类型设置为SQLSplchar时,字段8表示SQL冲突。对于SQLKeyword,字段 10 表示冲突。如果使用SQLSplCharORKeyword选项配置SQL注入类型(查找是否存在关键字或特殊字符),则这两个字段中的任何一个字段都可能指示存在冲突。没有针对默认的SQLSplCharANDKeyword选项捕获冲突行为,因为没有单个字段具有同时包含SQLSplCharSQLKeyword的值。

提示

  • 无需特殊的Web应用防火墙配置即可启用GWT支持。
  • 内容类型必须是文本/x-gwt-rpc。
  • 学习和部署应用于GWT负载的所有相关Web应用防火墙安全检查的放宽规则与其他受支持的内容类型相同。
  • 只有post请求才被视为对GWT有效。如果内容类型为文本/x-gwt-rpc,则阻止所有其他请求方法。
  • GWT请求受配置文件配置的post正文限制的约束。
  • 安全检查的无会话设置不适用,将被忽略。
  • GWT日志消息支持cef日志格式。
Web应用防火墙支持谷歌Web工具包