Media API は HTTP 経由でアクセスする REST ベースのサービスで、クライアントサイドおよびサーバーサイド アプリケーションとの連携が非常に容易にできます。しかし、システム設計当初からセキュリティを考慮していなかった場合には、この容易さがアプリケーションの弱点となることがわかっています。
いかなる Web アプリケーション開発でも、セキュリティの設計は欠かせません。具体的には、システム内の機密情報やリソースを特定し、それらに対するアクセスをどこでどのように行うかを決定し、その場所とアクセス制御により効果的に無許可のユーザーを排除し、情報をセキュアに保つ、ということです。
このトピックで推奨するのは、アプリケーションにおける Media API とのインタラクションに関する事項であり、アプリケーションの他の部分はすでにセキュアな状態であることを前提としています。
Brightcove API におけるセキュリティの要は、API トークンです。API トークンは API 呼び出しに付加する英数字の文字列で、その目的は、使用しているアプリケーションをシステムに認証させること、およびトランザクションを許可することです。用途別に次の 3 種類のトークンがあります。
詳細は、Media API トークンの管理を参照してください。
Media API ではトークンの信頼性を検証する際に、そのトークンの存在と有効性以外はチェックしないため、トークンを持っていれば誰でも、対象アカウントに対する API 要求が可能です。
Media 読み取り API は読み取り専用なので、リスクは限定的ですが、それでも無視はできません。リスクにさらされるのはメタデータとアセットです。これには公開期間外のコンテンツや、一般公開すべきでないコンテンツも含まれます。ハッカーはコンテンツへ直接アクセスして、検知されることなく、追跡不可能な方法で、簡単にコンテンツを取得できます。Media 書き込み API の場合は、書き込みメソッドで動画アセットの作成、変更、または削除ができるため、リスクはさらに深刻です。
クライアントサイドのスクリプティングには、ブラウザ自体もしくはブラウザ プラグインから実行するあらゆるスクリプト言語が含まれ、ActionScript、JavaScript、VBScript などが挙げられます。スクリプト ファイルはページ状態に連動し、通常はページの <head> セクションにロードされます。一般的にブラウザの所有者は、ブラウザがロードするものをすべて見ることができ、そしてスクリプト ファイルは通常、人が読めるプレーン テキストで記述されています。ここにトークンがあれば、誰でも入手できます。
クライアント スクリプトにトークンを置く方法に代わるのは、実際にそこには置かないということに尽きます。代わりに PHP などでシンプルなサーバーサイド スクリプトを作成し、API インターフェイスへの要求とその応答をプロキシします。さらにリスト表示されないように保護されたディレクトリにスクリプトを置くようにすれば、スクリプトがブラウザに直接ロードされることはありません。
トークンをサーバーサイド スクリプトに置けば、クライアントに置く場合に比べて、大幅にセキュリティが向上します。しかし、トークンがサーバーにある場合には、トークンを危険にさらさないようにする方法は他にもあります。
関数スクリプトからキーを取り出し、スクリプト本体よりもセキュリティの高いアクセス権で保護可能な設定ファイルに書き込みます。スクリプト ファイルは必要なときに動的インクルードで設定ファイルを取得できますが、ブラウザから設定ファイルに直接アクセスできる必要はありません。アクセスするのはスクリプトだからです。
この方法はコードをよりクリーンにできるため、特におすすめします。もしもトークンが危険にさらされ、新しいトークンの発行が必要になった場合には、新旧トークンの交換は通常よりも迅速に行います。
最後に、トークンにアクセスできる人数が少ないほど、不適切な管理でトークンが危険にさらされる可能性が低くなることを覚えておいてください。
トークンの傍受試行に対抗するため、API 要求を HTTP ではなく HTTPS 経由で行うことを検討してください。HTTPS を使用するのに必要なのは、http:// の代わりに https:// で API 呼び出しを行うことだけです。この「s」は「secure」を意味し、トークンも含めたトランザクションをブラウザで暗号化します。HTTPS を使用すると、サーバーとブラウザでトラフィックの暗号化と復号が行われるため、パフォーマンスには不利になります。