【问题标题】:How to secure Firebase RealTime Database from chrome extensions or Tampermonkey extension? [duplicate]如何从 chrome 扩展或 Tampermonkey 扩展中保护 Firebase 实时数据库? [复制]
【发布时间】:2019-05-09 22:41:12
【问题描述】:

任何知道如何在 Tampermonkey 扩展程序中编写脚本或如何创建扩展程序的人都可以轻松地在网页中注入 javascript 代码并访问配置键。那么如何保护它呢?

var config = {
    apiKey: "apiKey",
    authDomain: "projectId.firebaseapp.com",
    databaseURL: "https://databaseName.firebaseio.com",
    storageBucket: "bucket.appspot.com"
};
firebase.initializeApp(config);

现在我唯一能想到的就是包装匿名函数以避免全局变量可访问性。这可以防止访问变量。

还是不安全,开发者可以使用正则表达式ajax javascript文件和解析数据,那么如何防止呢?

我想到的另一件事是使用 nodejs 作为后端并使用 restapi 获取数据,但它也排除了它是实时数据库。此外,如果firebase在后端实时更新数据库,我必须使用socket.io将数据实时传输到客户端。

因为如果任何人都可以注入脚本来访问配置键,那么他也可以按照自己的意愿在数据库中的任何地方读写,只要授予读写权限。 这是一个安全问题。客户端上可用的任何密钥都是有风险的。那么如何防止此类攻击呢?

【问题讨论】:

    标签: javascript firebase firebase-realtime-database


    【解决方案1】:

    这是一个相当普遍的问题。答案是:不,客户端不能在数据库的任何地方读写,只能在你的规则允许的地方读写。

    这与 REST 完全一样,如果您有一个 REST API,那么您的所有端点都是公共的。防止恶意使用的是服务器规则。

    在这种情况下,数据库规则负责保护和验证数据。

    最简单的规则是用户登录:

    Items: {
        .read: if auth != null, 
       .write: if auth != null
    }
    

    你还可以有更通用的规则,比如所有者权限

    user_items: {
       $uid: {
             .read: if auth.uid == $uid, 
            .write: if auth.uid == $uid  
       }
    }
    

    前面的示例考虑了一个数据结构,其中每个用户都有自己的节点,但如果出于任何原因您打算将其全部保存在同一个节点中,则可以使用query rules 来完成。我的建议是使用上述结构,这样将来可以通过非规范化数据来添加管理功能。

    这里的不同之处在于,如果您查看凭据,就会暴露您的凭据,没有什么真正私密的东西,只有 Firebase 需要数据才能将请求与您的项目相匹配,除此之外,您的项目必须定义安全性。请注意保护 RT​​D、Firestore 和存储。

    【讨论】:

    • 更新了答案。我建议您阅读有关规则firebase.google.com/docs/database 的文档,尤其是有关数据结构的文档,这似乎是最初的错误概念firebase.google.com/docs/database 这不是SQL(表)数据库,所有“动物”都可以或不可以在同一个地方,如果需要,甚至可以在多个地方
    • 如果你真的确定这一点,那么你应该做一些道德黑客,创建你所说的 POC 并将其发送到 Firebase,我已经联系了支持人员,他们非常响应 @FaizanRupani跨度>
    • 只是为了添加我的 2 美分 @FaizanRupani... 注入脚本,可能是在用户浏览器上使用第 3 方系统,或者使用受感染的路由器会使其“不安全”。我对您的担忧是,在同一个域上运行的注入受损代码现在可以像当前登录的用户一样对数据库造成损害。
    • 我认为我们在这里忘记的是,注入的受损代码也可能对安全的 api 点造成如此损害,因为来自受损代码的请求也将具有相同的 cookie 或 jwt 来验证自己(请记住,黑客可以调查并最终访问内存中的那些 jwt,或者只是使用根据请求自动发送的会话 cookie)。因此,如果您在安全的 api 上执行此操作,也不会有任何不同。
    • 鉴于此,问题现在出在 Firebase 之外,以及您如何保护您的网站甚至浏览器。如果您使用 https,则在您的网站途中注入代码(例如中间人攻击或受损路由器)非常困难......并且默认情况下,托管在 firebase 上会通过 https 发送您的网站。如果您将其托管在自己的服务器上,那么添加 https 将是您的责任。
    猜你喜欢
    • 2019-01-06
    • 2014-04-10
    • 1970-01-01
    • 2013-02-10
    • 2017-10-15
    • 1970-01-01
    • 1970-01-01
    • 2016-06-12
    • 1970-01-01
    相关资源
    最近更新 更多