Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Firebase Security Rules
Search
k2wanko
July 02, 2018
6k
6
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Firebase Security Rules
https://firebase-community.connpass.com/event/89302/
k2wanko
July 02, 2018
More Decks by k2wanko
See All by k2wanko
Sales AI Cloud "ailead" TSConfig Strictly Adopted / セールスAIクラウド「ailead」の TSConfig厳格化対応した話 /
k2wanko
4
2k
Google Analytics for Firebaseを 使うときに把握しておきたいこと / Keep in mind when using Google Analytics for Firebase
k2wanko
2
540
パスワードのない未来のための Firebaseで実装するFIDO2 / FIDO2 actualized by Firebase for the password-less future
k2wanko
5
2.6k
Firebase Auth& Performance Monitoring
k2wanko
0
390
What's New Firebase 2019 Q1 #FJUG #io19jp
k2wanko
5
2.7k
Firebase for Grow
k2wanko
5
1k
gosecを試してみた話 / try gosec
k2wanko
0
3.8k
最近のFirebase / Recent Firebase
k2wanko
4
1.7k
Firebase Japan User Group Introduction 2018 #FJUG
k2wanko
0
650
Featured
See All Featured
Why You Should Never Use an ORM
jnunemaker
PRO
61
10k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
A Tale of Four Properties
chriscoyier
163
24k
Building a Scalable Design System with Sketch
lauravandoore
464
34k
How GitHub (no longer) Works
holman
316
150k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
300
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
520
Chasing Engaging Ingredients in Design
codingconduct
0
310
Building an army of robots
kneath
307
46k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
800
Producing Creativity
orderedlist
PRO
348
41k
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