DynamoDB - 安全放置/更新以避免“SQL”注入 (Python)?

DynamoDB - Securely Put/Update to avoid "SQL" Injection (Python)?

提问人:David_Springfield 提问时间:11/8/2022 更新时间:11/8/2022 访问量:1344

问:

我有一个 Python 函数,可以接收没有字符限制的用户输入(空格、特殊字符等都允许)。然后,它将输入写入 DynamoDB 表。

在关系 SQL 中,任何对数据库的写入事务都应参数化,以避免 SQL 注入。在 Dynamo 中写入用户提供的数据时,是否有任何类似的最佳实践来避免安全问题?

python 安全性 amazon-dynamodb sql-injection dynamodb-queries

评论


答:

0赞 Mink 11/8/2022 #1

我认为 DynamoDB 中没有“SQL 注入”

与将 AWS 开发工具包与低级别 API 结合使用的 DynamoDB 表进行交互的最佳实践

只有您的身份权限,您的代码可以修改 DynamoDB 中的数据,其他任何具有某种脚本的人都无法执行此操作

2赞 Borislav Stoilov 11/8/2022 #2

在NoSQL数据库中,注入攻击是绝对可能的!

你能做的最好的事情是验证你的输入,然后转义字符串参数

DynamoDB 中注入攻击的影响可能没有那么严重。不过,您有时可以检索到不应该恢复的结果,这可能有问题,也可能没有问题,具体取决于业务案例。这可用于窃取数据或使系统过载。

例:

如果使用 greater than 运算符,它会执行字典比较,如果提供具有低 ASCII 值的特殊字符,则可以利用它。

dynamo.scan(TableName = 'my-table', Select = 'ALL_ATTRIBUTES', 
                ScanFilter = {'username': {"AttributeValueList": [{"S": "*"}],
                                             "ComparisonOperator": "GT"}})

如果 中的值作为未转义的参数注入,则很容易利用AttributeValueList

评论

0赞 David_Springfield 11/9/2022
- 在将用户输入插入数据库之前,您将使用什么 Python 方法/函数来转义用户输入?
0赞 Borislav Stoilov 11/9/2022
好的,我刚刚检查过,转义部分由 boto3 为您处理,您只需要处理输入验证。Dynamo 可能还会以适当的方式处理这些值,以防它们作为参数占位符提供(不使用字符串 concat 来构建查询)