Firebase:您的实时数据库*****具有不安全的规则

时间:2018-08-23 20:09:48

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

我每周都会从Firebase收到这封烦人的电子邮件:

  

[Firebase]您的实时数据库*****具有不安全的规则

我想使这封电子邮件静音。

有这样的答案引用用户: Firebase email saying my realtime database has insecure rules

我的应用没有任何用户,也没有使用Firebase /身份验证。

我如何编写规则以使该电子邮件消失?

我在Firebase Web控制台上的数据库规则现在看起来像这样:

{
  "rules": {
      ".read": true,
      ".write": true
  }
}

我的firebase.json:

{
  "database": {
    "rules": "database.rules.json"
  },
  "hosting": {
    "public": "build",
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ],
    "rewrites": [
      {
        "source": "**",
        "destination": "/index.html"
      }
    ]
  }
}

我的fire.js:

import firebase from 'firebase/app';
import 'firebase/database';
import 'firebase/storage';

const config = {
  apiKey: <API_KEY>,
  authDomain: <AUTH_DOMAIN>,
  databaseURL: <DATABASE_URL>,
  projectId: <PROJECT_ID>,
  storageBucket: <STORAGE_BUCKET>,
  messagingSenderId: <YADA_YADA>,
};
const fire = firebase.initializeApp(config);
export default fire;

2 个答案:

答案 0 :(得分:2)

您的规则现在的方式是,世界上任何人都可以读写数据库的内容。对于您来说,这是一个安全问题,也可能是帐单问题,因为有人可以填满您的数据库,而您需要为此付费。

如果您的应用没有任何用户并且不使用auth,这听起来像您是从您控制的后端服务中使用它的。如果您仅使用admin SDK来读写数据库,则可以像这样将其锁定:

{
  "rules": {
    ".read": false,
    ".write": false
  }
}

admin SDK对数据库具有完全访问权限,并且会忽略所有规则,因此这不会影响使用该数据库的任何代码。

答案 1 :(得分:0)

我找到了解决方法。

在Firebase Web身份验证控制台中使用一些电子邮件和密码创建一个用户。

现在您fire.js中添加此内容:

firebase.auth().signInWithEmailAndPassword(<USERNAME>, <PASSWORD>).catch((error) => {
  console.log(error.code);
  console.log(error.message);
});

firebase.auth().onAuthStateChanged((user) => {
  if (user) {
    // User is signed in.
     console.log("IF YOU DON'T GET HERE SOMETHING IS WRONG");
  } else {
    // User is signed out.
     console.log("IF YOU GET HERE SOMETHING IS WRONG");
  }
});

然后在您的Firebase数据库规则控制台中粘贴以下内容:

{
  "rules": {
    "<RESOURCE1>": {
        ".read": "auth != null",
        ".write": "auth != null"
    },
    "<RESOURCE2>": {
        ".read": "auth != null",
        ".write": "auth != null"
    },
    "<RESOURCE3>": {
        ".read": "auth != null",
        ".write": "auth != null"
    },
    "<RESOURCE4>": {
        ".read": "auth != null",
        ".write": "auth != null"
    }
  }
}

现在,电子邮件警告将消失。