Cómo usar la bases de datos y las sesiones ASP para implementar la seguridad ASP

Seleccione idioma Seleccione idioma
Id. de artículo: 299987 - Ver los productos a los que se aplica este artículo
Este artículo se publicó anteriormente con el número E299987
Aviso
Recomendamos encarecidamente que todos los usuarios se actualicen a la versión 6.0 de Servicios de Microsoft Internet Information Server (IIS) de 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 de IIS, visite el siguiente sitio Web de Microsoft:
http://www.microsoft.com/technet/security/prodtech/IIS.mspx
Expandir todo | Contraer todo

En esta página

Resumen

Este artículo analiza paso a paso cómo implementar la seguridad basada en formularios para las aplicaciones con Páginas Active Server (ASP). Puede utilizar este mecanismo cuando su aplicación es de seguridad mejorada o cuando solamente desea permitir usuarios autenticados. También puede utilizar este mecanismo cuando los usuarios no forman parte de su dominio interno, como es el caso de los usuarios de Internet. Este ejemplo utiliza una base de datos para almacenar la información de los usuarios y, a continuación, valida a los usuarios contra la 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 están ejecutando Windows NT 4.0, Microsoft Internet Information Services (IIS) 5.0 para equipos que están ejecutando Windows 2000 o Servicios de Microsoft Internet Information Server (IIS) 6.0 para equipos que están ejecutando 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 requeridos para implementar en la aplicación Web con ASP la seguridad basada en formularios o la seguridad personalizada:
  1. Presente al usuario un formulario de inicio de sesión.
  2. Valide las credenciales del usuario contra la información de usuario almacenada en la base de datos de usuario.
  3. Cree una variable de sesión y establezca su valor en el Id. de usuario.
  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 asegurar que el usuario ha iniciado sesión.
  5. Si la variable está vacía, o el usuario no es un usuario válido o ha cerrado la sesión. En caso de que la variable esté vacía, redirija al usuario a la página de inicio de sesión.
  6. Si el inicio da error porque el usuario no existe en su base de datos, el usuario no se puede registrar todavía en su sitio. Redirija al usuario a la página Register.asp para que se pueda registrar en su sitio. Cuando el usuario se registre, esos detalles del usuario se agregarán a la base de datos de usuario.
  7. Proporcione un vínculo a la página de cierre de sesión en todas las páginas, salvo en la de inicio de sesión, para que el usuario pueda cerrar la sesión. Esta página borra la variable de sesión que contiene el Id de usuario, asignándole una cadena vacía ("").

Crear una tabla de base de datos de usuario

  1. Haga clic en Inicio y en Ejecutar, escriba notepad en el cuadro Abrir y presione ENTRAR para abrir el Bloc de notas.
  2. Resalte la siguiente secuencia de comandos de SQL, haga clic en ella con el botón secundario del mouse (ratón) 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, Microsoft SQL Server y, 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 conectar con 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 DB de la barra de herramientas, seleccione la base de datos en la que desea crear esta tabla. Si no tiene una base de datos concreta 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 de Web. De forma predeterminada, la raíz de Web es unidadSistema: \Inetpub\Wwwroot. Denomine ASPSecureAPP a la carpeta.
  2. Abra el Administrador de servicios Internet en Microsoft Management Console (MMC).

    Nota:
    En Windows NT 4.0, esta MMC se denomina igual en la versión localizada, pero no así en el original.
    • Para abrir el Administrador de servicios Internet en un equipo que esté ejecutando Windows 2000 o Windows Server 2003, haga clic en Inicio y en Ejecutar, escriba inetmgr en el cuadro Abrir y 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, Windows NT 4.0 Option Pack y, a continuación, haga clic en Microsoft Internet Information Server.
      2. Haga clic en Administrador de servicios Internet.
  3. Expanda Equipo y, a continuación, expanda Sitio Web predeterminado. Haga clic con el botón secundario del mouse en la carpeta ASPSecureAPP que creó en el paso 1 y, a continuación, haga clic en Propiedades.
  4. En la ficha Directorio del cuadro de diálogo Propiedades, haga clic en Crear en la sección Configuración de aplicación para definir el directorio como una aplicación.

Crear las páginas de ejemplo

Nota:
Si usa el Bloc de notas para crear estas páginas, asegúrese de hacer clic en Todos los archivos en el cuadro Tipo del cuadro de diálogo Guardar como cuando guarde los archivos.
Logon.asp
Con esta página los usuarios pueden escribir 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.
 &lt;% 'Las tres líneas de código siguientes se utilizan para garantizar que esta página no se almacena en la memoria caché del cliente. Response.CacheControl = "no-cache" Response.AddHeader "Pragma", "no-cache" Response.Expires = -1 %> <html><body> <form action="Validate.asp" method="post"> <P> Login ID:    <INPUT type=text id=UID  name=UID> <br> Password:  <input type="password" id="passwd" name="passwd"> </P> <input type="submit" value="Logon" id="submit1" name="submit1"> </form> </body></html> 
Validate.asp
Después de 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 redirige luego al usuario a la página apropiada.

Copie el código siguiente en una nueva página ASP. Cambie los parámetros de la cadena de conexión para que contengan los valores válidos. Los parámetros de la 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

'Las tres líneas de código siguientes se utilizan para garantizar que esta página no se almacena en la memoria caché del cliente. Response.CacheControl = "no-cache" Response.AddHeader "Pragma", "no-cache" Response.Expires = -1

Dim userid Dim Pwd 'Asigna el Id. de usuario a esta variable. El usuario proporciona el Id de usuario. userid= Request.Form("UID") 'Comprueba si el identificador de usuario es una cadena vacía. Si está vacío, redirija a Logon.asp. 'Si no está vacío, conecta a la base de datos y valida al usuario.

if userid <> "" then pwd = Request.Form("passwd")
	
    Dim Cn Dim Rs Dim StrConnect

'Especifique la cadena de conexión para tener acceso a la base de datos. 'Recuerde cambiar los parámetros de cadena de conexión siguientes para reflejar los valores correctos 'para su servidor SQL. 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 'Compruebe si este Id. de usuario existe ya en la base de datos. If Not Rs.EOF then If strcomp( pwd, Rs.Fields("password").value , 1) = 0 then 'La contraseña es correcta. Establezca una variable de sesión y redirija al usuario a una página Default.asp 'o la página principal de su aplicación. Session("UID") = userid Response.Redirect "Default.asp" Response.End Else 'La contraseña no es correcta. Redirija al usuario a la página de inicio de sesión. Response.Redirect "Logon.asp" Response.End End if Else 'Si el usuario no está en su base de datos, señálele la página Register.asp 'para que se pueda registrar en su sitio Web y tener acceso a su aplicación. 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 el Id. de usuario y la contraseña para tener acceso a su sitio.

Copie el código siguiente en una nueva página ASP. Cambie los parámetros de la cadena de conexión para que contengan los valores válidos. Los parámetros de la 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

'Las tres líneas de código siguientes se utilizan para garantizar que esta página no se almacena en la memoria caché del cliente. Response.CacheControl = "no-cache" Response.AddHeader "Pragma", "no-cache" Response.Expires = -1

'Comprueba si el usuario ha enviado el nombre de usuario y la contraseña para que pueda 'agregar ese usuario a la base de datos de usuarios y regístrarle como un válido 'para utilizar esta aplicación. 'Este es el código mínimo que necesita. Puede personalizarlo como quiera. Dim pwd Dim userid

userid = Request.Form("uname") pwd = Request.Form("pwd")

If userid <> "" then If  pwd <> "" then Dim Cn Dim Rs Dim StrConnect

'Especifique la cadena de conexión para tener acceso a la base de datos. 'Recuerde cambiar los parámetros de cadena de conexión siguientes para reflejar los valores correctos 'para su servidor SQL. 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:    <INPUT type=text id=uname  name=uname> <br> Password:  <input type="password" id="pwd" name="pwd"> <br> Confirm Password:  <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 que los usuarios cierren 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

'Las tres líneas de código siguientes se utilizan para garantizar que esta página no se almacena en la memoria caché del cliente. Response.CacheControl = "no-cache" Response.AddHeader "Pragma", "no-cache" Response.Expires = -1

'Establezca la variable de sesión en una cadena vacía y destruya también la sesión para 'finalizar la sesión de usuario. Session("UID")="" Session.Abandon Response.Redirect "Logon.asp" Response.End %> 
Default.asp
Puede usar 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.
 <% 'Las tres líneas de código siguientes se utilizan para garantizar que esta página no se almacena en la memoria caché del cliente. 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 que el usuario ya haya iniciado sesión en el sitio Web y no la haya cerrado todavía.

Copie este bloque de código en cada uno de sus páginas ASP de seguridad mejorada, excepto en la página Logon.asp y la página Validate.asp. No agregue este código a las páginas Logon.asp o Validate.asp. Compruebe que pega este código en la parte superior de cada página, para que sea el que aparezca primero.
 <% 'Las tres líneas de código siguientes se utilizan para garantizar que esta página no se almacena en la memoria caché del cliente. 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

En esencia, esta aplicación tiene dos páginas (Logon.asp y Register.asp) que puede ver cualquiera sin necesidad de proporcionar credenciales. Para ver el resto de las páginas, un usuario debe iniciar sesión con un Id. de usuario y una contraseña válidos. Por consiguiente, cuando un usuario va directamente a cualquier página que requiera información de inicio de sesión, se le redirige a la página Logon.asp. Los usuarios deben proporcionar un Id. de usuario y una contraseña válidos 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 de usuario y la contraseña no existen en la base de datos, se redirige al usuario a la página Register.asp, donde puede registrarse para utilizar su aplicación. Cuando el usuario se registra en su sitio Web mediante la página Register.asp, los detalles de ese usuario se escriben en la base de datos de usuario que está utilizando para validar a los usuarios.

Solución de problemas

  • De acuerdo con los requisitos y con lo segura que sea la aplicación, puede permitir el cifrado de Secure Sockets Layer (SSL) en Logon.asp para no transferir las credenciales del usuario en texto normal.
  • Estas cuentas de usuario no se asignan a cuentas de Windows. Por consiguiente, 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 una sesión ASP. Por consiguiente, este mecanismo no funciona para usuarios que no tienen las cookies habilitadas.

Referencias

Para obtener más información al respecto, haga clic en los números de artículo siguientes para verlos en Microsoft Knowledge Base:
172138 Cómo crear un directorio virtual de Servicios de Internet Information Server (IIS)
282060 Recursos para proteger Servicios de Internet Information Server
299970 Cómo usar 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: martes, 5 de septiembre de 2006 - Versión: 5.1
La información de este artículo se refiere a:
  • Microsoft Active Server Pages 4.0
Palabras clave: 
kbaspobj kbdatabase kbhowtomaster kbsecurity KB299987
Renuncia a responsabilidad de los contenidos de la KB sobre productos a los que ya no se ofrece asistencia alguna
El presente artículo se escribió para 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.

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com