Cloud Firestore(ベータ版)の発表: Firebase と Google Cloud Platform から新しいスケーラブルで、フレキシブルなデータベースを利用できるようになりました。詳しくは、Cloud Firestore のドキュメントをご覧ください。

非安全性を解決する

Firebase Realtime Database が安全でないという警告を受け取った場合は、Firebase データベースのルールを変更してテストすることで、その非安全性を解決できます。このガイドを使用して、Firebase データベースのルールをチェックし、潜在的な非安全性を把握し、変更をデプロイする前にテストしてください。

Firebase データベースのルールを確認する

既存の Firebase データベースのルールを表示するには、Firebase コンソールの [ルール] タブに移動します。

Firebase データベースのルールの概要

Firebase データベースのルールは、悪意のあるユーザーからデータを守ります。一般的には、すべてのユーザーに読み取りと書き込みのアクセス権限を付与する公開ルールを使用して開発を開始しますが、データを保護するためのルールを構成したうえでアプリをデプロイすることが大切です。ルールを構成する際には、シミュレータを使用してさまざまなルールをテストします。

Firebase データベースのルールに不慣れな方は、「データベース ルールを使い始める」を参照し、仕組みについて学んでください。

共通の非安全性を解決する

デフォルトで設定した Firebase データベースのルール、または Realtime Database を使用して最初にアプリの開発を行った際の Firebase データベースのルールは、デプロイしたアプリに対して最適なルールではない可能性があります。以下の一般的な問題とその解決策を参照してください。

オープン アクセス

Realtime Database を設定する際に、開発中にオープン アクセスを許可するようにルールを設定している場合があります。データベースにアクセスできるのが自分だけの場合は問題がないように見えますが、アプリをデプロイしてユーザーを認証していない場合、データは悪意のあるユーザーに対して脆弱です。

非推奨事項: すべてのユーザーへの読み取りおよび書き込みアクセス権

{
  "rules": {
    ".read": true,
    ".write": true
  }
}
解決策: 読み取り書き込みアクセス権を制限するルール データ階層に合ったルールを構築します。この非安全性に対する一般的な解決策の 1 つは、Firebase Authentication によるユーザーベースのセキュリティです。詳細はユーザーベースのセキュリティをご覧ください。

認証されたユーザーのアクセス

Firebase データベースのルールによって、ユーザーがログインしていることが確認されますが、その認証に基づいてアクセスがそれ以上制限されないことがあります。ルールの 1 つに auth !== null が含まれている場合は、ログインしているすべてのユーザーがデータにアクセスできるということを意味します。

非推奨事項: ログインしているすべてのユーザーが、データベース全体に対して読み取りおよび書き込みアクセス権を持っている

{
  "rules": {
      // any logged-in user access your data
      ".read": "auth !== null",
      ".write": "auth !== null"
   }
}
解決策: auth 変数を使用してアクセス権を制限する。認証を確認するときは、認証プロパティの 1 つを使用して、特定のユーザーによる特定のデータセットへのアクセスをさらに制限することもできます。auth 変数について詳しくは、ユーザーベースのセキュリティをご確認ください。

ルールの不適切な継承

Firebase データベースのルールは、より狭いルールで、より深い子ノードのルールを上書きする親パスをカスケードします。子ノードでルールを書き込むときは、追加の権限しか付与できないことに注意してください。データベースのより深いパスのデータへのアクセスを絞り込んだり取り消したりすることはできません。

非推奨事項: 子パスでのルールの絞り込み

{
  "rules": {
     "foo": {
        // allows read to /foo/*
        ".read": "data.child('baz').val() === true",
        "bar": {
          /* ignored, since read was allowed already */
          ".read": false
        }
     }
  }
}
解決策: 広いルールを親パスで作成し、子パスでより詳細な権限を付与する より細かくデータアクセスを制限したい場合は、ルールも細かくします。Firebase データベースのルールのカスケードについて詳しくは、データのセキュリティ保護をご覧ください。

クローズド アクセス

アプリの開発中における一般的なアプローチとしては、データベースを遮断するという方法もあります。通常、これは以下のように、すべてのユーザーに対して読み取りと書き取りのアクセス権をクローズすることを意味します。

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

安全性には優れますが、アプリを起動すると問題が発生する可能性もあります。 詳細については、Firebase データベースのルールの構成とデプロイをご覧ください。

Firebase データベースのルールをテストする

更新した Firebase データベースのルールをテストするには、Firebase コンソールのシミュレータ ツールを使用します。

  1. シミュレータを開くには、[ルール] タブの [シミュレータ] をクリックします。
  2. シミュレータの設定で、次のようなテストのオプションを選択します。
    • 読み取りまたは書き込みのテスト
    • データベース内の特定の場所(パスとして)
    • 認証タイプ - 未認証、認証された匿名ユーザー、または特定のユーザー ID
  3. [実行] をクリックして、ルール ウィンドウの上のバナーで結果を確認します。

フィードバックを送信...

Firebase Realtime Database
ご不明な点がありましたら、Google のサポートページをご覧ください。