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
RailsConf 2023
tenderlove
29
940
Typedesign – Prime Four
hannesfritz
40
2.4k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
191
16k
Side Projects
sachag
452
42k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
10
810
YesSQL, Process and Tooling at Scale
rocio
169
14k
Facilitating Awesome Meetings
lara
50
6.1k
A Tale of Four Properties
chriscoyier
157
23k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
111
49k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
5
440
Building Adaptive Systems
keathley
38
2.3k
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