5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Flutter】APIキーの安全な管理

Last updated at Posted at 2023-11-23

※「安全な管理」と書きましたが100%というわけではありません。

1.導入

以前flutter_dotenvパッケージを使用した以下記事を書きましたが、セキュリティリスク等の観点で、私の知識不足がございました。

そのため、今度はENViedパッケージを使用してAPIキーを読み込む方法を書きます。

2.なぜdotenvは避けるべきか

flutter_dotenvを使用すると、APIキーはアプリのアセットフォルダに「平文」(暗号化されていないテキスト)で保存されます。

技術的な知識がある人なら、アプリのファイルを調べてAPIキーを見つけることができます。

そのため、APIキーが容易にアクセス可能な状態になり、セキュリティ上の問題が生じる可能性があります。

3.ENViedの紹介

そこでENViedパッケージの登場です。

こちらは環境変数(例えばAPIキーなど)の管理をより安全かつ効率的に行うために設計されています。

このパッケージは、環境変数をコード内で直接使用する代わりに、コンパイル時にこれらの変数をアプリケーションに組み込むことができます。

これにより、変数が平文でアプリ内に保存されるのを防ぎます。

4.ENViedの使い方

公式を参考に説明します。

①必要なパッケージのインストール

flutter pub add envied
flutter pub add --dev build_runner
flutter pub add --dev envied_generator

②.envファイルの作成

ルートディレクトリの直下に.envファイルを作成します。

③APIキー等を記述

作成した.envファイルに以下のように記載します。

KEY=******************************

④環境変数を取り込むクラスを作成

プロジェクト下にenvフォルダを作成し、その中にenv.dartを作成します。
※一例です

├── lib
│   ├── main.dart
│   └── env
│        └── env.dart

env.dart内に以下のコードを記入します。

import 'package:envied/envied.dart';

part 'env.g.dart';

@Envied(path: '.env')
abstract class Env {
  @EnviedField(varName: 'KEY', obfuscate: true)
  static String key = _Env.key;
}

varNameには.envファイルで記述した名前と同じものにします。
obfuscate: trueにすることで難読化をします。

⑤ジェネレーターを実行します。

flutter pub run build_runner build --delete-conflicting-outputs

env.g.dartが生成されます。

⑥難読化したAPIKeyの使用方法

APIKeyを使用したいファイルに以下を追加

import 'env/env.dart';

その後、Envクラスを使用して環境変数にアクセスできます。

print(Env.key); //APIKEY

⑦.gitignoreへの追加

最後にGitで公開されないように.gitignoreに.envファイルとenv.g.dartファイルを追加します。

*.env
*env.g.dart

ただ絶対に安心というものでもありません。

参考

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?