Cómo utilizar la base de datos y las sesiones ASP para implementar la seguridad ASP

Exención de responsabilidades de contenido KB retirado

Este artículo se refiere a productos para los que Microsoft ya no ofrece soporte técnico. Por tanto, el presente artículo se ofrece "tal cual" y no será actualizado.

Se recomienda encarecidamente que todos los usuarios actualizar a Microsoft Internet Information Services (IIS) versión 6.0 se ejecuta en Microsoft Windows Server 2003. IIS 6.0 aumenta considerablemente la seguridad de la infraestructura Web. Para obtener más información acerca de temas relacionados con la seguridad IIS, visite el siguiente sitio Web de Microsoft:

Resumen

En este artículo paso a paso se describe cómo implementar la seguridad basada en formularios para las aplicaciones de páginas Active Server (ASP). Puede utilizar este mecanismo cuando su aplicación es de seguridad mejorada o cuando desea permitir que sólo los usuarios autenticados. También puede utilizar este mecanismo cuando los usuarios no forman parte del dominio interno, por ejemplo, los usuarios de Internet. Este ejemplo utiliza una base de datos para almacenar información de los usuarios y, a continuación, valida a los usuarios contra esta base de datos.

Requisitos previos

  • Microsoft Windows NT 4.0 Workstation, Windows NT 4.0 Server, Microsoft Windows 2000 Professional, Windows 2000 Server, Windows 2000 Advanced Server o Microsoft Windows Server 2003
  • Microsoft Internet Information Server (IIS) 4.0 para equipos que ejecutan Windows NT 4.0, Microsoft Internet Information Services (IIS) 5.0 para equipos que ejecutan Windows 2000 o Microsoft Internet Information Services (IIS) 6.0 para equipos que ejecutan Windows Server 2003
  • Microsoft SQL Server 6.5 o una versión posterior de SQL Server

Cómo diseñar esta aplicación

Esta sección describe brevemente los pasos necesarios para implementar la seguridad basada en formularios o la seguridad personalizada en la aplicación Web de ASP:
  1. Presente un formulario de inicio de sesión para el usuario.
  2. Validar las credenciales del usuario con la información de usuario almacenada en la base de datos de usuario.
  3. Crear una variable de sesión y establezca su valor en el Id.
  4. Para cada solicitud subsiguiente que el usuario realice, confirme que el valor de esta variable de sesión no es igual a una cadena vacía ("") para confirmar que el usuario ha iniciado sesión.
  5. Si la variable está vacía, el usuario no es un usuario válido o el usuario ha cerrado la sesión. Si la variable está vacía, redirija al usuario a la página de inicio de sesión.
  6. Si el inicio de sesión falla porque el usuario no existe en la base de datos, el usuario no puede registrar en su sitio todavía. Redirija al usuario a la página Register.asp para que el usuario pueda registrar en su sitio. Cuando el usuario se registra, los detalles de usuario se agregan a la base de datos de usuario.
  7. Proporcione un vínculo para el registro de página en todas las páginas excepto la página de inicio de sesión para que el usuario puede cerrar la sesión. Esta página borra la variable de sesión que contiene el identificador de usuario asignándole una cadena vacía ("").

Crear una tabla de base de datos de usuario

  1. Haga clic en Inicio, haga clic en Ejecutar, escriba notepad en el cuadro Abrir y, a continuación, presione ENTRAR para iniciar el Bloc de notas.
  2. Resalte la siguiente secuencia de comandos SQL, haga clic en la secuencia de comandos y, a continuación, haga clic en Copiar. En el Bloc de notas, haga clic en Pegar en el menú Edición .
    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. En el menú archivo , haga clic en Guardar. En el cuadro nombre de archivo , escriba User.txt.
  4. Haga clic en Inicio, seleccione programas, seleccione Microsoft SQL Servery, a continuación, haga clic en Analizador de consultas. En el cuadro de diálogo Conectar a SQL Server , especifique el nombre del servidor que está ejecutando SQL Server, el ID de usuario y la contraseña para conectarse a SQL Server.
  5. En el menú archivo , haga clic en Abrir. En el cuadro de diálogo Abrir , haga clic en todos los archivos (*. *) en el cuadro archivos de tipo . Haga clic en User.txt en la lista y, a continuación, haga clic en Abrir.
  6. En el cuadro base de datos en la barra de herramientas, seleccione la base de datos en la que desea crear esta tabla. Si no tiene una base de datos específica para este propósito, haga clic en Pubs para crear esta tabla en la base de datos de ejemplo Pubs.
  7. Después de seleccionar la base de datos, haga clic en Ejecutar en el menú consulta para ejecutar la consulta. Este paso crea una tabla usuarios en la base de datos seleccionada.

Crear y configurar el directorio virtual

  1. En el Explorador de Windows, cree una carpeta bajo la raíz Web. De forma predeterminada, la raíz de Web es unidadSistema: \Inetpub\Wwwroot. Nombre de la carpeta ASPSecureAPP.
  2. Abra la Microsoft Management Console (MMC) de Internet Services Manager.

    Nota: En Windows NT 4.0, esta MMC se denomina Administrador de servicios Internet.
    • Para abrir el Administrador de servicios Internet en un equipo que ejecuta Windows 2000 o Windows Server 2003, haga clic en Inicio, haga clic en
      Ejecutar, escriba
      inetmgr en el cuadro Abrir y, a continuación, presione ENTRAR.
    • Para abrir el Administrador de servicios Internet en un equipo que está ejecutando Windows NT 4.0, siga estos pasos:
      1. Haga clic en Inicio, seleccione programas, seleccione Windows NT 4.0 Option Packy, a continuación, haga clic en Microsoft Internet Information Server.
      2. Haga clic en Administrador de servicios Internet.
  3. Expanda equipoy, a continuación, expanda sitio Web predeterminado. Haga clic en la carpeta ASPSecureAPP que creó en el paso 1 y, a continuación, haga clic en Propiedades.
  4. En la ficha directorio , en el cuadro de diálogo Propiedades , haga clic en crear en la sección de Configuración de la aplicación para marcar el directorio como una aplicación.

Crear las páginas de ejemplo

Nota: Si utiliza el Bloc de notas para crear estas páginas, asegúrese de hacer clic en Todos los archivos en el cuadro Guardar como tipo del cuadro de diálogo Guardar como al guardar los archivos.
Logon.asp
Esta página permite al usuario introducir su nombre de usuario y contraseña para tener acceso a su sitio.

Copie el código siguiente en una nueva página ASP. Guarde el archivo como Logon.asp en la carpeta ASPSecureAPP del directorio 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
Una vez que el usuario proporcione su información de inicio de sesión para iniciar sesión en la aplicación, esta página valida la información de usuario y, a continuación, redirige al usuario a la página apropiada.

Copie el código siguiente en una nueva página ASP. Cambie los parámetros de cadena de conexión para que contengan valores válidos. Los parámetros de cadena de conexión son los siguientes:
  • Id. de usuario
  • Contraseña
  • Catálogo inicial
  • Origen de datos
Guarde el archivo como Validate.asp en la carpeta ASPSecureAPP del directorio 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
Esta página permite a los usuarios registrar su ID de usuario y contraseña para tener acceso a su sitio.

Copie el código siguiente en una nueva página ASP. Cambie los parámetros de cadena de conexión para que contengan valores válidos. Los parámetros de cadena de conexión son los siguientes:
  • Id. de usuario
  • Contraseña
  • Catálogo inicial
  • Origen de datos
Guarde el archivo como Register.asp en la carpeta ASPSecureAPP del directorio 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
Esta página permite al usuario cerrar la sesión.

Copie el código siguiente en una nueva página ASP. Guarde el archivo como Logoff.asp en la carpeta ASPSecureAPP del directorio 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
Puede utilizar esta página para probar las otras páginas que ha creado.

Copie el código siguiente en una nueva página ASP. Guarde el archivo como Default.asp en la carpeta ASPSecureAPP del directorio 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>

Agregar código de validación a las páginas

El código siguiente comprueba si el usuario ya ha iniciado sesión en el sitio Web y no la haya cerrado todavía.

Copie este bloque de código en cada una de las páginas ASP de seguridad mejorada excepto la página Logon.asp y la página Validate.asp. No agregue este código a la página Logon.asp o a la página Validate.asp. Asegúrese de pegar este código en la parte superior de cada página para que aparezca primero.
<%'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
%>

¿Cómo funciona esta aplicación

Básicamente, esta aplicación tiene dos páginas (Logon.asp y Register.asp) que puede ver cualquiera sin necesidad de proporcionar sus credenciales. Para ver el resto de las páginas, un usuario debe iniciar sesión utilizando un ID de usuario válido y una contraseña. Por lo tanto, cuando un usuario se desplaza directamente a cualquier página que requiera información de inicio de sesión, el usuario se redirige a la página Logon.asp. Los usuarios deben proporcionar un ID de usuario válido y una contraseña en la página Logon.asp. Si la contraseña es incorrecta, el usuario puede intentar iniciar sesión de nuevo.

Si el ID de usuario y la contraseña del usuario no existe en la base de datos, el usuario se redirige a la página Register.asp, donde el usuario puede registrarse para utilizar la aplicación. Cuando el usuario se registra en el sitio Web mediante la página Register.asp, los detalles del usuario se especifican en la base de datos de usuario que está utilizando para validar a los usuarios.

Solución de problemas

  • Según los requisitos y cómo proteger esta aplicación, puede habilitar el cifrado de Secure Sockets Layer (SSL) en Logon.asp para no transferir las credenciales de usuario en texto sin cifrar.
  • Estas cuentas de usuario no se asignan a cuentas de Windows. Por lo tanto, no puede utilizar directamente las cuentas de Windows para iniciar sesión en esta aplicación.
  • Este mecanismo de seguridad utiliza información basada en la sesión de ASP. Por consiguiente, este mecanismo no funciona para los usuarios que no tienen las cookies habilitadas.

Referencias

Para obtener más información, haga clic en los números de artículo siguientes para verlos en Microsoft Knowledge Base:

172138 cómo crear un directorio virtual en servicios de Internet Information Server (IIS)

282060 recursos para proteger servicios de Internet Information Server

299970 cómo utilizar los permisos NTFS para proteger una página Web que se ejecuta en IIS 4.0 o 5.0

Propiedades

Id. de artículo: 299987 - Última revisión: 24 ene. 2017 - Revisión: 3

Comentarios