Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Firebase Security Rules
Search
k2wanko
July 02, 2018
6
5.3k
Firebase Security Rules
https://firebase-community.connpass.com/event/89302/
k2wanko
July 02, 2018
Tweet
Share
More Decks by k2wanko
See All by k2wanko
Sales AI Cloud "ailead" TSConfig Strictly Adopted / セールスAIクラウド「ailead」の TSConfig厳格化対応した話 /
k2wanko
1
1.6k
Google Analytics for Firebaseを 使うときに把握しておきたいこと / Keep in mind when using Google Analytics for Firebase
k2wanko
2
460
パスワードのない未来のための Firebaseで実装するFIDO2 / FIDO2 actualized by Firebase for the password-less future
k2wanko
5
2.2k
Firebase Auth& Performance Monitoring
k2wanko
0
330
What's New Firebase 2019 Q1 #FJUG #io19jp
k2wanko
5
2.5k
Firebase for Grow
k2wanko
5
890
gosecを試してみた話 / try gosec
k2wanko
1
2.8k
最近のFirebase / Recent Firebase
k2wanko
4
1.5k
Firebase Japan User Group Introduction 2018 #FJUG
k2wanko
0
580
Featured
See All Featured
Making the Leap to Tech Lead
cromwellryan
133
9k
How to Ace a Technical Interview
jacobian
276
23k
The Pragmatic Product Professional
lauravandoore
32
6.3k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
132
33k
Code Review Best Practice
trishagee
65
17k
A Tale of Four Properties
chriscoyier
157
23k
Side Projects
sachag
452
42k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.1k
Fontdeck: Realign not Redesign
paulrobertlloyd
82
5.3k
How To Stay Up To Date on Web Technology
chriscoyier
789
250k
Designing Experiences People Love
moore
138
23k
For a Future-Friendly Web
brad_frost
175
9.4k
Transcript
Security Rules @k2wanko
コキチーズ @k2wanko - GCPとFirebaseが好きな人 - 最近はPUBGとSplatoonで遊んでる - Firebase Japan User
GroupのOrganizerやってます - 本職はセキュリティエンジニア、サラリーマン
最近、Firebase盛り上がってますね
それと、 「合計1億件以上の個人情報がFirebaseの 脆弱性によって公開状態に」 って記事が話題ですね 原文: 62% of Enterprises Exposed to
Sensitive Data Loss via Improperly Secured Firebase Databases
どういう記事かというと
セキュリティ会社の調査によって、 Firebase利用企業の62%が データベースのセキュリティルールに問題があり 機密情報が公開状態になっているとのこと
たぶんこういうこと
もしくは、こう
これを踏まえて考える
(俺の考えた) 最強のセキュリティルール
None
つまり、クライアントで 書き込みも読み出しも しない!!!!!!!!!!
以上!
ありがとうございました!
というわけには、いかないので ちゃんとやります。
そもそも、セキュリティルールとは?
クライアントからの読み書きを制御するためのルール セキュリティルールがあるのは3つのサービス Realtime Database Cloud Firestore Cloud Storage
この3つのサービスはSDKから直接読み書きが可能 Realtime Database Firestore Storage
Realtime Databaseのセキュリティルール
Realtime Databaseとは - 書き込んだ内容をリアルタイムに同期してくれるデータベース - オフライン時でも書き込めるのでデベロッパーはネットワークを意識せず オンラインアプリが作れる。 - ゲームやチャットを作成するのに向いている -
以降、Realtime DBと呼ぶ
Realtime DBのルールはJSONで書いていく
全体公開
条件式を使ったデータの検証
上層でmatchすると下階層も同じルールが適用される
$otherを使ったKeyの制御 意図しないプロパティを書き込まれないために利用
Queryの制限 取得できる件数を制限できる。 例は100件まで
まぁぶっちゃけJSONで書くの辛い
辛いポイント - コメントが書けない - 関数がない - 型がない - 条件式部分にハイライトがない
そのための Bolt
Boltとは - Realtime DBのセキュリティルールを生成するための独自の言語 - コメントを書いたり関数の定義ができる - TypeScriptの様な型が定義ができる - https://github.com/firebase/bolt
None
Cloud Storageのセキュリティルール
Cloud Storage とは - 画像、動画などサイズの大きいデータを保存するためのストレージ - SDKを通してクライアントから直接アップロードできる - セキュリティルールはJSONじゃなくて独自言語で記述できる -
コメントもあるし関数も定義できる - readはgetとlistに分割できる - writeはcreate,update,deleteに分割できる
None
注意点
GCSのアクセス制御と同期はしない resource.data.visibility == 'public' だと read: if false; でもURL経由から読み 取れる。
GCSの機能のため 詳しくは アクセス制御オプション 参照
Cloud Firestoreのセキュリティルール
Cloud Firestoreとは - Realtime DBの次世代のドキュメント指向データーベース - 基本Realtime DBと同じことができる - クエリーが強化されてたり、バックエンドはSpannerで作られているので
インフラ面の安定感もある
Realtime DBとの違い (セキュリティ) - JSONじゃなくてStorageと同じ独自言語 - セキュリティルールとIndexの設定が分離 - IAMの設定もできる -
ワイルドカードを除きルールがサブコレクションに適用されない - readはgetとlistに分割できる - writeはcreate,update,deleteに分割できる
None
Queryの制限 取得できる件数を10件に制限する allow list: if request.query.limit <= 10
現在データベースにあるドキュメントの評価 allow write: if get(/databases/$(database)/documents/games/$( game)).data.referee == request.auth.uid; アクセスしようとしてるところのはresourceで取得できるが、 それ以外のところはget()で取得する。
get()やexists()は呼び出し回数に制限やreadの費用が掛かる。
protobuf-rules-gen
protobuf-rules-gen https://github.com/firebase/protobuf-rules-gen protocol bufferの定義から型検査をしてくれる セキュリティルールを生成するprotocのプラグイン
まとめ - セキュリティルールは必ず設定しよう - シミュレータやE2E Testを活用して十分にテストしよう
Enjoy @k2wanko
参考 https://firebase.google.com/docs/database/security/ https://firebase.google.com/docs/storage/security https://firebase.google.com/docs/firestore/security/overview https://firebase.google.com/docs/firestore/security/secure-data