Restringir el acceso a páginas con ASP

A todos nos ha ocurrido que necesitamos que ciertas páginas de nuestro web solo puedan ser accedidas por usuarios previamente autorizados.
A continuación os muestro un método sencillo, pero eficaz para conseguirlo.

Para guardar la lista de usuarios autorizados con sus correspondientes password crearemos en una base de datos llamada XXXXX (no useis un nombre demasiado obvio) una tabla que denominaremos USUARIOS con los campos USUARIO y PASSWORD.


Vamos paso por paso:

1.-Creamos una página con un formulario para que el usuario se identifique

2.- efectuaremos la comprobación del usuario y password introducidos con una simple consulta a la tabla USUARIOS, en el caso de que la identificación sea correcta crearemos para ese usuario una variable de session con un valor que identifique su validación como usuario.
En el caso de que la validación sea errónea devolvemos al usuario al formulario de login con un mensaje de error

Login.asp
<%if request.form("usuario")="" then%>
<form method="POST" action="login.asp">
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p align="center"><%=request.querystring("msg")%></p>
<div align="center">
<center>
<table border="0" width="50%" bgcolor="#F2F2F2">
<tr>
<td width="100%" colspan="2" bgcolor="#0000FF">
<p align="center"><font color="#FFFFFF">Login</font></td>
</tr>
<tr>
<td width="50%">Usuario:</td>
<td width="50%"><input type="text" name="usuario" size="20"></td>
</tr>
<tr>
<td width="50%">Password: </td>
<td width="50%"> <input type="password" name="password" size="20"></td>
</tr>
<tr>
<td width="100%" colspan="2">
<p align="center"><input type="submit" value="Enviar" name="B1"></td>
</tr>
</table>
</center>
</div>
</form>

<%else
'eliminamos las posibles comillas de la entrada
'para evitar la introducción de sentencias SQL
usuario=replace(request.form("usuario"),"'","")
password=replace(request.form("password"),"'","")

Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("\dirBD\xxxxx.mdb"))
set rs = CreateObject("ADODB.Recordset")
sqltxt="Select * from usuarios where usuario='"&usuario&"' and password= '"&password&"'"
'response.write sqltxt
rs.Open sqltxt, conn
if not rs.eof then
' nos ha devuelto un registro, ahora miraremos si es valido
' con ello evitamos el ataque típico SQL
if rs("usuario")=usuario and rs("password")=password then
' si el usuario esta en la base de datos y la password coincide
session("autorizacion")=1
response.redirect "default.asp"
end if
else
session("autorizacion")=-1

end if
rs.close
set rs=nothing
conn.close
set conn=nothing
if session("autorizacion")=-1 or session("autorizacion")="" then
' no hemos encontrado el registro
' eso indica que el usuario y/o la password son erroneos
response.redirect "login.asp?msg=Usuario%20o%20password%20incorrecta"
end if

end if%>


Luego, simplemente, en cada una de las páginas que queramos que requieran autorización previa chequearemos esa variable de session y permitiremos el paso si el chequeo es correcto o redirigiremos al usuario a la página de identificación en caso contrario.

<% if session("autorizacion")<>1 then

response.redirect "login.asp"

end if%>

El sistema nos permitiría incluso conceder diferentes niveles de acceso a páginas dependiendo del usuario, simplemente asignando un diferente valor a su variable de session.

Autor

Pedro Rufo Martín

Webmaster de www.asptutor.com

Compartir

Comentarios

angel

15/11/2007
Tengo el siguiente problema, he creado una web con autenticación ASP contra una BDD, resulta que me comentan, gente que a la que proporciono un usuario de entrada, que no pueden pasar de la página del formulario inicial, lo suelo solucionar desde: Herramientas/Opciones/Privacidad/Avanzada/ habilitando las cookies de sesión.

Sin embargo en otros casos no es necesario hacer esto. De hecho es incomodo tener que obligar a los que no se conectan a habilitar estas opciones.

Es esta la solución o se están mezclando otros problemas.

Ocurre en algunos ordenadores con Sistemas operativos varios, y también distintas versiones de navegadores.

angel

16/11/2007
- ¿Que otras alternativas tengo para proteger páginas sin usar variables de Sesión? El problema creo que está en usarlas, ya que el navegador por defecto las tiene desactivadas.

asnonimo

30/6/2009
anonimo
no restrinjan por variables de session, usen el web.config. este articulo esta bien pero es molesto y tardado hacer todo eso bye

nadineth

01/7/2009
restringir entrada con codigo
tengo hijos menores de 9 años como coloco codigos para que no puedan acseder a paguinas xxx

luishansel

24/12/2015
Restringir ASP con Web.Config
Un profesor de programación me comentó un método realizado a través del Web.Config el cual es un poco tedioso pero efectivo. Les comparto el fragmento de código:
<location path="Pagina_que_desea_proteger.aspx">
<system.web>
<authorization>
<deny users="?"/>
</authorization>
</system.web>
</location>
Lo que hace es impedir el acceso a los usuarios anónimos a la página en cuestión y los redirige al LogIn.aspx (u otra similar), luego que se han autenticado retornan a la página que querían acceder.
Esto lo coloco al final del Web.Config ... lo tedioso es tener que hacerlo por cada página que desea proteger dentro del sitio web.