先日、リリースしたFlutterアプリをGithubに公開しました。
個人でしっかり作成したアプリを公開するのは初めてだったので、
各種サービスへの接続情報や機密情報の取り扱いであったり、セキュリティの設定で悩んだので、
備忘録もかねてまとめたいと思います。
利用しているサービスによって設定の要否が変わってくると思うので、
分類別に記載していきます。
公開したソースコード
🔥Firebase
全般 (App Check)
Firebaseを利用している場合、基本的にはApp Checkを適用することをおすすめします。
App Checkの機能や設定方法については、こちらの記事が大変参考になりました。
Webの対応についても公式ドキュメントに沿ってやれば問題なく行うことが出来ます。
Cloud Functionsにも適用可能なので、適用しておきましょう。
執筆時点(2023/11/15)では、WebのreCAPTCHA Enterpriseにバグがあるようで適用すると動かなくなりました。
状況を確認して適用して下さい。
Cloud Firestore / Firebase Storage (セキュリティルール)
ソースを公開しなくても必要ですが、公開の前にあらためて見直しした方がいいと思います。
セキュリティルールのためにドキュメント構造自体を変更する必要も出てくるので、
早い段階でセキュリティを意識して設計を組むことをおすすめします。
セキュリティルールについてはこちらの記事を参考にしました。
Firebase Storageのルールについては、
Firestoreのデータ参照などが必要でしたので、こちらの記事を参考にしました。
Firebase Auth (with Identity Platform)
料金プランが変わってしまいますが、
Identity Platformへのアップグレードをおすすめします。
認証方法が広く選択できることもありますが、
App Checkを適用する場合に必須要件となることが一番の理由になります。
通常のFirebase Authとの違いについては、こちらのドキュメントを参照して下さい。
💻Flutter
接続情報/設定ファイル
アプリをリリースする以上、完全に非公開にすることは出来ませんが、
Github上で管理対象外に設定したり、難読化したり、ある程度のセキュリティを担保できます。
対応は大きく分けて3種類行いました。
.gitignore
業務でGitを利用していればアタリマエの話ではありますが、
アクセスキーなどの接続情報や設定ファイルについては、.gitignore
に設定して管理対象外にしておきましょう。
FirebaseのAPIキーなどは公開しても問題ないのですが、
App Checkを設定していなかったり、セキュリティルールが不足していた場合に簡単にアクセス出来てしまうので、
私はGithub上には公開しないようにしています。
# アクセスキーなどの接続/設定ファイル
ExportOptions.plist
dart_defines/**
scripts/**
GoogleService-Info.plist
google-services.json
env*.g.dart
firebase_options*.dart
firebase_app_id_file.json
Envied (難読化)
設定ファイルの難読化を行ってくれます。
「難読化すれば全部あげて大丈夫🤪」というわけではなく、
あくまでリリースした資産をデコンパイルされた場合の保険です。
Enviedで難読化したとしても、
生成したファイルをGithub上などに公開すると簡単に復元出来てしまうので注意が必要です。
導入はとても簡単で、パッケージの利用方法で完結してます。
補足としては以下の点のみです。
- 定義ファイルに型を指定する必要がある
- 難読化(
obfuscate
)を指定する場合は定数利用できなくなる
公開リポジトリでも利用していますので、参考になれば幸いです。
Secret scanning (Githubの設定)
キチゲ解放のためにAPIキーをプッシュしたくなる時ありますよね
そんな時に備えて、
Github上でもSecret scanningを設定しました。
すべてのアクセスキーが100%防げるかどうかはわかりませんが、
プッシュ操作自体をブロックすることも可能なので、念のため設定しました。
🙇最後に
最後までお読み頂きありがとうございました。
セキュリティ対策はどこまでやっても不安が拭えないと思います。
これからアプリを作成する方や、ソースを公開したいと思っている方に少しでも参考になれば幸いです。
また、対策に不備や不足などありましたらご指摘下さい。