QLDB/PartiQL 中是不是可能存在 SQL 注入攻击
Posted
技术标签:
【中文标题】QLDB/PartiQL 中是不是可能存在 SQL 注入攻击【英文标题】:Is a SQL Injection Attack Possible in QLDB/PartiQLQLDB/PartiQL 中是否可能存在 SQL 注入攻击 【发布时间】:2021-08-07 06:17:43 【问题描述】:这个问题出现在代码审查中,参考了必须使用字符串插值 (C#) 构建的选择查询,我似乎无法以一种或另一种方式找到参考。例如,查询可能类似于:
var sql = "SELECT * FROM someTable WHERE indexedField = ?";
由于在 WHERE 子句中使用了参数,我认为这两种方式都应该是安全的;但是,得到确认会很好。一些简单的尝试表明,即使尝试注入并且查询最终看起来像这样
Select * from SomeTable; SELECT * FROM SomeOtherTable Where IndexedField = "1"
引擎在尝试运行多个查询时仍会出错。
【问题讨论】:
你知道如何在SQL查询中使用UNION
吗?
这是一个我没有考虑过的公平点,尽管在 PartiQL 规范中 UNION 似乎仍然不完整(并且,鉴于文档上的日期,实际上可能本身已经过时)。
【参考方案1】:
像Select * from SomeTable; SELECT * FROM SomeOtherTable Where IndexedField = "1"
这样的注入确实会出错,因为 QLDB 驱动程序需要一个 txn.Execute()
每个查询。
为了降低注射的风险,我建议:
清理字符串插值以拒绝潜在的恶意参数 利用 QLDB 功能,允许使用 IAM 策略通过 PartiQL 命令和分类帐表分离访问,https://aws.amazon.com/about-aws/whats-new/2021/06/amazon-qldb-supports-iam-based-access-policy-for-partiql-queries-and-ledger-tables/对于第二个选项,您可以为某些表定义权限,以在注入尝试的情况下拒绝不需要的访问。
【讨论】:
【参考方案2】:需要字符串插值的任何特殊原因?
https://docs.aws.amazon.com/qldb/latest/developerguide/driver-quickstart-dotnet.html#driver-quickstart-dotnet.step-5 使用参数可能最有助于防止 sql 注入。
【讨论】:
我肯定在查询中使用参数来获取数据值。然而,我的问题出现了,我是基于一个对象动态命名列,所以除了字符串插值来构建 SQL 本身之外,没有更好的方法我能想到 现在 .感谢您的回复!以上是关于QLDB/PartiQL 中是不是可能存在 SQL 注入攻击的主要内容,如果未能解决你的问题,请参考以下文章