【问题标题】:How to prevent SQL injection in Mule Applications?如何防止 Mule 应用程序中的 SQL 注入?
【发布时间】:2018-03-12 16:03:56
【问题描述】:

在 Mule 应用程序中是否有避免 SQL 注入的最佳实践?

我猜general guide-lines "how to avoid SQL injection" 也可以在这里工作......

主要防御:

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

附加防御:

Also: Enforcing Least Privilege
Also: Performing White List Input Validation as a Secondary Defense

但是是否有任何内置支持,有助于避免 SQL 注入?

【问题讨论】:

  • 选项 2 和 4 只是一个骗局。您必须选择#1 和#3。请注意,白名单在任何地方都不是“附加”防御,它是第一道防线,当 #1 不适用时,应在任何地方使用

标签: mule sql-injection mule-studio anypoint-studio mule-esb


【解决方案1】:

根据recent blog post(2017 年 10 月 12 日):

有一个全新的Mule 4 Anypoint Connector for Database (DB) 可用于连接不同的关系数据库引擎(MySQL 数据库、Microsoft SQL Server 数据库、PostgreSQL 数据库、Oracle 数据库等)。

这个新的连接器仅在 Mule 4 中可用。

骡子 4

连接器引入的选择操作允许使用参数化的 SQL 查询,如以下 XML sn-p:

<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 查询的含义。由于不会重新编译查询;传递的参数不能用于改变 SQL 查询。

有关详细信息,请参阅以下 StackOverflow 问题:

How does a PreparedStatement avoid or prevent SQL injection?

这有助于避免某些类型的攻击,但此解决方案不会使系统 100% 免受 SQL 注入的影响

有关详细信息,请参阅安全 StackExchange 上的以下问题:

Are prepared statements 100% safe against SQL injection?

据此;通过使用带有参数化查询和white list input validation 的准备好的语句,您可以避免一些/大多数类型的攻击,但不要认为您的系统是 100% 安全的。

除了带有参数化查询和用户输入清理的预准备语句之外,您还需要设置其他防线。

骡子 3.9

在 Mule 3.9 中,您可以使用参数化查询。

这是由运行时中的“SimpleQueryTemplateParser”类实现的。

这将用问号替换查询文本中的 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 的一个主要改进是它使用了命名参数。

【讨论】:

    【解决方案2】:

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

    在构建策略中,例如 json 和 xml 保护也可以使用。

    参考资料:

    DZone: Creating Custom Policies in MuleSoft

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

    【讨论】:

      猜你喜欢
      • 2010-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-07
      • 2012-03-19
      • 2020-11-19
      • 1970-01-01
      • 2011-09-10
      相关资源
      最近更新 更多