Flutterで不正アクセス対策を強化!firebase_app_checkパッケージ

Firebaseを利用したFlutterアプリでは、

  • Firebase Authentication
  • Cloud Firestore
  • Cloud Storage
  • Cloud Functions

などを簡単に利用できます。

しかし、Firebaseへアクセスできるのは「自分のアプリ」だけとは限りません。

悪意のある第三者が、

  • APIを直接叩く
  • 改造アプリからアクセスする
  • Botで大量リクエストを送る

といった攻撃を行う可能性があります。

そこで活躍するのが Firebase App Check です。

Flutterでは firebase_app_check パッケージを利用することで、正規のアプリからのアクセスのみをFirebaseサービスへ許可できるようになります。


Firebase App Checkとは?

Firebase App Checkは、

「Firebaseへアクセスしているのが本当にあなたのアプリなのか」を検証する仕組みです。

例えば通常の構成では、

Flutterアプリ
    ↓
Cloud Firestore

となります。

しかしApp Checkを有効化すると、

Flutterアプリ
    ↓
App Checkトークン取得
    ↓
Cloud Firestore

という流れになります。

Firebaseは送信されたApp Checkトークンを検証し、

  • 正規アプリ
  • 改造されていないアプリ
  • 正常な実行環境

であることを確認できた場合のみアクセスを許可します。


App Checkで防げること

App Checkを導入することで、次のような不正利用を軽減できます。

  • Firebase APIの不正利用
  • Botによる大量アクセス
  • 改造アプリからのアクセス
  • APIキーだけを利用した攻撃
  • 不正な課金(Billing Fraud)

なお、App Checkは認証機能ではありません。

ユーザー本人かどうかを確認するのではなく、

「アクセスしているアプリが正規のものか」を確認する機能です。


firebase_app_checkとは?

firebase_app_checkは、FlutterFire公式が提供するFirebase App Check用プラグインです。

Android・iOS・Web・macOS・Windowsに対応しており、Flutterから簡単にApp Checkを利用できます。


インストール

まずは pubspec.yaml に追加します。

dependencies:
  firebase_app_check: ^0.4.5

続いて、

flutter pub get

を実行します。


初期化

Firebase初期化後にApp Checkを有効化します。

await Firebase.initializeApp();

await FirebaseAppCheck.instance.activate(
  androidProvider: AndroidProvider.playIntegrity,
  appleProvider: AppleProvider.appAttest,
);

これだけでApp Checkが有効になります。


プラットフォームごとのプロバイダー

App CheckはOSごとに異なる認証方式を利用します。

Android

推奨は Play Integrity API です。

androidProvider:
    AndroidProvider.playIntegrity

Google Play経由で配布された正規アプリかどうかなどを検証できます。


iOS

推奨は App Attest です。

appleProvider:
    AppleProvider.appAttest

対応していない端末では、

AppleProvider.appAttestWithDeviceCheckFallback

を利用することでDeviceCheckへフォールバックできます。


Web

WebではreCAPTCHAを利用します。

await FirebaseAppCheck.instance.activate(
  webProvider: ReCaptchaV3Provider(
    'YOUR_SITE_KEY',
  ),
);

Botによるアクセスを防止できます。


Debug Provider

開発中はPlay IntegrityやApp Attestを利用できないケースがあります。

そのためDebug Providerが用意されています。

例(Android):

await FirebaseAppCheck.instance.activate(
  androidProvider:
      AndroidProvider.debug,
);

デバッグビルドでのみ利用し、本番では必ず正式なProviderへ切り替えましょう。


App Checkを有効にするとどうなる?

例えばCloud FirestoreでApp Checkを必須にすると、

App Checkあり

Flutterアプリ
↓
App Checkトークン
↓
Cloud Firestore
↓
アクセス成功

App Checkなし

curl
Postman
改造アプリ
↓
Cloud Firestore
↓
拒否

Firebase Console側でApp Checkを強制(Enforce)すると、トークンを持たないリクエストは拒否されます。


対応しているFirebaseサービス

App Checkは多くのFirebaseサービスと連携できます。

主な対応サービスは以下です。

  • Cloud Firestore
  • Realtime Database
  • Cloud Storage
  • Cloud Functions
  • Authentication(一部機能)
  • Vertex AI in Firebase

利用前に各サービスがApp Checkをサポートしているか確認しましょう。


導入時の注意点

Firebase Console側の設定も必要

Flutter側で初期化するだけでは有効になりません。

Firebase Consoleで、

  • App Checkを有効化
  • Providerを設定
  • Enforcementを有効化

する必要があります。


いきなりEnforceしない

本番運用中のアプリでは、最初から強制モードにすると古いバージョンのアプリなどがアクセスできなくなる可能性があります。

まずは Monitor(監視)モード で問題がないことを確認し、その後Enforceへ切り替えるのがおすすめです。


App Checkだけでは認証にならない

App Checkは「正規アプリかどうか」を確認する仕組みです。

そのため、

  • Firebase Authentication
  • Firestore Security Rules

などと組み合わせて利用することが重要です。


メリット

Firebaseを不正利用されにくくなる

APIキーだけではアクセスできなくなるため、安全性が向上します。

FlutterFire公式

Firebase公式チームが提供・保守しています。

数行で導入できる

基本的な初期化は数行で完了します。

Firebase各サービスと連携

FirestoreやStorageなど複数のサービスで利用できます。


まとめ

firebase_app_checkは、FlutterアプリとFirebaseの間に「このアクセスは本当に正規アプリから来たものか」を確認する仕組みを追加できるFlutterFire公式パッケージです。

特に、

  • Firestoreを公開している
  • Cloud Functionsを利用している
  • Cloud Storageへアップロードしている
  • 多くのユーザーが利用するアプリ

では、導入する価値が非常に高い機能と言えるでしょう。

Firebase Authenticationは「ユーザー」を認証し、App Checkは「アプリ」を認証します。

この2つを組み合わせることで、より安全なFlutterアプリを構築できます。

タイトルとURLをコピーしました