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的有效负载进行,并具有以下值:
- 内容类型=文本/x gwt-rpc . exe字符集可以是任何值。
- 方法 = 发布。
如果内容类型为“文本/ 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应用防火墙规则采用
操作URL:
可以在同一个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. stringInteger|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
处理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选项捕获冲突行为,因为没有单个字段具有同时包含SQLSplChar和SQLKeyword的值。
提示:
- 无需特殊的Web应用防火墙配置即可启用GWT支持。
- 内容类型必须是文本/x-gwt-rpc。
- 学习和部署应用于GWT负载的所有相关Web应用防火墙安全检查的放宽规则与其他受支持的内容类型相同。
- 只有post请求才被视为对GWT有效。如果内容类型为文本/x-gwt-rpc,则阻止所有其他请求方法。
- GWT请求受配置文件配置的post正文限制的约束。
- 安全检查的无会话设置不适用,将被忽略。
- GWT日志消息支持cef日志格式。