🔐

【DAY69】FirebaseとSpring Bootで考えるセキュリティ強化

に公開

はじめに

最近、自分の作ってきた Spring Boot のアプリケーションや Firebase を使った小規模なシステムを振り返りながら改修を進めている。どちらも「ログイン機能」や「データ管理」といった基本的な機能を実装できるが、その際に常に意識すべきなのが セキュリティ だ。無料枠のFirebaseだけでは完璧に守れない部分もあるし、Spring Bootのように自分で制御できる環境でこそ考えられる対策もある。今回は、最近取り組んでいる改修を通して感じた Firebaseのセキュリティ強化ポイント を整理してみたい。


Firebaseにおける基本のセキュリティ

Firebaseは便利で手軽に使える反面、設定を疎かにすると 誰でも読み書きできる状態 になってしまう。特にFirestoreやRealtime Databaseでは、ルール設定が甘いと 不正アクセス が簡単に行われてしまう。まず意識すべき基本は以下の3つだ。

  1. Authenticationの利用
    匿名ユーザーを許可しない。Google認証やメールアドレス認証などを必須化する。

  2. Databaseルールの明確化
    read / write ルールを明確に設定し、特定のUIDやRoleを持ったユーザーのみ操作可能にする。

  3. Storageルールの制御
    画像やファイルをアップロードできる場合は、認証済みユーザーのみに限定する。

これらをしっかり設定するだけで、無差別なアクセスの多くを防ぐことができる。


よくある脆弱性と対策

Firebaseの無料利用では「セキュリティが甘いプロジェクト」が多い。よくある失敗例と対策を簡単にまとめる。

  • 失敗例1: ルールを true にしたままデプロイ
    → 対策: 開発時と本番用でルールを切り替える仕組みを作る。

  • 失敗例2: クライアント側でのみチェック
    → 対策: サーバー側(Spring BootやCloud Functions)でも検証処理を行い、二重チェックを徹底。

  • 失敗例3: ユーザー権限の管理が曖昧
    → 対策: カスタムClaimsを使って、管理者・一般ユーザーなど明確に権限分けをする。


Spring Bootとの違いから考える

Spring Bootで作る場合、セッション管理やJWT を自分で制御できる。細かいセキュリティ設定(CORS、CSRF、パスワードハッシュ化など)も可能だ。対してFirebaseは「サーバーレスで便利」だが、ルールの設定次第で大きくセキュリティが変わる。

つまり、

  • Spring Boot: 開発者が責任を持ってセキュリティを実装する
  • Firebase: ルールを正しく設定しなければ即脆弱になる

この違いを意識しながら、システムに応じて使い分けることが重要になる。


改修の取り組み

自分の最近の改修では、Firebaseを使ったログイン・投稿・検索機能のWebシステムに以下を追加している。

  • データベースルールを「UID単位」で限定
  • 投稿削除は「作成者本人のみ」に制御
  • 検索ログの保存を認証済みユーザー限定に変更
  • Cloud Functionsを使って「ログ監視」を追加

これらは小さな改善だが、使えば使うほど セキュリティの抜け道をなくす作業 が必要になると実感している。


まとめ

FirebaseもSpring Bootも、それぞれ強みと弱みがある。特にFirebaseでは「便利だから安心」という考えは危険で、ルール設定と権限管理をどこまで詰められるか がセキュリティの肝になる。これからも自分の改修では「まずセキュリティを強化する」という姿勢を続け、簡単なシステムでも安全に運用できる形を意識していきたい。


GitHubで編集を提案

Discussion