firebase
データベースルール
サーチ…
前書き
Firebase Realtime Databaseを使用すると、データベースルールはサーバ側のセキュリティとなります。あなたはデータベースに誰がアクセスしているかを非常に注意深く認識する必要があります。すべきでないデータに誰もアクセスできないことが重要です。
デフォルトでは、Firebaseリアルタイムデータベースのルールは、認証されたユーザがすべてのデータを読み書きすることを許可します。これは、おそらくあなたのアプリがやりたいものではありません。
さまざまなシナリオの例を見てみましょう。
備考
Firebase Realtime Databaseは、データベースをどのように構造化するか、インデックスを作成する方法、データを読み書きできるかを簡単に定義するためのJavaScriptベースの構文を使用して、柔軟な式ベースのルール言語を提供します。当社の認証サービスと組み合わせることで、誰がどのデータにアクセスしているのかを定義し、不正なアクセスからユーザーの個人情報を保護することができます。
デフォルトでは、データベースルールはFirebase認証を必要とし、認証されたユーザーにのみ完全な読み取りと書き込みのアクセス許可を与えます。デフォルトのルールでは、あなたがデータベースを設定する機会を得る前に、あなたのデータベースに誰もアクセスできないようにします
公式文書
https://firebase.google.com/docs/database/security/quickstart
ルールの設定方法
- Firebaseコンソールに入ります。
- あなたのプロジェクトを選択してください
- 左側の[データベース]セクションをクリックし、[ルール]タブを選択します。
実稼働環境に入れる前にセキュリティルールをテストする場合は、ルールエディタの右上にあるSimulateボタンを使用して、コンソールで操作をシミュレートできます。
デフォルトルール
デフォルトルールには認証が必要です。
彼らはあなたのアプリの認証されたユーザーに完全な読み書きアクセスを許可します。あなたのアプリのすべてのユーザーにデータを公開したいが、世界中に公開したくない場合に便利です。
// These rules require authentication
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}
あなたのファイルを一般的に読み書き可能にする方法
ただ定義する:
// These rules give anyone, even people who are not users of your app,
// read and write access to your database
{
"rules": {
".read": true,
".write": true
}
}
このレベルのアクセスは、 誰でもあなたのデータベースを読み書きできるので、開発中は役に立ちますが注意が必要です。
読み取りと書き込みのアクセスを無効にする方法
プライベートルールを定義して、ユーザーによるデータベースへの読み取りおよび書き込みアクセスを無効にすることができます。これらのルールを使用すると、データベースにアクセスできるのは、管理者特権(Firebaseコンソールを介してデータベースにアクセスするか、サーバーからサインインすることによって取得できます )だけです。
// These rules don't allow anyone read or write access to your database
{
"rules": {
".read": false,
".write": false
}
}
認証されたユーザーにのみアクセスを許可する方法
次に、認証された各ユーザーに/users/$user_id
個人ノードを与えるルールの例を示し/users/$user_id
。$ user_idは、 認証によって取得されたユーザーのIDです。
// These rules grant access to a node matching the authenticated
// user's ID from the Firebase auth token
{
"rules": {
"users": {
"$user_id": {
".read": "$user_id === auth.uid",
".write": "$user_id === auth.uid"
}
}
}
}
グループから特定のアイテムを読むことを許可するが、グループのメンバーをリストすることを禁止する方法
アイテムIDをキーとして単純な値ノードを作成してアイテムのグループを作成するのが一般的です。たとえば、 /administrators/$user_id
に値true
ノードを作成することによって、ユーザーを "administrators"グループに追加できtrue
。セキュリティ上の理由で誰が管理者を誰に知らせたくないのですが、認証済みのユーザーが管理者であるかどうかを確認する必要があります。これらのルールによって、私たちはそれをちょうど行うことができます:
{
"rules": {
"administrators": {
// No one can list administrators
".read": "false",
"$uid": {
// Authenticated user can check if they are in this group
".read": "$uid === auth.uid",
// Administrators can write
".write": "data.parent().child(auth.uid).val() === true",
// Allow only add or delete, no duplicates
".validate": "!data.exists() || !newData.exists() || newData.isBoolean()",
}
}
}
}