【问题标题】:Google App Engine: Is there any security concern with giving away datastore urlsafe entity keys in an API?Google App Engine:在 API 中提供数据存储区 urlsafe 实体密钥是否存在安全问题?
【发布时间】:2021-12-30 06:50:03
【问题描述】:

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

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

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

谢谢。

【问题讨论】:

    标签: api google-app-engine google-cloud-datastore


    【解决方案1】:
    1. 其中一个documentations 说......urlsafe 关键字参数使用 websafe-base64 编码的序列化引用但最好将其视为不透明唯一字符串....当你说它是匿名的时候,我认为这就是你所指的

    2. 但是随后的documentation 说......密钥的字符串表示看起来很神秘,但没有加密! 可以将其转换回原始密钥数据,包括种类和标识符。如果您不想将这些数据暴露给您的用户(并让他们轻松猜测其他实体的密钥),那么请加密这些字符串或使用其他东西......

    【讨论】:

      【解决方案2】:

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

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

      因此,基本上,任何变体都不能在 Web 服务器中使用:

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

      从外部提供的任何密钥都不应与数据存储一起使用,因为您不能确定您正在阅读您期望的 kind / 路径。这与SQL injection的风险范围基本相同。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-04
        • 2012-06-27
        • 2016-08-03
        相关资源
        最近更新 更多