Foros del Web » Programando para Internet » ASP Clásico »

Informe Accesos Buenos Y Malos ¡¡funciona!!

Estas en el tema de Informe Accesos Buenos Y Malos ¡¡funciona!! en el foro de ASP Clásico en Foros del Web. Él código resultante final es el que indico debajo. (Si alguien puede mejorarlo, sugerencias, etc, adelante, por favor!) Agradecimientos: Dazuaga, Jercer A tener en cuenta: ...
  #1 (permalink)  
Antiguo 01/12/2003, 11:58
Avatar de ludovico2000  
Fecha de Ingreso: noviembre-2003
Ubicación: Bizkaia
Mensajes: 1.315
Antigüedad: 21 años
Puntos: 2
Informe Accesos Buenos Y Malos ¡¡funciona!!

Él código resultante final es el que indico debajo. (Si alguien puede mejorarlo, sugerencias, etc, adelante, por favor!)

Agradecimientos: Dazuaga, Jercer

A tener en cuenta: Crear una base de datos con las tablas y campos necesarios que aparecen en el código:

clientes.mdb
---->usuarios (tabla)
-------->usuario (campo)
-------->password (campo)
-------->nombre (campo)

---->TablaAccesos (tabla)
-------->ID_Usuario (campo)
-------->Fecha_Acceso (campo)
-------->IP (campo)

---->BadAccesos (tabla)
-------->Bad_usuario (campo)
-------->Bad_fecha (campo)
-------->Bad_clave (campo)
-------->Bad_IP (campo)

[CÓDIGO DEL ARCHIVO AL QUE LLAMA EL HTM QUE CONTIENE EL FORMULARIO]


<%if request.form("usuario")="" then%>



<%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"),"'","")
Var_IP = Request.ServerVariables("REMOTE_HOST")


Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("../datos/clientes.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

Insertar = "INSERT INTO TablaAccesos (ID_Usuario, Fecha_Acceso, IP) VALUES ('"&usuario &"', '"& Now() &"', '"&Var_IP&"')"

Conn.Execute(Insertar)


Response.write "<body>...<body>"



end if
else

Insertar = "INSERT INTO BadAccesos (Bad_usuario, Bad_fecha, Bad_clave, Bad_IP) VALUES ('"&usuario&"', '"& Now() &"', '"&password&"', '"&Var_IP&"')"

Conn.Execute(Insertar)

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 "acceso.htm"
end if

end if%>

Última edición por ludovico2000; 07/07/2005 a las 12:07
  #2 (permalink)  
Antiguo 01/12/2003, 12:31
Avatar de ludovico2000  
Fecha de Ingreso: noviembre-2003
Ubicación: Bizkaia
Mensajes: 1.315
Antigüedad: 21 años
Puntos: 2
MEJORA

Dado que la IP (Sobre todo con telefónica) es un tanto engañosa, utilizad:

Var_IP = Request.ServerVariables("HTTP_CLIENT_IP")

en lugar del que muestro arriba
  #3 (permalink)  
Antiguo 01/12/2003, 12:46
 
Fecha de Ingreso: octubre-2003
Ubicación: Pucela
Mensajes: 182
Antigüedad: 21 años, 1 mes
Puntos: 0
Gracias por aclarar esto de la servervariable, ya que yo recogo las ip y me pasaba lo mismo que a ti, las de telefonica eran confusas pero ahora no, ya que la mía misma me la ponía mal, pero ahora ya pone la correcta.
__________________
El pasado ya ha pasado y el futuro todavía no ha pasado, es decir, vive el presente.
  #4 (permalink)  
Antiguo 02/12/2003, 14:00
Avatar de ludovico2000  
Fecha de Ingreso: noviembre-2003
Ubicación: Bizkaia
Mensajes: 1.315
Antigüedad: 21 años
Puntos: 2
CORRECCIÓN DEFINITVA ASUNTO IP

Para evitar las IP situadas detrás de proxy de telefónica, el código desarrollado es:

Var_IP = Request.ServerVariables("HTTP_X_FORWARDED_FOR")
if Var_IP = "" then
Var_IP = Request.ServerVariables("REMOTE_ADDR")
end if

De este modo, si está tras un proxy, toma la IP "buena", y si no, pues también, y no da error de que la cadena es de longitud 0 ni ná de ná.

-gracias a todos-

-seguiremos mejorando-
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:44.