NCMBではアプリケーションキーとクライアントキーを使ってサーバーにあるデータを操作します。この2つのキーが漏洩すると、どういった問題が起こるでしょうか。
MonacaアプリではHTMLやJavaScriptでアプリのコードを書くので、アプリ内部のロジックを見られてしまう可能性があります。この記事ではそうした漏洩を防ぐ、または漏洩した時に起こるリスクについて解説します。
アプリを暗号化する
MonacaではBusinessプラン、Enterpriseプランにてアプリロジック暗号化機能を提供しています(Businessプランは1アプリ年間9万円)。このアプリロジック暗号化機能は、アプリをビルドする際にアプリのロジック(HTML、JavaScript、CSSファイル)を暗号化してくれます。
この暗号化によってアプリケーションキー、クライアントキーも暗号化されます。
キーの漏洩によって起こること
NCMBのアプリケーションキーはAPIアクセス時のヘッダーに埋め込まれています。そのため、アプリケーションキーは公開情報と言えます。クライアントキーはAPIアクセス時に署名を生成する際に利用します。この2つのキーが漏洩すると、APIに自由にアクセスできます。
- データストアにクラスを作成する
- データストアにデータを追加する
- データを改ざんする
- プッシュ通知を作成する
この辺りが懸念するところでしょう。
データストアにクラスを作成する
NCMBの管理画面にて「アプリからのクラス作成」を無効にします。これでAPI操作によるクラス作成が防げます。アプリの中で必要なクラスはNCMBの管理画面であらかじめ作成しておけば、アプリの運用は問題ありません。
データストアにデータを追加する
NCMBの管理画面にてクラスのパーミッションを利用します。このパーミッションではクラスごとに読み込み、検索、更新、作成、削除、フィールド追加の可否を設定します。
データを不正に操作する場合には認証していないことが多いはずなので、全員(認証していないユーザー含む)の作成権限を外すことで安全になります。
データを改ざんする
データを不正に更新、削除を防ぐにはACL(アクセス権限)を設定します。自分の作成したデータつい手には自分だけ編集権限を付与したり、管理者グループだけ編集権限を付与します。
プッシュ通知を作成する
NCMBの管理画面にあるプッシュクラス パーミッションにて、SDKからの操作を「許可しない」に設定します。これで管理画面以外からプッシュ通知を作成できなくなります。なお、プッシュ通知を利用しない場合には管理画面にて、プッシュ通知を無効にしておくと良いでしょう。(なお、デフォルトでは無効となっています)
キーを再生成する
NCMBの管理画面にてアプリケーションキー、クライアントキーのそれぞれを再生成できます。
たとえば、クライアントキーだけをJSONにてファイルストアに保存し、アプリの実行時に取得する仕組みにすれば、定期的に再生成しても問題はないでしょう。そうすればクライアントキーが漏洩したとしても、一時的な不正利用の試みだけで済むでしょう。もちろんその場合も上記の対応は必要です。
まとめ
キーの漏洩は適切なアプリ設定と、ACLによって問題発生を防げます。開発時にはAPI経由でフィールドを作ったり、柔軟なデータ作成が必要になりますが、運用時には不用意なフィールド作成はされないようにした方が良いでしょう。同じようにデータの作成、更新権限なども分けておくことで、安全な運用が可能です。
今回紹介したことに注意して、MonacaアプリやPWA(Progressive Web Apps)でもNCMBを活用してください。