連載 XML Webサービスのセキュリティ実装

第2回 承認と偽装によるアクセス制御

矢嶋 聡
2003/05/28
Page1 Page2

 
 本記事は、インプレスが発行する書籍『VB.NETによるXML Webサービス開発』の第10章「XML Webサービスのセキュリティ実装」を、許可を得て転載したものです。同書籍に関する詳しい情報については、本記事の最後に掲載しています。

2-1 URL承認(URL Authorization)

 前回で説明したように、「承認(Authorization)」とは、「認証(Authentication)」によって識別されたユーザーに対して、リソースへのアクセスを許可したり拒否したりする制御のことです(ドキュメントによっては、Authorizationを「認定」と訳す場合もあります)。

 ASP.NETの承認には、URL承認とファイル承認の2種類が用意されており、本項では、URL承認について説明します。

 まず、承認(Authorization)を説明する前に、あらためて認証(Authentication)の役割を考えてみます。例えば、「http://localhost/WebSrv1/」にアクセスしてログオンしたユーザー、つまり認証を受けたユーザーは、特別な制限がない限り、WebSrv1フォルダ以下のファイルやサブフォルダすべてにアクセスすることができます。認証は、ユーザーを識別する入り口のようなもので、いったん入り口を通過すれば、どんなファイルもアクセスでき、でたらめなファイル名を入力してファイル名がヒットすれば、そのファイルを見ることができます。しかし、サイトの運営者によっては、WebSrv1フォルダ内の特定のサブフォルダは、管理者以外はアクセスを禁止したいという場合があるかもしれません。いったん認証を受けた後は、どのように制御すればよいでしょう。

 認証を受けたユーザーに、フォルダやファイル単位のアクセス制御をするには、「承認」という仕組みが必要になります。URL承認は、文字通り特定のURL(例えば、特定のサブフォルダ)に対してアクセスを制御するセキュリティです。

 URL承認の構成は、Web.configファイルの中の<authorization>要素に記述します。Web.config構成ファイルは、WebSrv1フォルダのようなアプリケーションのルート・フォルダだけでなく、配下のサブフォルダごとに配置することができ、サブフォルダごとに、アクセスの許可、禁止を指定することができます。

 この設定は次のように、<authorization>要素の中に子要素として<allow>要素と<deny>要素を列挙していきます。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.web>
    <authorization>
        <allow users="mauna\administrator" />
        <allow roles="mauna\mygroup, mauna\groupb" />
        <deny users="*" />
    </authorization>
  </system.web>
</configuration>
例 Web.configファイル<authorization>要素に記述されたURL承認

 <allow>要素のusers属性にはアクセスを許可するユーザー名、roles属性には許可するユーザー・グループ名を指定します。各要素ごとのユーザー名は、カンマ区切りで複数のユーザーを列挙することもできます。<deny>要素はその反対で、許可しないユーザーやユーザー・グループを記述します。この設定は、このWeb.configファイルを配置したフォルダに作用します。フォルダごとに、異なるWeb.configファイルを置けば、異なる制御ができます。

 なお、ユーザー名が「mauna\administrator」になっていますが、これは「サーバ名 + ユーザー名」の意味です。この表記は、どんな認証方法をするかによって異なります。今回は、IISの基本認証を利用しており、基本認証は既定ではローカル・サーバのWindowsユーザー・アカウントを利用するために、この表記になります。仮に、フォーム認証など固有の認証方法を採用するのであれば、サーバ名部分は不要です(Windows 2000で実験する場合、予約済みのユーザーにはサーバ名でなく「builtin\〜」と付けてください)。

 この<allow>要素と<deny>要素の記述は、現在ログオンしているユーザーに関して、上から順番に評価され、ユーザー名やグループ名がヒットした行が採用されます。もし、ヒットした行が見付からない場合、既定ではallowなのでアクセスできます。

 例えば、この例の最初の<allow>要素では、administratorに許可を出しています。そのため、administratorに関しては、以降の行は評価されません。denyの「users="*"」のアスタリスクは、すべての人を表すワイルド・カードであり、<allow>要素に該当しない人は、<deny>で評価されるので、この例では、<allow>で許可されない人(またはグループ)は、すべてアクセスを拒否します。逆に、もし<deny users="*"/>という記述がないと、既定ではすべての人がアクセスできるので注意してください。

 ここで、WebSrv1フォルダの下に「sub1」というサブフォルダを作成して実験してみましょう。まず、サブフォルダsub1を作成します。物理パスは\Inetpub\wwwroot\WebSrv1\Sub1になります。エクスプローラ上からも作成できますが、WebSrv1プロジェクトを開いて、ソリューション・エクスプローラのツリーからも作成できます。ソリューション・エクスプローラでフォルダを作る場合、WebSrv1を右クリックして、ショートカット・メニューから[追加]−[新しいフォルダ]を選び、sub1という名前を付けます。

 そして、administratorにアクセスを許可した前述のWeb.configファイルを作成して、sub1に保管してみましょう(もちろん、サーバ名部分「mauna\〜」は適切なサーバ名に変更してください)。Visual Studio .NETでは、メニューから[ファイル]−[新規作成]−[ファイル]を選び、ファイルを作成した後、前述の物理パスを保存先として保存してください。

 さらに、単一ファイルの適当なXML WebサービスService1.asmxを、同じsub1フォルダにコピーしてください*1。ソリューション・エクスプローラから見た場合、次のように見えるはずです(sub1フォルダのService1.asmxはプロジェクトに含める必要はありません。以下の例は、プロジェクトに含めていないので、Service1.asmxのアイコンは白抜きになっています(図7)。プロジェクトに含まれないファイルを表示するには、ソリューション・エクスプローラ上部の[すべてのファイルを表示]ボタンをクリックしておく必要があります)。

*1 編集部注: 拡張子「.asmx」のファイルはXML Webサービスを実装しています。転載元の「VB.NETによるXML Webサービス開発」では、第6章「ASP.NET入門」で単一ファイルのXML Webサービスの作成について解説しています。
 
図7 sub1フォルダを作成

 ここで、新規にInternet Explorerを開いて、さまざまなアカウントでログオンし、以下の2つのアドレスにアクセスしてみてください。

(1)http://localhost/WebSrv1/Service1.asmx
(2)http://localhost/WebSrv1/sub1/Service1.asmx

 (1)はそのマシンで有効なアカウントであれば誰でもアクセスできますが、(2)はadministratorでないとアクセスできません。(1)のアドレスでadministrator以外のアカウントを使ってログオンした後、そのままブラウザのアドレスを(2)に変更してアクセスを試みると、アクセスは失敗します。その結果、Internet Explorerは再度ログオン・ダイアログを表示します(なお、ログオン・ダイアログを表示するのはブラウザの仕様です。プロキシ・クラスであれば、単にアクセスに失敗します)。

 なお、Web.configファイルでは、以下のように<location>要素を使ってファイル単位にアクセス制御を指定することも可能です。詳しくは、関連ドキュメントをご覧ください。

<location path="Menu1.aspx"> ←サブフォルダまたはファイルを指定
    <system.web>
        <authorization>
            <allow users="mauna\administrator" />
            <deny users="*" />
        </authorization>
    </system.web>
</location>
例 特定ファイル(Menu1.aspx)だけを制御する

 以上、URL承認の説明をしました。2-2「ファイル承認」では、ファイル承認について説明します。


 INDEX
  連載 XML Webサービスのセキュリティ実装
  第2回 承認と偽装によるアクセス制御
  2-1 URL承認(URL Authorization)
    2-2 ファイル承認
 
インデックス・ページヘ  「連載 XML Webサービスのセキュリティ実装」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間