DetailPage-MSS-KB

Base de connaissances

Numéro d'article: 299987 - Dernière mise à jour: mardi 5 septembre 2006 - Version: 5.1

 
Ancien nº de publication de cet article : F299987
Avertissement
Nous conseillons vivement à tous les utilisateurs de passer à Microsoft Internet Information Services (IIS) version 6.0 sur Microsoft Windows Server 2003. IIS 6.0 augmente considérablement la sécurité de l'infrastructure Web. Pour plus d'informations sur les questions liées à la sécurité avec IIS, visitez le site Web de Microsoft (en anglais) à l'adresse suivante :
http://www.microsoft.com/technet/security/prodtech/IIS.mspx (http://www.microsoft.com/technet/security/prodtech/IIS.mspx)

Sommaire

Résumé

Cet article explique, étape par étape, comment implémenter la sécurité basée sur les formulaires pour les applications ASP (Active Server Pages). Vous pouvez utiliser ce mécanisme lorsque votre application bénéficie d'une sécurité élevée ou lorsque vous voulez autoriser uniquement les utilisateurs authentifiés. Vous pouvez également l'utiliser lorsque les utilisateurs ne font pas partie de votre domaine interne, par exemple des utilisateurs Internet. Cet exemple utilise une base de données pour stocker les informations des utilisateurs, puis valide les utilisateurs par rapport à cette base de données.

Conditions préalables

  • Microsoft Windows NT Workstation 4.0 , Windows NT Server 4.0, Microsoft Windows 2000 Professionnel, Windows 2000 Server, Windows 2000 Advanced Server ou Microsoft Windows Server 2003
  • Microsoft Internet Information Server (IIS) 4.0 pour les ordinateurs Windows NT 4.0, Microsoft Internet Information Services (IIS) 5.0 pour les ordinateurs Windows 2000, ou Microsoft Internet Information Services (IIS) 6.0 pour les ordinateurs Windows Server 2003
  • Microsoft SQL Server 6.5 ou une version ultérieure de SQL Server

Comment concevoir cette application

Cette section indique brièvement les étapes requises pour implémenter la sécurité basée sur les formulaires ou une sécurité personnalisée sur votre application Web ASP :
  1. Présentez un formulaire d'ouverture de session à l'utilisateur.
  2. Validez les informations d'identification de l'utilisateur par rapport aux informations utilisateur qui sont stockées dans votre base de données des utilisateurs.
  3. Créez une variable de session et affectez-lui l'ID de l'utilisateur comme valeur.
  4. Pour toutes les requêtes suivantes que fait l'utilisateur, vérifiez que la valeur de cette variable de session n'est pas une chaîne vide ("") afin de vous assurer que l'utilisateur a ouvert une session.
  5. Si la variable est vide, soit l'utilisateur n'est pas un utilisateur valide, soit il a fermé la session. Dans ce cas, redirigez l'utilisateur vers la page d'ouverture de session.
  6. Si l'ouverture de session échoue parce que l'utilisateur n'existe pas dans votre base de données, il est possible que l'utilisateur ne soit pas encore inscrit sur votre site. Redirigez l'utilisateur vers la page Register.asp afin qu'il puisse s'inscrire sur votre site. Lorsqu'il s'inscrit, les détails de l'utilisateur sont ajoutés à la base de données des utilisateurs.
  7. Fournissez un lien vers la page de fermeture de session sur toutes les pages à l'exception de la page de fermeture de session, afin que l'utilisateur puisse fermer la session. Cette page efface la variable de session qui contient l'ID d'utilisateur en lui affectant une chaîne vide ("").

Création d'une table de base de données des utilisateurs

  1. Cliquez sur Démarrer, sur Exécuter, tapez notepad dans la zone Ouvrir, puis appuyez sur ENTRÉE.
  2. Mettez en surbrillance le script SQL suivant, cliquez dessus avec le bouton droit, puis cliquez sur Copier. Dans le Bloc-notes, cliquez sur Coller dans le menu Edition.
    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. Dans le menu Fichier, cliquez sur Enregistrer. Dans la zone Nom de fichier, tapez User.txt.
  4. Cliquez sur Démarrer, pointez sur Programmes, puis sur Microsoft SQL Server, et cliquez sur Analyseur de requêtes. Dans la boîte de dialogue Connexion à SQL Server, spécifiez le nom du serveur qui exécute SQL Server, l'ID d'utilisateur et le mot de passe de connexion à SQL Server.
  5. Dans le menu Fichier, cliquez sur Ouvrir. Dans la boîte de dialogue Ouvrir, cliquez sur Tous les fichiers (*.*) dans la zone Fichiers de type. Cliquez sur User.txt dans la liste, puis cliquez sur Ouvrir.
  6. Dans la zone BdD de la barre d'outils, sélectionnez la base de données dans laquelle vous voulez créer cette table. Si vous n'avez pas de base de données spécifique à cet effet, cliquez sur Pubs pour créer cette table dans l'exemple de base de données Pubs.
  7. Après avoir sélectionné la base de données, cliquez sur Exécuter dans le menu Requête pour exécuter la requête. Cette étape crée une table Users dans la base de données sélectionnée.

Création et configuration du répertoire virtuel

  1. Dans l'Explorateur Windows, créez un dossier sous la racine Web. Par défaut, la racine Web est SystemDrive:\Inetpub\Wwwroot. Nommez le dossier ASPSecureAPP.
  2. Ouvrez la console MMC (Microsoft Management Console) du Gestionnaire des services Internet.

    Remarque Dans Windows NT 4.0, cette console MMC s'appelle « Gestionnaire des services Internet ».
    • Pour ouvrir le Gestionnaire des services Internet sur un ordinateur Windows 2000 ou Windows Server 2003, cliquez sur Démarrer, sur Exécuter, tapez inetmgr dans la zone Ouvrir, puis appuyez sur ENTRÉE.
    • Pour ouvrir le Gestionnaire des services Internet sur un ordinateur Windows NT 4.0, procédez comme suit :
      1. Cliquez sur Démarrer, pointez sur Programmes, sur Windows NT 4.0 Option Pack, puis cliquez sur Microsoft Internet Information Server.
      2. Cliquez sur Gestionnaire des services Internet.
  3. Développez Ordinateur, puis Site Web par défaut. Cliquez avec le bouton droit sur le dossier ASPSecureAPP que vous avez créé à l'étape 1, puis cliquez sur Propriétés.
  4. Sous l'onglet Répertoire de la boîte de dialogue Propriétés, cliquez sur Créer dans la section Paramètres d'application pour marquer le répertoire en tant qu'application.

Création des exemples de pages

Remarque Si vous utilisez le Bloc-notes pour créer ces pages, prenez soin de cliquer sur Tous les fichiers dans la zone Type de la boîte de dialogue Enregistrer sous lorsque vous enregistrez les fichiers.
Logon.asp
Cette page permet aux utilisateurs de taper leur nom d'utilisateur et leur mot de passe pour accéder à votre site.

Copiez le code suivant dans une nouvelle page ASP. Enregistrez le fichier sous le nom Logon.asp dans le dossier ASPSecureAPP du répertoire Inetpub\Wwwroot.
<%
'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
Une fois que l'utilisateur a fourni ses informations d'ouverture de session pour ouvrir une session sur votre application, cette page valide les informations utilisateur, puis redirige l'utilisateur vers la page appropriée.

Copiez le code suivant dans une nouvelle page ASP. Modifiez les paramètres de la chaîne de connexion afin qu'ils contiennent des valeurs valides. Les paramètres de la chaîne de connexion sont les suivants :
  • ID d'utilisateur
  • Mot de passe
  • Catalogue initial
  • Source de données
Enregistrez le fichier sous le nom Validate.asp dans le dossier ASPSecureAPP du répertoire Inetpub\Wwwroot.
<%
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

Dim userid
Dim 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 if
Else
    Response.Redirect "Logon.asp"
    Response.End
End if

%>
				
Register.asp
Cette page permet aux utilisateurs d'inscrire leur ID d'utilisateur et leur mot de passe pour accéder à votre site.

Copiez le code suivant dans une nouvelle page ASP. Modifiez les paramètres de la chaîne de connexion afin qu'ils contiennent des valeurs valides. Les paramètres de la chaîne de connexion sont les suivants :
  • ID d'utilisateur
  • Mot de passe
  • Catalogue initial
  • Source de données
Enregistrez le fichier sous le nom Register.asp dans le dossier ASPSecureAPP du répertoire Inetpub\Wwwroot.
<%
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 pwd
Dim userid

userid = 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 if
End 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
Cette page permet aux utilisateurs de fermer la session.

Copiez le code suivant dans une nouvelle page ASP. Enregistrez le fichier sous le nom Logoff.asp dans le dossier ASPSecureAPP du répertoire Inetpub\Wwwroot.
<%
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.Abandon
Response.Redirect "Logon.asp"
Response.End
%>
				
Default.asp
Vous pouvez utiliser cette page pour tester les autres pages que vous avez créées.

Copiez le code suivant dans une nouvelle page ASP. Enregistrez le fichier sous le nom Default.asp dans le dossier ASPSecureAPP du répertoire Inetpub\Wwwroot.
<%
'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

if session("UID")="" then 
    Response.Redirect "Logon.asp"
    Response.End
else
    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>
				

Ajout de code de validation à des pages

Le code suivant vérifie si l'utilisateur a déjà ouvert une session sur votre site Web et n'a pas encore fermé cette session.

Copiez ce bloc de code dans chacune de vos pages ASP sécurisées excepté dans les pages Logon.asp et Validate.asp. N'ajoutez pas ce code dans les pages Logon.asp et Validate.asp. Prenez soin de coller ce code en haut de chaque page afin qu'il apparaisse en premier.
<%
'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

if session("UID")="" then 
    Response.Redirect "Logon.asp"
    Response.End
end if
%>
				

Comment fonctionne cette application

Cette application comprend essentiellement deux pages (Logon.asp et Register.asp) que n'importe qui peut consulter sans fournir ses informations d'identification. Pour afficher les autres pages, un utilisateur doit ouvrir une session à l'aide d'un ID d'utilisateur et d'un mot de passe valides. Par conséquent, lorsqu'un utilisateur accède à n'importe quelle page qui requiert des informations d'ouverture de session, il est redirigé vers la page Logon.asp. Les utilisateurs doivent fournir un ID d'utilisateur et un mot de passe valides dans la page Logon.asp. Si le mot de passe est incorrect, l'utilisateur peut faire une nouvelle tentative d'ouverture de session.

Si l'ID d'utilisateur et le mot de passe de l'utilisateur n'existent pas dans votre base de données, l'utilisateur est redirigé vers la page Register.asp dans laquelle il peut s'inscrire pour utiliser votre application. Lorsque l'utilisateur s'inscrit sur votre site Web via la page Register.asp, les détails de cet utilisateur sont entrés dans la base de données des utilisateurs que vous utilisez pour valider les utilisateurs.

Dépannage

  • En fonction de la configuration requise et du niveau de sécurisation de cette application, vous pouvez activer le chiffrement SSL (Secure Sockets Layer) sur Logon.asp afin d'éviter le transfert des informations d'identification des utilisateurs en clair.
  • Ces comptes d'utilisateur ne sont pas mappés à des comptes Windows. Par conséquent, vous ne pouvez pas utiliser directement vos comptes Windows pour ouvrir une session sur cette application.
  • Ce mécanisme de sécurité utilise les informations de session ASP. Il ne fonctionne donc pas pour les utilisateurs qui n'ont pas de cookies activés.

Références

Pour plus d'informations, cliquez sur les numéros ci-dessous pour afficher les articles correspondants dans la Base de connaissances Microsoft.
172138  (http://support.microsoft.com/kb/172138/ ) Comment faire pour créer un répertoire virtuel dans Internet Information Services (IIS)
282060  (http://support.microsoft.com/kb/282060/ ) Ressources pour sécuriser Internet Information Services
299970  (http://support.microsoft.com/kb/299970/ ) Comment faire pour utiliser la sécurité NTFS pour protéger une page Web s'exécutant sur IIS 4.0 ou 5.0

Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Active Server Pages 4.0
Mots-clés : 
kbaspobj kbdatabase kbhowtomaster kbsecurity KB299987
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.
Article KB retiré.Exclusion de responsabilité concernant les contenus obsolètes dans la Base de connaissances
Cet article concerne des produits pour lesquels Microsoft n'offre plus de support. Il est par conséquent fourni « en l'état » et ne sera plus mis à jour.
Partager
Options de support supplémentaire
Forums du support Microsoft Community
Nous contacter directement
Trouver un partenaire Microsoft Certified Partner
Microsoft Store