現在オフラインです。再接続するためにインターネットの接続を待っています

お使いのブラウザーはサポートされていません

このサイトを利用するには、ブラウザーを更新する必要があります。

Internet Explorer を最新バージョンに更新する

データベースと ASP セッションを使用して ASP セキュリティを実装する方法

この記事は、以前は次の ID で公開されていました: JP299987
サポート期間が終了した「サポート技術情報」資料に関する免責事項
この資料は、マイクロソフトでサポートされていない製品について記述したものです。そのため、この資料は現状ベースで提供されており、今後更新されることはありません。
マイクロソフトでは、Microsoft Windows Server 2003 で実行される Microsoft インターネット インフォメーション サービス (IIS) 6.0 にアップグレードすることを、すべてのユーザーに強く推奨します。IIS 6.0 により、Web インフラストラクチャのセキュリティが大幅に強化されます。IIS のセキュリティ関連のトピックについては、次のマイクロソフト Web サイトを参照してください。
概要
この資料では、Active Server Pages (ASP) アプリケーションのためのフォーム ベースのセキュリティを実装する方法について、手順を追って説明します。このメカニズムは、アプリケーションの高度なセキュリティで保護されているときや、認証されたユーザーにのみアクセスを許可するときに使用できます。また、ユーザーが内部ドメインに属していない場合 (インターネット ユーザーなど) にも使用できます。このサンプルでは、データベースにユーザー情報を保存し、そのデータベースを使用してユーザーの検証を行います。

必要条件

  • Microsoft Windows NT 4.0 Workstation、Windows NT 4.0 Server、Windows 2000 Professional、Windows 2000 Server、Windows 2000 Advanced Server、または Microsoft Windows Server 2003
  • Windows NT 4.0 を実行するコンピュータの場合は Microsoft Internet Information Server (IIS) 4.0、Windows 2000 を実行するコンピュータの場合は Microsoft インターネット インフォメーション サービス (IIS) 5.0、Windows Server 2003 を実行するコンピュータの場合は Microsoft インターネット インフォメーション サービス (IIS) 6.0
  • Microsoft SQL Server 6.5 以降のバージョンの SQL Server

このアプリケーションの設計方法

ここでは、ASP Web アプリケーションにフォーム ベースのセキュリティまたはカスタム セキュリティを実装するために必要な手順の概略を説明します。
  1. ログオン フォームを表示します。
  2. ユーザーが入力したアカウント情報とユーザー データベースに格納されているユーザー情報を比較して、ユーザーを検証します。
  3. セッション変数を作成し、そこにユーザー ID を格納します。
  4. 以降は、ユーザーがいずれかのページを要求するたびに、セッション変数の値が空の文字列 ("") になっていないかどうかを調べて、ユーザーがログオンしていることを確認します。
  5. セッション変数が空の場合は、ユーザーが有効なユーザーでないか、またはセッションからログオフしていると判断し、ユーザーをログオン ページにリダイレクトします。
  6. ユーザーがデータベースに存在しないためにログオンに失敗した場合は、ユーザーがまだこのサイトに登録されていない可能性があります。ユーザーが登録できるように、Register.asp ページにリダイレクトします。ユーザーが登録すると、ユーザーのアカウント情報がユーザー データベースに追加されます。
  7. ユーザーがいつでもセッションからログオフできるように、ログオン ページ以外のすべてのページにログオフ ページへのリンクを入れます。ログオフ ページは、ユーザー ID の入ったセッション変数に空の文字列 ("") を代入して、セッション変数をクリアします。

ユーザー データベース テーブルの作成

  1. [スタート] ボタンをクリックし、[ファイル名を指定して実行] をクリックします。[名前] ボックスに notepad と入力し、Enter キーを押します。
  2. 次の SQL スクリプトを選択 (反転表示) し、スクリプトを右クリックし、[コピー] をクリックします。メモ帳で、[編集] メニューの [貼り付け] をクリックします。
    CREATE TABLE [Users] (	[uid] [varchar] (25) NOT NULL ,	[password] [varchar] (25) NOT NULL ,	CONSTRAINT [PK_Users] PRIMARY KEY  CLUSTERED 	(		[uid]	)  ON [PRIMARY] ) ON [PRIMARY]GO					
  3. [ファイル] メニューの [上書き保存] をクリックします。[ファイル名] ボックスに User.txt と入力し、[保存] をクリックします。
  4. [スタート] ボタンをクリックし、[プログラム] をポイントし、[Microsoft SQL Server] をポイントして、[クエリ アナライザ] をクリックします。[SQL Server の接続] ダイアログ ボックスで、SQL Server を実行するサーバーの名前、および SQL Server に接続するためのユーザー ID とパスワードを指定します。
  5. [ファイル] メニューの [開く] をクリックします。[ファイルを開く] ダイアログ ボックスで、[ファイルの種類] ボックスの一覧の [すべてのファイル] をクリックします。ファイルの一覧で [User.txt] をクリックし、[開く] をクリックします。
  6. ツール バーのデータベースのドロップダウン リスト ボックスから、このクエリで作成したテーブルを作成するデータベースを選択します。この用途に使用できる適切なデータベースがない場合は、[pubs] をクリックして、pubs サンプル データベース内にテーブルを作成します。
  7. データベースを選択したら、[クエリ] メニューの [実行] をクリックして、クエリを実行します。これで、選択したデータベース内に Users テーブルが作成されます。

仮想ディレクトリの作成と構成

  1. エクスプローラで、Web ルートにフォルダを作成します。デフォルトの Web ルートは SystemDrive:\Inetpub\Wwwroot です。作成したフォルダに ASPSecureAPP という名前を付けます。
  2. インターネット サービス マネージャ Microsoft 管理コンソール (MMC) を開きます。

    : Windows NT 4.0 では、この MMC にインターネット サービス マネージャという名前が付けられています。
    • Windows 2000 または Windows Server 2003 を実行するコンピュータ上でインターネット サービス マネージャを開くには、[スタート] ボタンをクリックし、[ファイル名を指定して実行] をクリックします。[ファイル名を指定して実行] ダイアログ ボックスに inetmgr と入力し、Enter キーを押します。
    • Windows NT 4.0 を実行しているコンピュータでインターネット サービス マネージャを開くには、次の手順を実行します。
      1. [スタート] ボタンをクリックし、[プログラム]、[Windows NT 4.0 Option Pack] の順にポイントし、[Microsoft Internet Information Server] をクリックします。
      2. [インターネット サービス マネージャ] をクリックします。
  3. [コンピュータ] を展開し、[既定の Web サイト] を展開します。手順 1. で作成した ASPSecureAPP フォルダを右クリックし、[プロパティ] をクリックします。
  4. [プロパティ] ダイアログ ボックスの [ディレクトリ] タブで、[アプリケーションの設定] の [作成] をクリックして、このディレクトリをアプリケーションとしてマークします。

サンプル ページの作成

: これらのページをメモ帳で作成する場合は、ファイルを保存するときに [名前を付けて保存] ダイアログ ボックスで必ず、[ファイルの種類] ボックスの一覧の [すべてのファイル] をクリックしてください。
Logon.asp
ユーザーがこのサイトにアクセスするために、自分のユーザー ID とパスワードを入力するページです。

次のコードを新しい ASP ページにコピーし、そのファイルを Inetpub\Wwwroot ディレクトリの ASPSecureAPP フォルダに Logon.asp という名前で保存します。
<%'The following three lines of code are used to make sure that this page is not cached on the client.Response.CacheControl = "no-cache"Response.AddHeader "Pragma", "no-cache"Response.Expires = -1%><html><body><form action="Validate.asp" method="post"><P>Login ID:&#xa0;&#xa0;  <INPUT type=text id=UID  name=UID> <br>Password:&#xa0;&#xa0;<input type="password" id="passwd" name="passwd"> </P><input type="submit" value="Logon" id="submit1" name="submit1"></form></body></html>				
Validate.asp
ユーザーが自分のログオン情報を入力してアプリケーションにログオンした後、このページで、そのユーザー情報が検証され、ユーザーが適切なページにリダイレクトされます。

次のコードを新しい ASP ページにコピーします。接続文字列のパラメータを有効な値に変更します。接続文字列のパラメータは次のとおりです。
  • User ID
  • Password
  • Initial Catalog
  • Data Source
Inetpub\Wwwroot ディレクトリの ASPSecureAPP フォルダに、ファイルを Validate.asp という名前で保存します。
<%Response.Buffer=true'The following three lines of code are used to make sure that this page is not cached on the client.Response.CacheControl = "no-cache"Response.AddHeader "Pragma", "no-cache"Response.Expires = -1Dim useridDim Pwd'Assign the user ID to this variable. The user provides the user ID.userid= Request.Form("UID")'Check whether userid is an empty string. If it is empty, redirect to Logon.asp.'If it is not empty, connect to the database, and validate the user.if userid <> "" then    pwd = Request.Form("passwd")	    Dim Cn    Dim Rs    Dim StrConnect'Specify the connection string to access the database.'Remember to change the following connection string parameters to reflect the correct values'for your SQL server.    StrConnect = "Provider=SQLOLEDB.1;User ID=<username>;Password=<strong password>;Initial Catalog=pubs;" & _    "Network Library=dbmssocn;Data Source=servername"    Set Cn = Server.CreateObject("ADODB.Connection")    Cn.Open StrConnect    Set Rs = Server.CreateObject("ADODB.Recordset")    Rs.Open "Select * from Users where uid='" & userid & "'",Cn'Check to see whether this user ID exists in your database.    If Not Rs.EOF then        If strcomp( pwd, Rs.Fields("password").value , 1) = 0 then'Password is correct. Set a session variable, and redirect the user to a Default.asp page'or the main page in your application.            Session("UID") = userid            Response.Redirect "Default.asp"            Response.End        Else'Password is incorrect. Redirect the user to the logon page.            Response.Redirect "Logon.asp"            Response.End        End if    Else'If the user is not in your database, point him or her to the Register.asp page'so that he or she can register at your Web site to access your application.        Response.Redirect "Register.asp"        Response.End    End ifElse    Response.Redirect "Logon.asp"    Response.EndEnd if%>				
Register.asp
ユーザーがこのサイトにアクセスするために、自分のユーザー ID とパスワードを登録するページです。

次のコードを新しい ASP ページにコピーします。接続文字列のパラメータを有効な値に変更します。接続文字列のパラメータは次のとおりです。
  • User ID
  • Password
  • Initial Catalog
  • Data Source
Inetpub\Wwwroot ディレクトリの ASPSecureAPP フォルダに、ファイルを Register.asp という名前で保存します。
<%Response.Buffer=true'The following three lines of code are used to make sure that this page is not cached on the client.Response.CacheControl = "no-cache"Response.AddHeader "Pragma", "no-cache"Response.Expires = -1'Check whether user has submitted user name and password so that you can 'add that user to the users database and register him or her as a valid 'user to use this application.'This is just the minimal code that you need. You can customize this the way you want.Dim pwdDim useriduserid = Request.Form("uname")pwd = Request.Form("pwd")If userid <> "" then    If  pwd <> "" then        Dim Cn        Dim Rs        Dim StrConnect'Specify the connection string to access the database.'Remember to change the following connection string parameters to reflect the correct values'for your SQL server.        StrConnect = "Provider=SQLOLEDB.1;User ID=<username>;Password=<strong password>;" & _        "Initial Catalog=pubs;Network Library=dbmssocn;Data Source=servername"        Set Cn = Server.CreateObject("ADODB.Connection")        Cn.Open StrConnect        Set Rs = Server.CreateObject("ADODB.Recordset")        Rs.Open "Select * from Users where uid='" & userid & "'",Cn,3        If Rs.RecordCount>0 then            Response.Write "The Username that you entered has already been taken by someone else."            Response.Write "Use a different Username."            Set Rs = Nothing            Set Cn = Nothing        Else            Dim records            Cn.Execute "INSERT INTO USERS1 (uid,password) VALUES" & _            "('" & userid & "','" & pwd & "')" , records            If records=1 then                Response.Write "You have been registered successfully."                Set Rs = Nothing                Set Cn = Nothing                Session("UID")= userid                Response.Redirect "Default.asp"                Response.End 			            Else                Response.Write Err.Description                Set Rs = Nothing                Set Cn = Nothing                Response.End 			            End if        End if    Else    Response.Write "Password is empty. Could not register. Try again."    End ifEnd if%><html><head><script language="javascript">function callsubmit(){if (frm1.pwd.value==frm1.pwdc.value) {frm1.submit();}else{alert("Password does not match. Re-enter the password");}}</script></head><body><form action="" method="post" id=frm1 name=frm1><P>Login ID:&#xa0;&#xa0;  <INPUT type=text id=uname  name=uname> <br>Password:&#xa0;&#xa0;<input type="password" id="pwd" name="pwd"> <br>Confirm Password:&#xa0;&#xa0;<input type="password" id="pwdc" name="pwdc"> </P><input type="button" value="Register" id="submit1" name="submit1" onclick=javascript:callsubmit();></form></body></html>				
Logoff.asp
ユーザーがログオフするためのページです。

次のコードを新しい ASP ページにコピーし、そのファイルを Inetpub\Wwwroot ディレクトリの ASPSecureAPP フォルダに Logoff.asp という名前で保存します。
<%Response.Buffer=True'The following three lines of code are used to make sure that this page is not cached on the client.Response.CacheControl = "no-cache"Response.AddHeader "Pragma", "no-cache"Response.Expires = -1'Set the session variable to an empty string and also destroy the session to make'to complete the user session.Session("UID")=""Session.AbandonResponse.Redirect "Logon.asp"Response.End%>				
Default.asp
このページを使用して、作成した他のページをテストすることができます。

次のコードを新しい ASP ページにコピーし、そのファイルを Inetpub\Wwwroot ディレクトリの ASPSecureAPP フォルダに Default.asp という名前で保存します。
<%'The following three lines of code are used to make sure that this page is not cached on the client.Response.CacheControl = "no-cache"Response.AddHeader "Pragma", "no-cache"Response.Expires = -1if session("UID")="" then     Response.Redirect "Logon.asp"    Response.Endelse    Response.Write "You are logged on as " & session("UID") & "<br>"end if%><HTML><BODY><A HREF="Logoff.asp">Click here to log off</A><BODY></HTML>				

各ページへのユーザー検証コードの追加

次のコードは、ユーザーが既に Web サイトにログオンしており、まだログオフしていない状態にあるかどうかを調べます。

この一連のコードをセキュリティが強化された各 ASP ページ (Logon.asp および Validate.asp を除く) にコピーします。Logon.asp ページおよび Validate.asp ページには、このコードを追加しないでください。このコードは各ページの先頭に貼り付けて、最初に表示されるようにします。
<%'The following three lines of code are used to make sure that this page is not cached on the client.Response.CacheControl = "no-cache"Response.AddHeader "Pragma", "no-cache"Response.Expires = -1if session("UID")="" then     Response.Redirect "Logon.asp"    Response.Endend if%>				

このアプリケーションの動作

このアプリケーションには基本的に、アカウント情報を入力せずにすべてのユーザーが参照できるページが 2 つ (Logon.asp と Register.asp) あります。その他のページを参照するには、ユーザーが自分のユーザー ID とパスワードを入力してログオンする必要があります。したがって、ログオン情報を必要とするいずれかのページをユーザーが直接参照しようとすると、Logon.asp ページにリダイレクトされ、そこでユーザー ID とパスワードを入力しなければなりません。正しくないパスワードを入力した場合は、再びログオンを試みることができます。

ユーザーのユーザー ID とパスワードがデータベースに存在しない場合は、Register.asp ページにリダイレクトされ、そこでアプリケーションに登録することができます。ユーザーが Web サイトの Register.asp ページで登録を行うと、ユーザーの確認に使用されるユーザー データベースにそのユーザーの情報が入力されます。

トラブルシューティング

  • アプリケーションの要件やセキュリティ レベルによっては、SSL (Secure Sockets Layer) 暗号化を使用します。Logon.asp で SSL 暗号化を有効にすると、ユーザーのアカウント情報のクリア テキストでの転送を避けることができます。
  • このユーザー アカウントは、Windows アカウントとは対応付けられません。したがって、このアプリケーションに Windows アカウントを使用して直接、ログオンすることはできません。
  • このセキュリティ メカニズムは、ASP のセッション ベースの情報を使用します。このため、Cookie を有効にしていないユーザーに対しては機能しません。
関連情報
関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
172138 仮想ディレクトリの作成方法
282060 [IIS] IIS のセキュリティ保護に関連するリソース
299970 [HOW TO] NTFS セキュリティを使用して IIS 4.0 または 5.0 上の Web ページを保護する方法
プロパティ

文書番号:299987 - 最終更新日: 09/05/2006 08:58:20 - リビジョン: 5.1

  • Microsoft Active Server Pages 4.0
  • kbaspobj kbdatabase kbhowtomaster kbsecurity KB299987
フィードバック
ript> >>ow.location.protocol) + "//c.microsoft.com/ms.js'><\/script>");