コース目次 / 第0章

はじめに — 守るのは、鍵ではなくルール

Firebaseのようなクライアント直結型データベースでは、クライアントの鍵の秘匿ではなく、サーバ側のセキュリティルールが守りの要だと理解します。自作モックで学ぶ理由と、法と倫理ゲートを確認します。

第0章 / 全4章目安 約6分この章のゴール: Firebaseの設計モデルと、このコースの自作モック方式を理解する

これまでのコースのアプリは、すべて「ブラウザ/アプリ → 自分のサーバ → データベース」という形でした。Firebase(の Firestore や Realtime Database)のような BaaS(Backend as a Service) は違います——クライアントが、サーバコードを介さず、直接データベースと話します。

直接つながる、ということは

自分でサーバを書かなくてよいのは、とても便利です。でも、これまで「サーバが確認していたこと」——sec-authz の所有者チェック、sec-web-basics の認可——は、誰が代わりに確認するのか。答えは、セキュリティルールという、データベース側に書く条件式です。
Firestore なら、こんな形です(構文はイメージです)。

match /users/{userId} {
  allow read, write: if request.auth.uid == userId;
}

これが、事実上の「認可コード」です。アプリにサーバがなくても、この一行が sec-authz で見た「所有者チェック」の役割を担います。

よくある誤解 — 「鍵を隠せば安全」ではない

Firebase のプロジェクトを設定すると、apiKey を含む設定情報をアプリに埋め込みます。ここで、sec-mobile で学んだ「秘密はバイナリに焼き込まない」を思い出して、「このapiKeyを隠さなきゃ」と身構える人がいます。でも、それは誤解です。
Firebase の apiKey は、sec-mobile で見た sk_live_… のような秘密鍵とは、性質が違います。「どのプロジェクトに繋ぐか」を示す識別子であって、これ単体で他人のデータを読み書きできる万能鍵ではありません。公式ドキュメントでも、クライアントに埋め込まれる前提の値だと説明されています。本当に守るべきは、鍵の秘匿ではなく、セキュリティルールの中身です。この区別を取り違えると、「鍵を一生懸命隠したのに、ルールが if true だった」という、本末転倒な事故が起きます。

このコースは、自作モックを使います

法と倫理ゲート

手を動かす前に

このコースは攻撃の技術に触れます。実習してよい相手は、次の3つだけです。

  • (a) 自分で作った練習用のやられ環境(このサイトが配る自作ターゲット)
  • (b) あなた自身の許可された環境(自分の Thousand SKY・secret-notes-ctf など)
  • (c) CTF 競技の中(規約の範囲で)

実在する第三者のシステムを許可なく触ることは、不正アクセス禁止法に触れます。 このゲートは、その線引きを毎回の入口で確かめるためのものです。詳しくは「セキュリティの法と倫理」へ。

実際の Firebase プロジェクトを持っていなくても、このコースは進められます。Firestore の REST API と同じ考え方(「認証情報を添えて、コレクション/ドキュメントのパスにアクセスする」)を、あなた自身の 127.0.0.1 に、node で再現します(法と倫理)。実際の JSON の細部は簡略化していますが、「ルールが緩いと何が起きるか」という核心は、本物とまったく同じです。

このコースの地図

章 学ぶこと
第1章 開いたルール — 認証なしで、他人のデータを読み書きする
第2章 ルールを締める — 認証と所有者を要求する

準備ができたら、次の章へ。まずは、ルールが緩いとどうなるかを、実際に起こします。

こうなっていればOK

卒業まであと3章です。

この章はまだ完了していません。