如何防止 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 表达式将被识别和评估。它将作为参数添加。

另见 official documentation

如你所见; Mule 4 的一个主要改进是它使用命名参数。

您可以使用 yaml 定义自定义策略,例如可以包含已批准字符的白名单并作为 MuleSoft API 管理器上的安全策略强制执行。

json 和 xml 保护等构建策略也可以使用。

参考文献:

DZone: Creating Custom Policies in MuleSoft

DZone: Cheatsheat - Addressing OWASP Top 10 Vulnarabilities in MuleSoft APIs