JSON(JavaScript Object Notation)は、インタラクティブなWebおよびモバイルアプリケーション向けデータ形式として急速に普及しています。AJAX(Asynchronous JavaScript + XML)は、JavaScriptとXMLによる非同期通信として登場しましたが、現在ではJavaScriptとJSONによる非同期通信の実装が進んでいます。その理由には、JSONの方がXMLよりも効率的で軽量であること、JSONはJavaScriptに組み込みやすいこと(構文が類似している)があります。また、「人間が読みやすい」形式なので、REST APIユーザの間で人気があることも理由の1つです。

現在、REST/JSONはモバイルアプリケーションのベストプラクティスだと考えられています。XMLよりコンパクトなので、不安定な無線ネットワークでも帯域幅を節約できます。また、構文解析に必要なCPUやメモリ容量が少なくて済むので、モバイルデバイスのバッテリも長持ちします。実際、Twitter、Foursquare、Googleなど大手企業は、XML APIよりもJSONのみのAPIを多くの製品で実装しています。

このように、モバイル向けの動的なアプリケーションをJSON/RESTインターフェイスを使って開発しようという大きなトレンドが発生している中、見過ごされがちなのはセキュリティです。オリジナルのHTTPインターフェイスでセキュリティが確保されていたとしても、JSON/RESTインターフェイスでは正しく実装/テストされないケースが多々あります。

XMLには拡張性と名前空間という強みがあり、それ故にSOAアーキテクチャとWebサービスの実質的な標準になっています。バラクーダネットワークスは、XMLペイロードセキュリティのサポートでは長年の実績があり、最新のFirmware 8.0ではJSONペイロードのセキュリティ保護が追加されています。

では、JSONについて、次の非常に簡単なHTTP POST要求を使って説明しましょう。

{
"username": "John",
"password": "mypassword"
}

一般的なWebアプリケーションは、キーと値のペアで構成される構造型データを生成します。この例では、username=Johnのようになります。これによってキーや値は、URLクエリパラメータやFORMパラメータなどとして使用できるようになります。JSONのキー/値ペアに悪意のあるデータをインジェクトすれば、クエリやFORMパラメータを悪用した場合と同じ攻撃を仕掛けることができます。たとえば、Webアプリケーションがこの値を埋め込むSQLクエリを生成する場合、上記のJohnにSQLコマンドをアペンドすることにより、データベースの悪用が可能になります。

ファームウェア8.0以降のリリースでは、HTTP/Sサービスを新規作成すると、そのサービスのURL空間全体(/*)にデフォルトのJSONプロファイルが自動生成されます。要求のMIMEタイプでペイロードがJSONであることが指定されている場合、このプロファイルはJSONセキュリティポリシーを自動的に適用します。JSON以外のMIMEタイプについては、ポリシーは適用されないので、パフォーマンスに影響することもありません。JSONプロファイルは、[Webサイト]>[JSONセキュリティ]ページで確認できます。

1つのサービス(VIP)が複数のアプリケーションを処理し、それぞれ異なるJSONセキュリティ保護が必要な場合や、URLごとに異なるJSONセキュリティポリシーを適用したい場合には、[JSONプロファイルの追加]ダイアログボックスでJSONプロファイルを複数作成できます。

このダイアログボックスでは、SQLインジェクションやXSSなど、キー/値のペアで行う入力検証チェックを指定できます。 JSON形式のチェックは[JSONポリシー]コントロールで指定します。上の図では、「default-policy」に設定されています。このポリシーにはメインページの下からアクセスし、内容を表示および編集できます。

ポリシーでは、最大長、深さ、兄弟関係など、JSON形式固有のチェックを指定できます。

Barracuda Web Application Firewallについて詳しくは、こちらの製品ページをご覧ください。技術的な内容、モデル、ケーススタディなどが掲載されています。Barracuda Web Application Firewallは30日間無料でお試しいただけます。こちらからお申し込みください。

※本内容はBarracuda Product Blog 2015年6月24日Securing and Accelerating JSON/REST with Barracuda Web Application Firewall v8.0を翻訳したものです。

Neeraj Khandelwal

本稿は、バラクーダネットワークスのWebサイトに掲載されている『バラクーダラボ』7月14日付の記事の転載です。