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=método formulario1=acción de publicación=sub.asp>
<p>Administrador:
<tipo de entrada=nombre de texto=tamaño de ID de usuario=25 longitud máxima=20>
contraseña:
<tipo de entrada=nombre de texto=Tamaño de pase=12 longitud máxima=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.redireccionamiento 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=seleccionar * de la tabla donde usuario= &usuario& y contraseña= &contraseña&
rs.opensql
si no rs.eof entonces
Si lo encuentras, ve a la página de gestión.
respuesta.redirect login.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 ingresar en el cuadro de entrada del formulario SUb.htm:
Ingrese en el primer cuadro de texto: a o 1 = 1 o OR =
Ingrese en el segundo cuadro de texto: a o 1 = 1 o OR =
Envía, todos verán... Oh, escúchame, está bien, tiraré los ladrillos más tarde...
a y 1 son caracteres cualquiera
Algunas personas podrán preguntar ¿por qué ingresas estos caracteres para ingresar como administrador? ?
De hecho, estos caracteres se utilizan para engañar al lenguaje SQL en su programa e ingresar con éxito.
Como puede ver: en el programa de inicio SQL, se consulta la tabla en busca de registros que cumplan las condiciones usuario= &usuario& y pass= &pass&.
sql=seleccionar * de la tabla donde usuario= &usuario& y contraseña= &contraseña&
Después de ingresar el código anterior, se convirtió en:
sql=select * de la tabla donde usuario= a o 1 = 1 y pass= a o 1 = 1
Echemos un vistazo. ¿Hay algún motivo para no entrar? ? ¡Dame una razón para no entrar, primero!
¡El campo USER PASS anterior es de tipo carácter y lo mismo ocurre si es de tipo numérico!
Solución:
1. Método de sustitución de funciones:
Utilice REPLACE para reemplazar los caracteres especiales contenidos en el contenido ingresado por el usuario para lograr fines de control. sql=seleccionar * de la tabla donde usuario= &reemplazar(usuario, , )& y pasar= &reemplazar(contraseña, , )&
Este método solo puede reemplazar un carácter a la vez. De hecho, no solo se deben controlar los caracteres peligrosos, sino también caracteres como >, <, &, %, etc. Pero, ¿qué debo hacer si parece que no puedo utilizar la función REEMPLAZAR? ?
2. Método de control del programa
Utilice 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 controlarse completamente. ¡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.redireccionamiento err2.htm
respuesta.fin
terminar si
próximo
...
%>