Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何防止从chrome控制台或其他方法访问firebase db_Javascript_Firebase_Vue.js_Scope_Google Cloud Firestore - Fatal编程技术网

Javascript 如何防止从chrome控制台或其他方法访问firebase db

Javascript 如何防止从chrome控制台或其他方法访问firebase db,javascript,firebase,vue.js,scope,google-cloud-firestore,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实例放在全局窗口范围内,只是想看看我是否可以进入c

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

// 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变量公开到全局范围,这就足够了吗?我在读这篇文章:

因为您在main.js文件中创建的任何变量仍然无法在全局范围内使用,因为webpack


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

由于您的应用程序需要此配置,任何恶意用户也可以从您的应用程序获取此数据。这是无法隐藏的:如果你的应用需要,一个有足够动机的恶意用户将能够找到它。一旦有人拥有了配置,他们就可以使用它访问您的数据库

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

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


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

从不同的模块文件执行所有DB访问。可以是普通javascript文件。但是把它放在模块作用域
db
中就可以了。将CRUD操作放在模型或实体类中是一种常见的设计模式。@RandyCasburn这是不安全的。绝不能在客户端进行安全保护。@crysxd-当然不是-我正在解决“全局”变量与作用域变量的问题。无法从客户端浏览器或其他方面保护API端点的恶意使用。c@RandyCasburn当然我只是想防止有人把你的建议作为问题的解决方案,只是为了补充这个伟大的回答:网络浏览器不是一个安全的环境。每个人都可以对你的代码进行修改,没有办法阻止它。您无法控制浏览器的环境。为了确保安全访问,您需要在受信任的环境中有一台服务器为您进行授权。幸运的是,Firebase为您提供了上述答案中提到的所有所需。