【发布时间】:2021-09-09 14:18:48
【问题描述】:
我正在考虑创建一个使用用户输入作为哈希键的 Amazon DynamoDB 表。我担心攻击者可能会通过恶意选择具有相同哈希的密钥来发起拒绝服务攻击,从而将大量数据添加到单个分区中。
亚马逊关于分区的文章没有解决这个问题:https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.Partitions.html
这里有一篇描述这种攻击的文章:https://lwn.net/Articles/474912/
这个问题有点类似,但不关注安全性,也没有答案:Is it good to use user-input as partition key value in DynamoDB
【问题讨论】:
-
你为什么要这样做?如果您希望您的用户选择密钥,那么您应该在清理它之后自己对其进行哈希处理。
-
该表存储用户数据。我正在考虑使用用户的 Cognito 用户名,因为它是不可变的。我知道我可以对用户名进行加密散列以确保其分布良好。对于我的用例,在创建帐户时为用户分配用户 ID 并将该 ID 用作表键更有意义。据我了解 Cognito,这将作为自定义属性实现。
-
DynamoDB 使用自己的 salt 对每个项目的键进行哈希处理,以便在分区键空间中生成键的均匀分布。但是,如果该表使用分区 + 排序键模式并且您将两者都接受为来自用户的输入,那么就键空间中的分布而言,所有的赌注都是错误的。
标签: amazon-web-services security amazon-dynamodb denial-of-service