コース目次 / 第0章
はじめに — 守るのは、鍵ではなくルール
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章です。
この章はまだ完了していません。
保存できませんでした(プライベートブラウズ中かもしれません)。この端末に進捗は残りませんが、先へは進めます。