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
320
What's New Firebase 2019 Q1 #FJUG #io19jp
k2wanko
5
2.5k
Firebase for Grow
k2wanko
5
870
gosecを試してみた話 / try gosec
k2wanko
1
2.7k
最近のFirebase / Recent Firebase
k2wanko
4
1.5k
Firebase Japan User Group Introduction 2018 #FJUG
k2wanko
0
570
Featured
See All Featured
Typedesign – Prime Four
hannesfritz
39
2.4k
Reflections from 52 weeks, 52 projects
jeffersonlam
346
20k
Facilitating Awesome Meetings
lara
49
6k
Faster Mobile Websites
deanohume
304
30k
Imperfection Machines: The Place of Print at Facebook
scottboms
264
13k
[RailsConf 2023] Rails as a piece of cake
palkan
51
4.8k
Keith and Marios Guide to Fast Websites
keithpitt
408
22k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
6.9k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
The Cult of Friendly URLs
andyhume
78
6k
The Invisible Side of Design
smashingmag
297
50k
GraphQLの誤解/rethinking-graphql
sonatard
66
9.9k
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