Security QLDB/PartiQL中是否可能存在SQL注入攻击

Security QLDB/PartiQL中是否可能存在SQL注入攻击,security,sql-injection,amazon-qldb,partiql,nosql-injection,Security,Sql Injection,Amazon Qldb,Partiql,Nosql Injection,这个问题是在一次代码审查中提出的,涉及一个select查询,该查询必须使用字符串插值C构造,我似乎找不到这样或那样的引用。例如,查询可能类似于: var sql = "SELECT * FROM {someTable} WHERE {indexedField} = ?"; 由于WHERE子句中使用了param,我认为这两种方式都应该是安全的;不过,如果能得到确认就好了。几次简单的尝试表明,即使尝试了注入,查询结果也是这样 从SomeTable中选择*;从IndexedFie

这个问题是在一次代码审查中提出的,涉及一个select查询,该查询必须使用字符串插值C构造,我似乎找不到这样或那样的引用。例如,查询可能类似于:

var sql = "SELECT * FROM {someTable} WHERE {indexedField} = ?";
由于WHERE子句中使用了param,我认为这两种方式都应该是安全的;不过,如果能得到确认就好了。几次简单的尝试表明,即使尝试了注入,查询结果也是这样

从SomeTable中选择*;从IndexedField=1的其他表中选择*


引擎在尝试运行多个查询时仍会出错。

需要字符串插值的特定原因是什么

使用参数可能最有助于防止sql注入。

像Select*FROMSOMETABLE这样的注入;从IndexedField=1的其他表中选择*确实会出错,因为QLDB驱动程序需要一个txn.Execute per查询

为了降低注射的风险,我建议:

清理字符串插值以拒绝潜在的恶意参数 利用QLDB功能,允许使用IAM策略通过PartiQL命令和分类账表分离访问,
对于第二个选项,您可以为某些表定义权限,以便在尝试注入时拒绝不必要的访问。

您知道如何在SQL查询中使用UNION吗?这是一个我没有考虑过的公平点,尽管PartiQL规范中的UNION似乎仍然不完整,并且考虑到文档上的日期,事实上可能已经过时了。我肯定是在查询数据值时使用了参数。然而,我的问题是,我正在基于对象动态地命名列,因此除了字符串插值之外,我现在想不出更好的方法来构建SQL本身。感谢您的回复!