【问题标题】:Making Firebase Database ultra secure使 Firebase 数据库超安全
【发布时间】:2018-08-27 09:47:34
【问题描述】:

我正在尝试为 Firebase 编写完美的数据库规则,以阻止人们查看彼此的数据。每个用户都有一个保存在数据库中的 API 密钥,如下所示:

-users:
    -user1:
       -APIKEY: "123asdasasd"

我只允许用户设置他们的 API 密钥,但他们甚至无法看到他们自己保存的 API 密钥。这是我的安全规则:

"users": {
        "$userID": {
            ".write": "auth != null && auth.uid === $userID",
            ".read": "auth != null && auth.token.admin === true " 
        }
    },

因此,即使有人冒充其他用户,他们也无法访问他们的数据,只有他们可以更改数据,这对我的应用来说不是安全问题。

因为我的应用需要超安全,我还想将加密技术添加到数据库中。我希望客户端在保存到数据库之前加密 API 密钥,并且只有我的服务器会知道解密这些 API 密钥的密钥。因此存储在数据库中的密钥将被加密。

有权访问我整个数据库的黑客有什么方法可以在不知道解密密钥的情况下解密人们的 API 密钥?

node.js 中的密码学有哪些好的方法?如果服务器知道私钥而没有其他人知道该私钥,那么它是否只是安全的?

【问题讨论】:

  • 请解释黑客“入侵了我的整个数据库”意味着什么。
  • @DougStevenson 查看我的数据库中的任何内容
  • 发生这种情况的唯一方法是,如果有人知道您的 Google 帐户密码。到那时,您的项目可能会非常糟糕,我不确定您真的可以做些什么来阻止它们。
  • 您是不是说即使有人冒充其他用户,他们也无法访问他们的数据,只有他们可以更改数据,。因此,如果我冒充您,并将您的密钥更改为我知道的东西,那么我就会知道您的密钥,对吗?这听起来不太安全-也许我误解了?此外,在客户端上明文存储 API 密钥也可能是一个安全问题。我建议不要过于依赖“API 密钥”,而是利用具有身份验证的用户帐户来确保安全 - Firebase 身份验证非常适合此目的。

标签: firebase firebase-realtime-database cryptography firebase-security


【解决方案1】:

您将“钥匙”一词用于一些不同的事物,不幸的是,这很难回答。不过我会尝试一下,因为要考虑的主要问题是存储用于加密/解密数据的密钥的位置。

  1. 如果您将加密/解密密钥与您使用它们加密的值存储在同一个数据库中,那么任何有权访问该数据库的人都可以解密数据。
  2. 如果您将加密/解密密钥存储在另一个数据库中,而不是存储加密值的位置,则恶意软件将需要访问这两个数据库才能使用密钥解密值。

当然,这两种方法都容易受到暴力攻击。因此,如果您的加密不够强大,那么加密数据的全部意义就没有意义了。

顺便说一句,在 Stack Overflow 上推荐用于加密的特定库是题外话,但一些针对性强的 Google 搜索应该会为您提供大量优秀的候选者。

【讨论】:

    猜你喜欢
    • 2018-05-02
    • 2018-02-02
    • 2016-09-16
    • 1970-01-01
    • 2020-08-08
    • 2021-12-22
    • 2018-12-15
    • 1970-01-01
    相关资源
    最近更新 更多