Recomendado: Hablando sobre el directorio de árbol de DHTML XML ASP CSS El directorio de árbol muestra la descripción del problema del programa: las tablas de datos autoasociadas a menudo aparecen en nuestros proyectos. Si los miramos desde la perspectiva general, toda la tabla se presenta como una estructura de datos de árbol (para casos complejos, puede convertirse en un gráfico). Cuando hacemos esta mesa
En la programación ASP, se puede decir que la autenticación de identidad se usa a menudo. Pero, ¿cómo podemos lograr la seguridad de la autenticación?
Página de envío del formulario: sub.htm
| El siguiente es el contenido citado: <html> <Evista> <title> Administrador Iniciar sesión </Título> <Body> <form de nombre = form1 método = post accy = sub.asp> <p> Administrador: <Input type = text name = userid size = 25 maxLength = 20> contraseña: <Input type = text name = pass size = 12 maxLength = 20> <input type = enviar nombre = enviar value = enviar> </p> </form> </body> </html> |
| El siguiente es el contenido citado: Programa Sub.asp <% Recibir datos del formulario User = request.from (UserId) Compruebe si los datos enviados en el formulario están vacíos (la página del formulario puede ser controlada por JavaScript o VBScript, ¡pero no olvide controlarlos aquí! Si user = entonces ¡Vaya a la página de solicitado de error! Respuesta.Redirect ERR1.HTM Esta oración puede ser inútil, ¡pero es mejor agregarla! respuesta. final si pass = request.from (pase) Si pase = entonces respuesta.Redirect ERR2.HTM respuesta. final si Únete a la base de datos file = server.mappath (su base de datos) Establecer conn = server.createObject (ADODB.Connection) dr = controlador = {Microsoft Access Driver (*.mdb)}; dbq = & file Conn.open Dr establecer rs = server.createObject (ADODB.RecordSet) La clave es el idioma SQL aquí sql = select * de la tabla donde user = & user & y pass = & pass & Rs. abrir SQL Si no es RS.EOF entonces Si se encuentra, vaya a la página de gestión Reponse.Redirect Login.asp demás Si no se encuentra, ingrese la página de error Respuesta.WRITE ERR3.HTM final si %> |
Todos sienten que el código anterior debería estar bien, pero aquí hay un riesgo de seguridad grave:
Si quiero iniciar sesión en el administrador, puedo ingresarlo en el cuadro de entrada de 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 =
Envíelo, verá ... woo, escúchame, es bueno que se haga, los ladrillos serán arrojados de nuevo ...
A y 1 son cualquier personaje
¿Alguien puede preguntar por qué ingresa a estos personajes como administrador? ?
De hecho, estos personajes son un engaño al lenguaje SQL en su programa y se ingresaron con éxito.
Todos ven: Iniciar el programa SQL es un registro que consulta la tabla y cumple con el usuario = & User & Pass = & Pass & Conditions.
sql = select * de la tabla donde user = & user & y pass = & pass &
Ingresé el código anterior y se convirtió en:
sql = select * de la tabla donde user = a o 1 = 1 y pasar = a o 1 = 1
Echemos un vistazo, ¿puede haber una razón para no entrar? ? ¡Dame una razón para no entrar, primero!
El campo de pase de usuario anterior es un tipo de caracteres y si es un tipo numérico, ¡lo mismo es cierto!
Solución:
1. Método alternativo de función:
¡Use Reemplazar para reemplazar la entrada de contenido del usuario con caracteres especiales para lograr el propósito de control! sql = select * de la tabla donde user = & reemplazar (usuario,) y y pasar = & reemplazar (pasar,) y
Este método solo puede reemplazar un carácter a la vez. De hecho, los personajes peligrosos no son solo, sino también personajes como>, <, y, % deben controlarse por completo. Pero, ¿qué debo hacer si no parece ser competente con la función de reemplazo? ?
2. Método de control del programa
Use el programa para controlar todo el contenido ingresado por el cliente, para que pueda controlar completamente cualquier posible caracteres o códigos peligrosos ingresados por el cliente. ¡Haré este método!
| El siguiente es el contenido citado: <% Capture el contenido del formulario enviado por el usuario usuario = request.from (usuario) pass = request.from (pase) ... El control del ciclo comienza Para i = 1 a Len (usuario) Use la función media para leer un personaje en la posición I en el usuario variable US = Mid (usuario, i, 1) Comparación de personajes de lectura if us = o us =% o us = <o us => o us = & entonces Si los caracteres anteriores están contenidos, se producirá un mensaje de error. Los caracteres especiales anteriores no pueden ser contenidos. respuesta.Redirect ERR2.HTM respuesta. final si próximo ... %> |
Compartir: ASP de análisis y procedimientos almacenados Hay muchos artículos sobre ASP y procedimientos almacenados, pero dudo que los autores lo hayan practicado. Leí mucha información relevante cuando estaba al principio y descubrí que muchos de los métodos proporcionados no eran el caso en la práctica. Para aplicaciones simples, esto