En la programación ASP, se puede decir que la autenticación de identidad se usa comúnmente. Pero, ¿cómo podemos lograr la seguridad de la autenticación?
Página de envío de formulario: sub.htm
<html>
<cabeza>
<title>Inicio de sesión de administrador</title>
<cuerpo>
<nombre del formulario="formulario1" método="publicación" acción="sub.asp">
<p>Administrador:
<tipo de entrada="texto" nombre="ID de usuario" tamaño="25" maxlength="20">
contraseña:
<tipo de entrada="texto" nombre="Pase" tamaño="12" maxlength="20">
<tipo de entrada="enviar" nombre="Enviar" valor="Enviar">
</p>
</formulario>
</cuerpo>
</html>
programa SUB.asp
<%
Recibir datos del formulario
usuario=solicitud.de("ID de usuario")
Compruebe si los datos enviados por el formulario están vacíos (puede usar JAVASCRIPT o VBSCRIPT para controlar la página del formulario, ¡pero no olvide controlarla aquí!
si usuario="" entonces
¡Vaya a la página del mensaje de error!
respuesta.redirect "err1.htm"
Puede que esta frase no sea útil, ¡pero es bueno agregarla!
respuesta.fin
terminar si
pasar=solicitud.de("Pasar")
si pasa = "" entonces
respuesta.redirect "err2.htm"
respuesta.fin
terminar si
Unirse a la base de datos
file=server.mappath("su base de datos")
establecer conexión=servidor.createobject("adodb.conexión")
dr="driver={controlador de acceso de Microsoft (*.mdb)};dbq="&file
con.abierto dr
establecer rs=servidor.createobject("adodb.recordset")
La clave aquí es el lenguaje SQL.
sql="seleccione * de la tabla donde usuario= "&usuario&" y pase= "&contrase&" "
rs.open sql
si no rs.eof entonces
Si lo encuentras, ve a la página de gestión.
respuesta.redirect "iniciar sesión.asp"
demás
Si no lo encuentra, ingresará a una página de error.
respuesta.escribir "err3.htm"
terminar si
%>
Todos sienten que el código anterior debería estar bien, pero aquí existe un grave riesgo de seguridad:
si quiero iniciar sesión como administrador, puedo ingresarlo en el cuadro de entrada del formulario SUb.htm:
Ingrese en el primer cuadro de texto: a o 1 = 1 o O =
Ingrese en el segundo cuadro de texto: a o 1 = 1 o O =
Enviar, todos verán... "Oh, escúchame, está bien, arrojaré los ladrillos más tarde..."
"a" y "1" son caracteres.
Algunas personas pueden preguntar por qué ingresa como administrador cuando ingresa estos caracteres. ?
De hecho, estos caracteres son un engaño del lenguaje SQL en su programa. Para aquellos que hayan ingresado exitosamente,
consulte: Al iniciar el programa SQL, se consulta la tabla en busca de registros que cumplan con user= "&user&" y pass= ". &pass&" "condiciones
sql="select * de la tabla donde usuario= "&user&" y pass= "&pass&" "
Después de ingresar el código anterior, se convirtió en:
sql="select * from table donde usuario= a o 1 = 1 y pass= a o 1 = 1 "
Veamos, ¿hay alguna razón para no ingresar? ¡Dame una razón para no ingresar! ¡
Lo mismo ocurre si el campo USER PASS anterior es numérico!
Solución:
1.
Utilice REPLACE Reemplazar caracteres especiales en el contenido ingresado por el usuario para lograr fines de control sql="select * from table where user= "&replace(user," "," ")&" and pass= "&replace(pass," "," ")&! " "
Este método sólo puede reemplazar un carácter a la vez. De hecho, los caracteres peligrosos no son sólo " ", sino también caracteres como ">", "<", "&", "%", etc. debe estar completamente controlado. Pero, ¿qué debo hacer si la función REEMPLAZAR no es adecuada?
2. El método de control del programa
utiliza un programa para controlar todo el contenido ingresado por el cliente, de modo que cualquier posible carácter o código peligroso ingresado por el usuario pueda ser controlado. estar completamente controlado, ¡este es mi método!
<%
Capturar el contenido del formulario enviado por el usuario.
usuario=solicitud.de("usuario")
pasar=solicitud.de("pasar")
...
Comienza el control de bucle
para i=1 a len(usuario)
Utilice la función MID para leer un carácter en la posición i en la variable usuario
nosotros=medio(usuario,i,1)
Comparar caracteres leídos
si nosotros=" " o nosotros="%" o nosotros="<" o nosotros=">" o nosotros="&" entonces
Si contiene los caracteres anteriores, aparecerá un mensaje de error. No puede contener los caracteres especiales anteriores.
respuesta.redirect "err2.htm"
respuesta.fin
terminar si
próximo
...
%>