Citrix ADC

针对 HTML 和 JSON 有效负载的基于 SQL 语法的保护

Citrix Web App Firewall 使用模式匹配方法来检测 HTTPJSON 有效负载中的 SQL 注入攻击。该方法使用一组预先定义的关键词和(或)特殊字符来检测攻击并将其标记为违规行为。尽管这种方法是有效的,但它可能会导致许多误报,从而添加一个或多个放宽规则。特别是当 HTTP 或 JSON 请求中使用 “选择” 和 “发件人” 等常用词语时。 我们可以通过实施 SQL 语法保护检查 HTMLJSON 有效负载来减少误报。

在现有的模式匹配方法中,如果 HTTP 请求中存在预定义的关键字和/或特殊字符,则会识别 SQL 注入攻击。在这种情况下,语句不一定是有效的 SQL 语句。但是,在基于语法的方法中,只有在 SQL 语句中存在关键字或特殊字符或是 SQL 语句的一部分时,才会检测到 SQL 注入攻击,从而减少误报情况。

基于 SQL 语法的保护使用方案

考虑一下 HTTP 请求中出现的 “选择我的门票然后让我们在工会站见面” 的陈述。尽管该语句不是有效的 SQL 语句,但现有的模式匹配方法将请求检测为 SQL 注入攻击,因为该语句使用 “选择”、“和” 和 “联合” 等关键字。但是,在 SQL 语法方法的情况下,该语句不会被检测为违规攻击,因为关键字不存在于有效 SQL 语句中,或者不是有效 SQL 语句的一部分。

还可以配置基于语法的方法来检测 JSON 有效负载中的 SQL 注入攻击。要添加放宽规则,您可以重复使用现有的放宽规则。细粒度放宽规则也适用于 SQL 语法,对于带有 “valueType” “关键字” 的规则。在 JSON SQL 语法中,可以重复使用现有的基于 URL 的方法。

使用 CLI 配置基于 SQL 语法的保护

要实现基于 SQL 语法的检测,必须在 Web App Firewall 配置文件中配置 “SQLinejectionGram法” 参数。默认情况下,该参数处于禁用状态。除了学习外,所有现有的 SQL 注入操作都受支持升级后创建的任何新配置文件都支持 SQL 注入语法,并且它仍将默认类型作为 “特殊字符或关键字”,且必须明确启用。

在命令提示符下,键入:

add appfw profile <profile-name> –SQLInjectionAction <action-name> -SQLInjectionGrammar ON/OFF
<!--NeedCopy-->

示例:

add appfw profile profile1 –SQLInjectionAction Block –SQLInjectionGrammar ON

使用 CLI 配置 SQL 模式匹配保护和基于语法的保护

如果您同时启用了基于语法和模式匹配方法,则设备首先执行基于语法的检测,如果存在 SQL 注入检测并将操作类型设置为阻止,则会阻止请求(不使用模式匹配验证检测)。

在命令提示符下,键入:

add appfw profile <profile-name> –SQLInjectionAction <action-name> -SQLInjectionGrammar ON –SQLInjectionType <Any action other than ‘None’: SQLSplCharANDKeyword/ SQLSplCharORKeyword/ SQLSplChar/ SQLKeyword>
<!--NeedCopy-->

示例:

add appfw profile p1 –SQLInjectionAction block – SQLInjectionGrammar ON –SQLInjectionType SQLSplChar

使用 CLI 仅使用基于语法的保护来配置 SQL 注入检查

在命令提示符下,键入:

add appfw profile <profile-name> –SQLInjectionAction <action-name> -SQLInjectionGrammar ON –SQLInjectionType None
<!--NeedCopy-->

示例:

add appfw profile p1 –SQLInjectionAction block – SQLInjectionGrammar ON –SQLInjectionType None

使用 CLI 绑定放宽规则以实现基于 SQL 语法的保护

如果您的应用程序要求您绕过有效负载中的特定 “元素” 或 “属性” 的 SQL 注入检查,则必须配置放宽规则。

注意 : 只有在设备使用 SQL 语法进行检测时,才会评估具有 ValueType “关键字” 的放宽规则。

SQL 命令注入检查放宽规则具有以下语法。在命令提示符下,键入:

bind appfw profile <name> -SQLInjection <String> [isRegex(REGEX| NOTREGE)] <formActionURL> [-location <location>] [-valueType (Keywor|SpecialString|Wildchar) [<valueExpression>][-isValueRegex (REGEX | NOTREGEX) ]]
<!--NeedCopy-->

示例:

bind appfw profile p1 -sqlinjection abc http://10.10.10.10/ bind appfw profile p1 –sqlinjection 'abc[0-9]+' http://10.10.10.10/ -isregex regEX bind appfw profile p1 –sqlinjection 'name' http://10.10.10.10/ -valueType Keyword 'selec[a-z]+' -isvalueRegex regEX

使用 CLI 为 JSON 有效负载配置基于 SQL 语法的保护

要对 JSON 有效负载实施基于 SQL 语法的检测,必须在 Web App Firewall 配置文件中配置 “jsonSQLinejectionGram法” 参数。默认情况下,该参数处于禁用状态。除了学习外,所有现有的 SQL 注入操作都受支持升级后创建的任何新配置文件都支持 SQL 注入语法,并且它仍将默认类型作为 “特殊字符或关键字”,您必须明确启用它。

在命令提示符下,键入:

add appfw profile <profile-name> -type JSON –JSONSQLInjectionAction <action-name> -JSONSQLInjectionGrammar ON/OFF
<!--NeedCopy-->

示例:

add appfw profile profile1 –type JSON –JSONSQLInjectionAction Block –JSONSQLInjectionGrammar ON

使用 CLI 配置 SQL 模式匹配保护和基于语法的保护

如果您同时启用了基于语法和模式匹配检查,则设备首先执行基于语法的检测,如果存在将操作类型设置为阻止的 SQL 注入检测,则会阻止请求(不使用模式匹配验证检测)。

注意 : 仅当设备使用 SQL 语法执行检测时,才会评估具有 valueType “关键字” 的放宽规则。

在命令提示符下,键入:

add appfw profile <profile-name> -type JSON –JSONSQLInjectionAction <action-name> -JSONSQLInjectionGrammar ON –JSONSQLInjectionType <Any action other than ‘None’: SQLSplCharANDKeyword/ SQLSplCharORKeyword/ SQLSplChar/ SQLKeyword>
<!--NeedCopy-->

示例:

add appfw profile p1 –type JSON –JSONSQLInjectionAction block – JSONSQLInjectionGrammar ON –JSONSQLInjectionType SQLSplChar

使用 CLI 为 JSON 有效负载配置基于 SQL 语法的保护

在命令提示符下,键入:

add appfw profile <profile-name> -type JSON –JSONSQLInjectionAction <action-name> -JSONSQLInjectionGrammar ON –JSONSQLInjectionType None`\
<!--NeedCopy-->

示例:

add appfw profile p1 –type JSON –JSONSQLInjectionAction block – JSONSQLInjectionGrammar ON –JSONSQLInjectionType None

使用 CLI 绑定基于 URL 的放宽规则以实现基于 JSON SQL 语法的保护

如果您的应用程序要求您绕过有效负载中的特定 “元素” 或 “属性” 的 JSON 命令注入检查,则可以配置放宽规则。 JSON命令注入检查放宽规则具有以下语法。在命令提示符下,键入:

bind appfw profile <profile name> –JSONCMDURL <expression> -comment <string> -isAutoDeployed ( AUTODEPLOYED | NOTAUTODEPLOYED ) -state ( ENABLED | DISABLED )
<!--NeedCopy-->

示例:

bind appfw profile p1 -sqlinjection abc http://10.10.10.10/ bind appfw profile p1 –sqlinjection 'abc[0-9]+' http:// 10.10.10.10/ -isregex regEX bind appfw profile p1 –sqlinjection 'name' http://10.10.10.10/ -valueType Keyword 'selec[a-z]+' -isvalueRegex regEX

使用 GUI 配置基于 SQL 语法的保护

完成 GUI 过程以配置基于语法的 HTML SQL 注入检测。

  1. 在导航窗格上,导航到 “ 安全” > “配置文件”。
  2. 配置文件页面中,单击添加
  3. Citrix Web App Firewall 配置文件 页面中,单击 高级设置 下的 安全检查
  4. 在 “ 安全检查 ” 部分中,转到 HTML SQL 注入 设置。
  5. 单击复选框附近的可执行文件图标。
  6. 单击 操作设置 可访问 HMTL SQL 注入设置 页。

    基于 SQL 语法的保护 HTML 有效负载的 GUI 配置

  7. 选中 使用 SQL 语法 检查复选框。
  8. 单击 OK(确定)。

使用 GUI 为 JSON 有效负载配置基于 SQL 语法的保护

完成 GUI 过程以配置基于语法的 JSON SQL 注入检测。

  1. 在导航窗格上,导航到 “ 安全” > “配置文件”。
  2. 配置文件页面中,单击添加
  3. Citrix Web App Firewall 配置文件 页面中,单击 高级设置 下的 安全检查
  4. 安全检查 部分,转到 JSON SQL 注入 设置。
  5. 单击复选框附近的可执行文件图标。
  6. 单击 操作设置 以访问 JSON SQL 注入设置 页面。
  7. 选中 使用 SQL 语法 检查复选框。
  8. 单击 OK(确定)。

    基于 SQL 语法的保护 JSON 有效负载的 GUI 配置