使Firebase数据库超安全

使Firebase数据库超安全,firebase,firebase-realtime-database,cryptography,firebase-security,Firebase,Firebase Realtime Database,Cryptography,Firebase Security,我正试图为Firebase编写完美的数据库规则,以阻止人们看到彼此的数据。每个用户都有一个API密钥保存在数据库中,如下所示: -users: -user1: -APIKEY: "123asdasasd" 我允许用户只设置他们的API密钥,但他们甚至不能看到自己保存的API密钥。这是我的安全规则: "users": { "$userID": { ".write": "auth != null && auth.uid

我正试图为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中有哪些好的加密方法?如果服务器知道一个私钥,而没有其他人知道该私钥,那么它只是安全的吗?

您将“密钥”一词用于一些不同的事情,不幸的是,这使得很难回答。不过,我会尝试一下,因为要考虑的主要问题是存储加密/解密数据的密钥。
  • 如果将加密/解密密钥存储在与使用它们加密的值相同的数据库中,则任何具有该数据库访问权限的人都可以解密数据
  • 如果将加密/解密密钥存储在另一个数据库中,而不是存储加密值的数据库中,则恶意用户将需要访问这两个数据库才能使用密钥对值进行解密
  • 当然,这两种方法都容易受到暴力攻击。因此,如果您的加密不够强,那么加密数据的整个意义就没有意义了


    顺便说一句,推荐用于加密的特定库在Stack Overflow上是离题的,但一些目标明确的谷歌搜索应该会给你提供很多好的候选库。

    请解释黑客“入侵我的整个数据库”意味着什么@DougStevenson看到我的数据库里有什么唯一可能发生的事情就是如果有人拥有你的谷歌账户密码。在这一点上,您的项目可能处于非常糟糕的状态,我不确定您能真正做些什么来阻止他们。您是否说即使有人冒充其他用户,他们也无法访问他们的数据,只有他们可以更改数据,。所以如果我模仿你,把你的钥匙换成我知道的东西,我就会知道你的钥匙,对吗?这听起来不太安全——也许我误解了?此外,将API密钥存储在clear中的客户端上也可能是一个安全问题。我建议不要过于依赖“API密钥”,利用用户帐户进行身份验证以实现安全性——Firebase身份验证在这方面效果很好。