/nippo

This is a daily report app, which is also a sample app using Flutter and Firebase.

Primary LanguageDart

README

Flutter

NIPPO

  • 毎日の学びを、もっと楽しく、わかりやすく。
  • シンプルな日報投稿型のSNS
  • Flutter + Firebaseの学習用プロジェクト

View Demo

※デモは現在 #32 のため利用できません。

セットアップ

  1. .firebasercのデフォルトプロジェクトをご自身のFirebaseプロジェクトIDに変更してください。
{
  "projects": {
    "default": "nippo-e8922"
  }
}
  1. Firebaseプロジェクトに関する情報はgit管理対象外のため、下記コマンドにてお手元のFirebaseプロジェクトにてセットアップしてください。
flutterfire configure

機能要件

  1. 日報

    • 投稿された全ての日報が一覧で表示できる
    • 日報詳細画面で件名と全文が表示できる
    • プロフィール画面では選択されたユーザーの日報のみが一覧で表示できる
    • 自分の日報を作成できる
  2. 認証・ユーザー

    • Google認証でユーザー登録・ログインができる
    • ログアウトができる
    • ログインしているユーザーの名前,プロフィール画像,uidが表示できる
  3. 設定

    • 認証プロバイダおよび最終ログインなどのログイン情報が閲覧できる
    • アプリケーション情報や来線図情報が閲覧できる

セキュリティ周り

本レポジトリはFirebase APIキーを公開していますが、データリソースへのアクセスを筆頭に、APIの不正利用からの保護を行っているため、第三者からの意図しないリクエストで超過料金が請求されるなどのリスクが無いように配慮しています。また、第三者からの攻撃だけでなく開発者の実装ミス(ex. Cloud Functionsの無限ループミス)などによる事故に気づけるよう、Cloud Billingの予算アラートを設定し気付けるようにしています。

  • APIキーの制限
  • APIリソースの保護(App Check)
  • データの保護(Security Rule)

※本アプリケーションでは未設定ですが、Using Cloud Monitoring to monitor App Check and Security Rules のようにCloud Monitoringで閾値を設定し、Slackなどにレポートする形も良さそうです。

APIキーの制限

各プラットフォームのAPIキーが利用可能なドメイン等をホワイトリストで管理し、アクセス元を制限しています。具体的には、Google Cloud コンソールの認証情報によりAPIキーを制限を設定しています。これにより、ホワイトリスト以外のクライアントからAPIキーが利用されるのを防ぎます。

プラットフォーム 制限内容
iOS+,Android com.htsuruo.nippoのバンドルID,パッケージ名のみ利用を制限
Web Firebase Hostingのデフォルトサイトおよび独自のドメインに制限

APIリソースの保護

Firebase App Checkを有効化(Enforcement)し、本アプリケーションで有効化しているAPIリソースに対する不正なAPIアクセスをブロックしています。APIキーの制限ではドメインなりすましやシミュレータ実行で迂回されてしまう可能性がありますが、App Checkでは検証された実機以外からのアクセスを受け付けません。

データの保護

本アプリケーションはCloud Firestore を利用しているため、セキュリティルールによって保護しています。 サービス提供において最も重要なインシデントである、ユーザー情報の漏洩やサービスの深刻な破壊がされるリスクを防ぎます。 また、アプリケーションの利用者が他人のデータを勝手に編集・削除するような、想定されない操作を制限しアプリケーションのデータを健全に保ちます。また、単体テストにて意図通りのルール設定になっていることを検証済です。