Google App Engine:在 API 中泄露数据存储 urlsafe 实体密钥是否存在任何安全问题?

Google App Engine: Is there any security concern with giving away datastore urlsafe entity keys in an API?

我想在 public 基于令牌的 API 中向某些实体提供匿名 ID。

有什么理由我不应该为此使用实体密钥的 urlsafe 字符串,因为它们已经匿名(至少在我的情况下,我没有使用自己的数据来构造密钥?

Google App Engine 和 Datastore 被认为是安全的,只要我不把密钥交给任何人,我没有,对吧?

谢谢。

  1. 其中一个 documentations 说....urlsafe 关键字参数使用 websafe-base64 编码的序列化引用 但最好将其视为不透明 唯一字符串...我认为这就是您所说的匿名

  2. 但随后的 documentation 说......密钥的字符串表示形式看起来很神秘,但并未加密! 它可以转换回原始密钥数据,包括类型和标识符。如果您不想将此数据公开给您的用户(并让他们轻松猜出其他实体的密钥),请加密这些字符串或使用其他方式....

您可以通过 base64 自行解码密钥 - 通常泄露密钥没有风险。

巨大的风险 是将 urlsafe 实体键作为参数并使用它们从数据存储中读取。攻击者可以欺骗您的应用程序从您的数据存储项目中读取任意数据。据我所知,没有任何记录。

所以基本上,任何变体在网络服务器中都是不允许的:

def get(params):
    data = datastore.get(urlsavedeccode(params.key))
    return data

任何从外部提供的密钥都不应与数据存储一起使用,因为您无法确定您正在读取您期望的 kind / 路径。这基本上与 SQL injection.

相同的风险范围