如何防止通过Chrome控制台或其他方法访问Firebase数据库

时间:2019-06-16 14:03:41

标签: javascript firebase vue.js scope google-cloud-firestore

所以我有一个仅用于页面前端的应用程序。现在我有这样的东西

// db.js
import firebase from "firebase/app"
import "firebase/firestore";

var firebaseConfig = {
...
};


export const db = firebase
  .initializeApp(firebaseConfig)
  .firestore();

在main.js中,我正在尝试将db实例放入全局窗口范围,以查看是否可以进入chrome Web控制台并访问它以提交文档,而确实可以

// main.js
import { db } from './db'
window.db = db;

然后从Chrome控制台

db.collection("test").add({'somekey': 'Can I add this doc?'})

如何防止没有真正的后端检查身份验证的人这样做?我喜欢Vue + Firebase的反应性。如果我不将db变量暴露给全局范围就足够了吗?我在看这篇文章:

https://forum.vuejs.org/t/how-to-access-vue-from-chrome-console/3606/2

  

因为在web.pack中,您在main.js字段中创建的任何变量仍将无法全局使用

1 个答案:

答案 0 :(得分:1)

Firestore的一大优点是您可以直接从网页中访问它。这意味着,在该网页中,您必须具有所有配置数据才能找到相关的Google服务器,并在这些服务器上找到Firebase项目。在您的示例中,该数据是firebaseConfig的一部分。

由于您的应用需要此配置,因此任何恶意用户也可以从您的应用中获取此数据。没有办法掩盖这一点:如果您的应用程序需要,有足够动机的恶意用户将能够找到它。一旦有人进行了配置,他们就可以使用它来访问您的数据库。

控制数据库访问的方法是使用Firebase的server-side security rules。由于这些都是在服务器上强制执行的,因此无法通过您的代码或恶意用户编写的代码来绕过它们。

您可以使用这些安全规则来确保所有数据都是有效的,例如,确保所有必填字段都在其中,并且没有应用程序不使用的数据。

但是常见的方法是还确保所有数据访问均得到授权。这要求您的用户已通过Firebase Authentication进行身份验证。您可以要求用户使用其凭据登录,也可以anonymously sign them in。在后一种情况下,他们不需要输入任何凭据,但是您仍然可以确保例如每个用户只能将数据写入自己的数据区域,并且只能读取自己的数据。