backend(mBaaS)。料金eBookサポートセミナードキュメント2018-10-01クライアントキーを隠蔽してmBaaSを安全に使おう技術情報mBaaSはアプリケーションキーとクライアントキーの組み合わせによって認証を行っています。アプリケーションキーとクライアントキー、そしてACLを組み合わせることで安全にアプリのデータを保護しています。アプリケーションキーとクライアントキーが漏洩してしまうと、個人個人のデータ操作はできない(ACLを正しく設定していた場合)ものの、新規にデータを作成したり、検索などを行ってAPIを浪費できてしまう可能性があります。そこで今回はクライアントキーを隠蔽する方法について紹介します。内部で暗号化まとめアプリケーションキーは隠蔽できないアプリケーションキーはmBaaSにアクセスする際のヘッダーに埋め込まれます。そのため、アプリケーションキーを隠蔽するためにはmBaaSへのアクセスをすべてサーバサイドで行う必要があります。アプリとそのサーバとはどう接続するのでしょうか。その部分の設計が甘いとデータ操作できてしまう可能性があります。アプリとmBaaSの間にプロキシサーバ的なものを立てるのはあまり良い選択肢とは言えません。そのためクライアントキーの隠蔽が優先になります。クライアントキーの役割そもそもクライアントキーの役割はmBaaSへのリクエストが正しいものであると署名することにあります。それ以外では使われません。そのため署名処理を隠蔽化すれば良いだけです。隠蔽化は幾つかに分類されます。全体を暗号化/コンパイルアプリケーション全体をコンパイル、暗号化することでキーを隠蔽化できます。これはiOS/Android/Unityなどのネイティブアプリを生成するタイプで利用可能です。MonacaやWebアプリケーションでは容易ではありません。Monacaの場合は暗号化プラグインを使うことで、HTML/JavaScript/CSSなどを暗号化でき、これによってキーを隠蔽することもできます。mBaaSをWebアプリケーションで使う場合には選択できないでしょう。外部で暗号化サーバサイドで署名処理を行うことで、クライアントキーの隠蔽を行えます。この場合、サーバサイドに対して署名化して欲しい文字列をすべて送り、サーバ側で署名だけを生成してレスポンスを返すのが一般的です。署名するだけであれば、ごく簡単なコードなのでPHPやJava、Rubyなど言語を問わず利用可能です。問題点はネットワークアクセスが一回増えてしまうことでしょう。Webアプリケーションの場合はCORS対応のためにOPTIONリクエストも行われますので、一回の署名処理で二回のHTTPリクエストが発生します。オフライン時に署名処理がエラーになるという問題もありますが、mBaaS自体がオフラインでは使えないので問題にはならないでしょう。内部で暗号化WebアプリケーションやMonacaアプリの場合、WebAssemblyを使うことで署名処理をクライアントキーを隠蔽化して行えるようになります。SDKに多少手を加える必要がありますが、手軽な方式と言えます。署名処理は隠蔽化されても、JavaScriptのコードは見られる状態になっていますので注意が必要です。SDKをアップデートした際には同じようにWebAssemblyを使うように修正しなければなりません。まとめWebアプリケーションでmBaaSを使う場合には「内部で暗号化」するのがベストです。ついで「外部で暗号化」になるでしょう。iOS/Android/Unityであれば「全体をコンパイル」することで隠蔽化され、Monacaアプリであれば「全体を暗号化」するプラグインを用いるのが手軽です。クライアントキーを安全に運用し、セキュアな環境でmBaaSを利用してください。篤司NCMBエヴァンジェリスト。プログラマ、エンジニアとしていくつかの企業で働き、28歳のときに独立。2004年、まだ情報が少なかったオープンソースソフトの技術ブログ「MOONGIFT」を開設し、毎日情報を発信している。2013年に法人化、ビジネスとエンジニアを結ぶDXエージェンシー「DevRel」活動をスタート。Service)とは、スマートフォンアプリでよく利用される汎用的な機能をSDKとクラウドから提供するサービスです。backendのちょっと便利な使いかた・非公式SDKやアプリ開発の関連情報などをお届けするブログです。※記事内には、サポート対象外の内容も含みます。本ブログではコメント機能を公開しておりません。アプリ開発を行う上での課題解決には、ユーザーコミュニティやもくもく会などもご活用ください。LIMITEDスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。