Restriccion de acceso a paginas


http://www.asptutor.com

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 .

 


Atras