如何防止 Mule 应用程序中的 SQL 注入?
How to prevent SQL injection in Mule Applications?
在 Mule 应用程序的情况下,是否有如何避免 SQL 注入的最佳实践?
我猜 general guide-lines "how to avoid SQL injection" 在这里也可以工作...
Primary Defenses:
Option 1: Use of Prepared Statements (with Parameterized Queries)
Option 2: Use of Stored Procedures
Option 3: White List Input Validation
Option 4: Escaping All User Supplied Input
Additional Defenses:
Also: Enforcing Least Privilege
Also: Performing White List Input Validation as a Secondary Defense
但是是否有任何内置支持可以帮助避免 SQL 注入?
根据 recent blog post(2017 年 10 月 12 日):
有一个全新的 Mule 4 Anypoint Connector for Database (DB) 可用于连接到不同的关系数据库引擎(MySQL 数据库、Microsoft SQL 服务器数据库、PostgreSQL 数据库、 Oracle 数据库等)。
此新连接器仅在 Mule 4 中可用。
骡子 4
连接器引入的 select 操作允许使用参数化 SQL 查询,如以下 XML 片段:
<set-variable variableName="table" value="PLANET"/>
<db:select config-ref="dbConfig">
<db:sql>#["SELECT * FROM $(vars.table) WHERE name = :name"]</db:sql>
<db:input-parameters>
#[{'name' : payload}]
</db:input-parameters>
</db:select>
使用这种方法,查询 应该 对 SQL 注入攻击免疫。
这将强制 Mule 运行时使用准备好的语句,该语句只编译一次。因为它是预编译的;参数将纯粹作为数据处理,不能用于更改 SQL-query 的含义。由于查询不会被重新编译;传递的参数不能用于更改 SQL 查询。
有关详细信息,请参阅以下 Whosebug 问题:
How does a PreparedStatement avoid or prevent SQL injection?
这有助于避免某些类型的攻击,但此解决方案不会使系统 100% 免疫SQL-injection。
有关详细信息,请参阅安全 StackExchange 上的以下问题:
Are prepared statements 100% safe against SQL injection?
据此;通过使用带有参数化查询和 white list input validation 的准备好的语句,您可以避免 some/most 类型的攻击,但不要认为您的系统是 100% 安全的。
除了带有参数化查询和用户输入清理的准备好的语句之外,您还需要准备好其他防线。
骡子 3.9
在 Mule 3.9 中你可以使用 parameterized-query.
这是在运行时由“SimpleQueryTemplateParser”class实现的。
这将用问号替换查询文本中的 MEL 表达式,创建 parametrized SQL statement。
即使带有 MEL 表达式的 SQL 语句看起来有点可疑,它也不会被简单地连接起来。
例如以下情况:
SELECT * from employee where name = #[flowVars.name]
#[flowVars.name]
部分将替换为问号,它将被识别为 SQL 查询参数并创建以下查询:
SELECT * from employee where name = ?
MEL 表达式将被识别和评估。它将作为参数添加。
如你所见; Mule 4 的一个主要改进是它使用命名参数。
您可以使用 yaml 定义自定义策略,例如可以包含已批准字符的白名单并作为 MuleSoft API 管理器上的安全策略强制执行。
json 和 xml 保护等构建策略也可以使用。
参考文献:
DZone: Creating Custom Policies in MuleSoft
DZone: Cheatsheat - Addressing OWASP Top 10 Vulnarabilities in MuleSoft APIs
在 Mule 应用程序的情况下,是否有如何避免 SQL 注入的最佳实践?
我猜 general guide-lines "how to avoid SQL injection" 在这里也可以工作...
Primary Defenses:
Option 1: Use of Prepared Statements (with Parameterized Queries) Option 2: Use of Stored Procedures Option 3: White List Input Validation Option 4: Escaping All User Supplied Input
Additional Defenses:
Also: Enforcing Least Privilege Also: Performing White List Input Validation as a Secondary Defense
但是是否有任何内置支持可以帮助避免 SQL 注入?
根据 recent blog post(2017 年 10 月 12 日):
有一个全新的 Mule 4 Anypoint Connector for Database (DB) 可用于连接到不同的关系数据库引擎(MySQL 数据库、Microsoft SQL 服务器数据库、PostgreSQL 数据库、 Oracle 数据库等)。
此新连接器仅在 Mule 4 中可用。
骡子 4
连接器引入的 select 操作允许使用参数化 SQL 查询,如以下 XML 片段:
<set-variable variableName="table" value="PLANET"/>
<db:select config-ref="dbConfig">
<db:sql>#["SELECT * FROM $(vars.table) WHERE name = :name"]</db:sql>
<db:input-parameters>
#[{'name' : payload}]
</db:input-parameters>
</db:select>
使用这种方法,查询 应该 对 SQL 注入攻击免疫。
这将强制 Mule 运行时使用准备好的语句,该语句只编译一次。因为它是预编译的;参数将纯粹作为数据处理,不能用于更改 SQL-query 的含义。由于查询不会被重新编译;传递的参数不能用于更改 SQL 查询。
有关详细信息,请参阅以下 Whosebug 问题:
How does a PreparedStatement avoid or prevent SQL injection?
这有助于避免某些类型的攻击,但此解决方案不会使系统 100% 免疫SQL-injection。
有关详细信息,请参阅安全 StackExchange 上的以下问题:
Are prepared statements 100% safe against SQL injection?
据此;通过使用带有参数化查询和 white list input validation 的准备好的语句,您可以避免 some/most 类型的攻击,但不要认为您的系统是 100% 安全的。
除了带有参数化查询和用户输入清理的准备好的语句之外,您还需要准备好其他防线。
骡子 3.9
在 Mule 3.9 中你可以使用 parameterized-query.
这是在运行时由“SimpleQueryTemplateParser”class实现的。
这将用问号替换查询文本中的 MEL 表达式,创建 parametrized SQL statement。
即使带有 MEL 表达式的 SQL 语句看起来有点可疑,它也不会被简单地连接起来。
例如以下情况:
SELECT * from employee where name = #[flowVars.name]
#[flowVars.name]
部分将替换为问号,它将被识别为 SQL 查询参数并创建以下查询:
SELECT * from employee where name = ?
MEL 表达式将被识别和评估。它将作为参数添加。
如你所见; Mule 4 的一个主要改进是它使用命名参数。
您可以使用 yaml 定义自定义策略,例如可以包含已批准字符的白名单并作为 MuleSoft API 管理器上的安全策略强制执行。
json 和 xml 保护等构建策略也可以使用。
参考文献:
DZone: Creating Custom Policies in MuleSoft
DZone: Cheatsheat - Addressing OWASP Top 10 Vulnarabilities in MuleSoft APIs