Webセキュリティの小部屋

Twitter のフォローはこちらから Facebook ページはこちら Google+ページはこちら RSSフィードのご登録はこちらから
公開日:2013年7月29日
最終更新日:2013年12月26日

JSON セキュリティ:WCF で JSON.NET を使う

JSON のセキュリティ対策は、以下の記事に記載した通りですが、これを ASP.NET で実現するにはどうしたらよいでしょうか。この記事では、JSON セキュリティ対策のサンプルプログラムを提示します。

ASP.NET で JSON データを返す Web サービスを作成するには、.NET Framework 3.0 から提供されている WCF(Windows Communication Foundation) を使用します。

また、ASP.NET 内のデータは .NET のクラスを使用しますが、クラスのインスタンスを JSON の形式に変換するのに、今回はオープンソースの JSON.NET を使用します。JSON.NET は、.NET Framework 2.0 以降で動作します。

概要

この記事で作成する WCF の Web サービスでは、JSON.NET を使用して .NET のインスタンスを JSON に変換します。

クライアントからリクエストを受け取ると、Web サービスは該当するデータを検索して、一致したデータを JSON の形式でクライアントに返します。

呼び出し元のクライアントは、jQuery と prototype.js を使用した HTML を作成します。

準備

今回は、Visual Studio 2012 for Web を使用して Web サービスを作成しますが、その前に NuGet を使用して、JSON.NET, jQuery, prototype.js のパッケージをインストールしておきます。

WCF Web サービスの作成

WCF の Web サービスを作成するには、WCF のインターフェース、インターフェースの実装、Web サービスの定義が必要です。また、データクラスとして Person クラスを作成します。

WCF のインターフェース

GET リクエストでパラメーターを受け付け、JSON で値を返すよう定義します。
・IService1.cs (C#)

・IService1.vb(VB.NET)

インターフェースの実装

まず、リクエストヘッダーを見て XMLHttpRequest のリクエストかチェックします。そして、受け取ったパラメーターを条件にしてデータを検索し、一致したデータを JSON に変換して値を返します。また、セキュリティ上必要なレスポンスヘッダーも付与します。

・Service1.svc.cs(C#)

・Service1.svc.vb(VB.NET)

Web サービスの定義

Service1.svc ファイルをマークアップで表示し、Factory="System. ServiceModel. Activation. WebServiceHostFactory" を追加します。

・C#

・VB.NET

データクラスの作成

Person クラスを作成します。

・Person.cs (C#)

・Person.vb(VB.NET)

クライアントの作成

Web サービスにリクエストを送信し、レスポンスのデータを表示するクライアントを作成します。レスポンスのデータを表示する際、HTML エスケープしていることに注意してください。

jQuery で作成

実行結果は、以下のようになります。

jQuery によって、以下の行がリクエストヘッダーに追加されていることに注意してください。

  • X-Requested-With: XMLHttpRequest

以下の2行が、レスポンスヘッダー追加されていることに注意してください。

  • Content-Type: application/json; charset=utf-8
  • X-Content-Type-Options: nosniff

prototype.js で作成

実行結果は、以下のようになります。

prototype.js によって、以下の行がリクエストヘッダー追加されていることに注意してください。

  • X-Requested-With: XMLHttpRequest

以下の2行がレスポンスヘッダー追加されていることに注意してください。

  • Content-Type: application/json; charset=utf-8
  • X-Content-Type-Options: nosniff


スポンサーリンク




カテゴリー:Webアプリケーションセキュリティ

Twitter でも、いろんな情報を発信しています。



コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA