【问题标题】: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 似乎仍然不完整(并且,鉴于文档上的日期,实际上可能本身已经过时)。

标签: security sql-injection amazon-qldb partiql nosql-injection


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 我肯定在查询中使用参数来获取数据值。然而,我的问题出现了,我是基于一个对象动态命名列,所以除了字符串插值来构建 SQL 本身之外,没有更好的方法我能想到 现在 .感谢您的回复!
    猜你喜欢
    • 2011-03-27
    • 1970-01-01
    • 1970-01-01
    • 2016-11-05
    • 2015-04-23
    • 1970-01-01
    • 1970-01-01
    • 2014-05-10
    • 2023-03-10
    相关资源
    最近更新 更多