JSON SQL 注入保护检查
传入的 JSON 请求可以以部分 SQL 查询字符串或代码中未经授权的命令的形式进行 SQL 注入。这会导致从Web服务器的JSON数据库中窃取数据。收到此类请求后,设备会阻止此类请求以保护您的数据。
考虑以下情况:客户端向 NetScaler 设备发送 JSON SQL 请求,JSON 解析器解析请求负载,如果观察到 SQL 注入,则设备会对 JSON SQL 内容实施约束。该约束对 JSON SQL 请求实施大小限制。因此,如果观察到任何 JSON SQL 注入,设备将应用操作并使用 JSON SQL 错误页面进行响应。
配置 JSON SQL 注入保护
要配置 JSON SQL 保护,必须完成以下步骤:
- 将应用程序防火墙配置文件添加为 JSON。
- 为 JSON SQL 注入设置设置设置应用程序防火墙配置文件
- 通过绑定应用程序防火墙配置文件来配置 JSON SQL 操作。
添加 JSON 类型的应用程序防火墙配置文件
您必须首先创建一个配置文件,指定应用程序防火墙必须如何保护您的 JSON Web 内容免受 JSON SQL 注入攻击。 在命令提示符下,键入:
add appfw profile <name> -type (HTML | XML | JSON)
注意:
将配置文件类型设置为 JSON 时,HTML 或 XML 等其他检查将不适用。
示例
add appfw profile profile1 –type JSON
配置 JSON SQL 注入操作
您必须配置一个或多个 JSON SQL 注入操作来保护您的应用程序免受 JSON SQL 注入攻击。 在命令提示符下,键入:
set appfw profile <name> - JSONSQLInjectionAction [block] [log] [stats] [none]
SQL 注入操作包括: 阻止- 阻止违反此安全检查的连接。 日志-记录此安全检查的冲突情况。 统计信息-为此安全检查生成统计信息。 无-禁用此安全检查的所有操作。
配置 JSON SQL 注入类型
要在应用程序防火墙配置文件上配置 JSON SQL 注入类型,请在命令提示符下键入:
set appfw profile <name> - JSONSQLInjectionType <JSONSQLInjectionType>
示例
set appfw profile profile1 -JSONSQLInjectionType SQLKeyword
其中可用的 SQL 注入类型是: 可用的 SQL 注入类型。 SQLSplChar。检查 SQL 特殊字符、 SQLKeyword。检查 SQL 关键字。 SQLSplCharANDKeyword。如果找到,将同时检查和阻塞。 SQLSplCharORKeyword。如果找到 SQL 特殊字符或 spl 关键字,则阻塞。 可能的值:SQLSplChar、SQLKeyword、SQLSplCharORKeyword、SQLSplCharANDKeyword。
注意: 要启用一个或多个操作,请键入“set appfw profile - JSONSQLInjectionAction”,然后键入要启用的操作。
示例
set appfw profile profile1 -JSONSQLInjectionAction block log stat
以下示例显示了一个示例有效负载、其对应的日志消息和统计信息计数器:
Payload:
=======
{
"test": "data",
"username": "waf",
"password": "select * from t1;",
"details": {
"surname": "test",
"age": "23"
}
}
Log Message:
===========
08/19/2019:08:49:46 GMT pegasus121 Informational 0-PPE-0 : default APPFW APPFW_JSON_SQL 6656 0 : 10.217.32.165 18402-PPE0 - profjson http://10.217.32.147/test.html SQL Keyword check failed for object value(with violation="select(;)") starting at offset(52) <blocked>
Counters:
========
1 441083 1 as_viol_json_sql
3 0 1 as_log_json_sql
5 0 1 as_viol_json_sql_profile appfw__(profjson)
7 0 1 as_log_json_sql_profile appfw__(profjson)
<!--NeedCopy-->
使用 GUI 配置 JSON SQL 注入保护
请按照以下步骤设置 JSON SQL 注入保护设置。
- 在导航窗格上,导航到“安全”>“配置文件”。
- 在配置文件页面中,单击添加。
- 在 NetScaler Web App Firewall 配置文件页面中,单击“高级设置”下的“安全检查”。
- 在“安全检查”部分中,转到 JSON SQL 注入 设置。
- 单击复选框附近的可执行文件图标。
- 单击 操作设置 以访问 JSON SQL 注入设置 页面。
- 选择 JSON SQL 注入 操作。
- 单击确定。
- 在 NetScaler Web App Firewall 配置文件 页面中,单击 高级设置 下的 放宽规则。
- 在 放宽规则 部分中,选择 JSON SQL 注入 设置,然后单击 编辑。
- 在 JSON SQL 注入放宽规则页面中,输入请求必须发送到的 URL。发送到此 URL 的所有请求都不会被阻止。
-
单击创建。
为 JSON SQL 注入保护配置细粒度放松
Web App Firewall 为您提供了一个选项,可以从基于 JSON 的 SQL 注入检查中放宽特定 JSON 键或值。您可以使用细粒度放松规则配置多个选项来放宽 JSON 负载。
以前,为 JSON 保护检查配置放宽的唯一方法是指定整个 URL,这将绕过对整个 URL 的验证。
基于 JSON 的 SQL 安全保护为以下方面提供了放宽:
- 注册表名称
- 注册表值
基于 JSON 的 SQL 保护检查使您能够配置放宽以允许特定模式并阻止其余模式。例如,Web App Firewall 当前有一组默认的 SQL 关键字超过 100 个。由于黑客可以在 SQL 注入攻击中使用这些关键字,因此 Web App Firewall 会将所有关键字标记为潜在威胁。如果您想放宽一个或多个被认为对特定位置安全的关键字,则可以配置放宽规则,以绕过安全检查并阻止其余关键字。 放松中使用的命令具有值类型和值表达式的可选参数。您可以指定值表达式是正则表达式还是文字字符串。值类型可以留空,也可以选择关键字或特殊字符串。
注意:
正则表达式非常强大。特别是如果您不太熟悉 PCRE 格式的正则表达式,请仔细检查您编写的任何正则表达式。确保他们准确地定义了要添加为例外的 URL,而不是别的。粗心使用通配符,尤其是点星号 (.*) 元字符或通配符组合,可能会产生您不希望的结果,例如阻止对您不打算阻止的 Web 内容的访问,或者允许 JSON SQL Injection 检查本来会阻止的攻击。
需要考虑的要点
- 值表达式是可选参数。字段名称可能没有任何值表达式。
- 一个注册表名称可以绑定到多个值表达式。
- 必须为值表达式分配值类型。值类型可以是:1) 关键字,2) SpecialString。
- 您可以为每个键名称或 URL 组合设置多个放宽规则。
使用命令界面为命令注入攻击配置 JSON 细粒度放宽
要配置 JSON 文件颗粒放宽规则,必须将细粒度放松实体绑定到 Web App Firewall 配置文件。
在命令提示符下,键入:
bind appfw profile <profile name> -jsoncmdURL <URL> -key <key name> -isregex <REGEX/NOTREGEX> -valueType <keyword/SpecialString> <value Expression> -isvalueRegex <REGEX/NOTREGEX>
<!--NeedCopy-->
示例:
bind appfw profile appprofile1 -jsonsqlurl www.example.com -key stn_name -isRegex NOTREGEX -valueType Keyword “union” -isvalueRegex NOTREGEX
<!--NeedCopy-->
使用 GUI 为基于 JSON 的命令注入攻击配置精细放松规则
- 导航到 应用程序防火墙 > 配置文件,选择一个配置文件,然后单击 编辑。
- 在“高级设置”窗格中,单击“放宽规则”。
- 在“放松规则”部分中,选择 JSON SQL 注入记录,然后单击编辑。
- 在“JSON SQL 注入放宽规则”滑块中,单击 添加。
-
在 JSON SQL 注入放宽规则 页面中,设置以下参数。
- 已启用
- 是名字正则表达式
- 注册表项名称
- URL
- 值类型
- 注意
- 资源 ID
- 单击创建。