
Firebaseデータストアを探索するためのツール

Firebaseデータストアを探索・悪用するためのツールです。Firebaseの仕組みとこのツールを開発した理由については、こちらのブログ記事をご覧ください。
git clone https://github.com/iosiro/baserunner.gitcd baserunnernpm installnpm run buildnpm startBaserunnerのインターフェースは次のようになります。

まず、設定テキストボックスを使用して、テストしたいアプリからFirebase設定JSON構造を読み込みます。これは次のような形式です。
{
"apiKey": "API_KEY",
"authDomain": "PROJECT_ID.firebaseapp.com",
"databaseURL": "https://PROJECT_ID.firebaseio.com",
"projectId": "PROJECT_ID",
"storageBucket": "PROJECT_ID.appspot.com",
"messagingSenderId": "SENDER_ID",
"appId": "APP_ID",
"measurementId": "G-MEASUREMENT_ID",
"databaseURL": "https://PROJECT_ID.firebasedatabase.app/"
}
次に、通常のユーザーとしてログインします。メールアドレスとパスワード、または電話番号のいずれかを使用します。電話番号でログインする場合は、番号を送信する前にCAPTCHAを完了してください。その後、SMSからOTPの入力を求められます。CAPTCHAを完了せずにこのOTPを入力してログインを完了します。この手順はスキップして、認証なしでクエリをテストすることもできます。
最後に、クエリインターフェースを使用して、アプリケーションのCloud Firestore、Realtime Database、Firebase Storageにクエリを送信できます。Baserunnerは一般的な操作に対するテンプレートクエリをいくつか提供しています。いずれかをクリックしてテキストボックスに読み込み、==LIKE THIS== のように見える値を、有効なコレクション名、ID、フィールド、ファイルパスなどに置き換えます。
Firebase JavaScript SDKを使用して利用可能なコレクションのリストを取得する方法はないため、これらは推測するか、ターゲットアプリケーションのフロントエンドJavaScriptから名前を入手する必要があります。
BaserunnerはFirebase Storageバケットに対してもクエリを実行できます。現時点では、ディレクトリの一覧表示とファイルのダウンロードをサポートしています。これを使用するには、Firebase設定に storageBucket フィールドが含まれていることを確認してください。ストレージ操作は、データベースクエリと同じ認証で動作します。
アプリがCloud FirestoreとRealtime Databaseのどちらを使用しているかはどうやって判断しますか?
Realtime Databaseを使用するアプリケーションの設定オブジェクトには databaseURL キーがあります。このキーがないアプリケーションはCloud Firestoreを使用していると想定できます。Firebaseアプリケーションは両方のデータストアを使用する可能性があるため、迷った場合は両方のタイプのクエリを実行してください。
CORSでブロックされます!
Baserunnerは正常に動作するために、アプリケーションがlocalhostからのリクエストを受け入れることを期待しています(これはデフォルトで有効です)。そのため、Baserunnerをホスト型アプリケーションとして使用することはできません。
テスト対象のアプリケーションがlocalhostからのリクエストを許可していない場合は、機能を限定したバージョンのBaserunnerをブラウザで dist/index.html を開いて実行できます。この方法でBaserunnerを実行すると、メール+パスワードログインのみがサポートされ、電話ログインはサポートされません。
どのコレクションに対してクエリを実行すればよいかわかりません。
Cloud Firestore: セキュリティ上の理由から、FirebaseのクライアントサイドJavaScript APIはコレクションの一覧表示機能を提供していません。ターゲットアプリケーションのJavaScriptコードを調べ、推測する必要があります。
Realtime Database: このデータストアはJSONオブジェクトとして表現されるため、提供されている「[Realtime Database] データストアの読み取り」クエリを使用して全体を表示しようとすることができます。設定されているルールによっては失敗する可能性があることに注意してください。
Firebase Storage内のファイルを知るにはどうすればよいですか?
まずルート(/)の一覧表示を試してください。それが保護されている場合は、テストしているアプリがアクセスしているファイルを確認してください。/uploads や /images などのフォルダを試すとよいでしょう。
以前のクエリ結果を確認できますか?
Baserunnerページには最新のクエリ結果のみが表示されますが、すべての結果はブラウザのコンソールに記録されます。
Realtime Databaseクエリを実行すると、クライアントがオフラインであるというエラーが表示されます。
クエリを再実行してみてください。
Googleでログインするにはどうすればよいですか?
アプリのGoogle OAuth Client ID(例:NUMERIC_STR-ALPHANUMERIC_STR.apps.googleusercontent.com)を見つけます。サイトで「Sign in with Google」をクリックし、HTMLを検査して apps.googleusercontent.com を検索すると見つかります。
DNSファイル(Linux/macOSでは /etc/hosts、Windowsでは C:\Windows\system32\drivers\etc\hosts)を編集し、次の行を追加します。
127.0.0.1 PROJECT_ID.firebaseapp.com
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout ./selfsigned.key -out selfsigned.crt
プロンプトが表示されたら、Common Name (e.g. server FQDN or YOUR name) [] 以外のフィールドは空白のままにし、ここには PROJECT_ID.firebaseapp.com を設定します。
PROJECT_ID.firebaseapp.com に関連するすべてのウェブサイトデータを消去します(または新しいブラウザを使用します)。これにより、証明書の不一致(HSTS)による接続のブロックを防ぎます。Baserunnerで使用しているブラウザでDNS-over-TLSまたはDNS-over-HTTPSを使用している場合は、一時的に無効にして、FirebaseでのGoogleサインインに必要なオリジンを偽装します。
npm run startssl を使用してBaserunnerを起動し、ブラウザで https://PROJECT_ID.firebaseapp.com を読み込みます。
手順1で見つけたGoogle OAuth Clientを「Log in with Google」の下のフィールドに入力し、「Set Google client ID」をクリックします。
Googleサインインボタンをクリックし、アプリに登録したGoogleアカウントでサインインします。
「Set Google login」ボタンをクリックします。
Google以外のアカウントの場合と同様にデータベースを探索します。
セキュリティテストが終了したら、手順2でDNSファイルに追加した行を削除します。