0

这个问题出现在代码审查中,参考了必须使用字符串插值 (C#) 构造的选择查询,我似乎无法以一种或另一种方式找到参考。例如,查询可能类似于:

var sql = "SELECT * FROM {someTable} WHERE {indexedField} = ?";

由于在 WHERE 子句中使用了参数,我认为这无论如何都应该是安全的;但是,得到确认会很好。一些简单的尝试表明,即使尝试注入并且查询最终看起来像这样

Select * from SomeTable; SELECT * FROM SomeOtherTable Where IndexedField = "1"

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

4

2 回答 2

0

像这样的注入Select * from SomeTable; SELECT * FROM SomeOtherTable Where IndexedField = "1"确实会出错,因为 QLDB 驱动程序txn.Execute()每个查询都需要一个。

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

对于第二个选项,您可以为某些表定义权限,以在注入尝试的情况下拒绝不需要的访问。

于 2021-06-09T22:31:21.210 回答
0

需要字符串插值的任何特殊原因?

https://docs.aws.amazon.com/qldb/latest/developerguide/driver-quickstart-dotnet.html#driver-quickstart-dotnet.step-5使用参数可能最有助于防止sql注入。

于 2021-05-25T19:29:21.770 回答