Teniendo en cuenta que el desarrollo ASP puede utilizar dos lenguajes: vbs y js, aquí se proporcionan códigos de programa en ambos idiomas (¿versión bilingüe? Medio YY...) Una última frase con muchas palabras, la máquina que utilicé para escribir este artículo no tiene Entorno ASP, por lo que el código proporcionado no fue probado y me disculpo por ello. Si encuentra algún problema en el código, no dude en comentar ~ Tengo la piel dura ~
1. Principio de ataque
La suplantación de cookies aprovecha principalmente la práctica insegura de almacenar información de inicio de sesión del usuario en cookies por parte de algunos sistemas de administración de usuarios en la red actual. Su método de ataque es relativamente difícil en comparación con vulnerabilidades como las de inyección SQL, pero sigue siendo muy estúpido.
Sabemos que un sistema de usuario general basado en Cookies almacenará al menos dos variables en Cookies: nombre de usuario y nivel de usuario, donde nombre de usuario es el nombre de usuario y nivel de usuario es el nivel del usuario. Cuando nuestro navegador accede a una página ASP, enviará algo como
OBTENER /.../archivo.asp HTTP 1.0
...
Cookies: nombre de usuario=usuario&nivel de usuario=1
...
paquete, siempre que conozcamos el nombre de usuario del administrador y los valores de nivel de usuario (se supone que son admin y 5 respectivamente), podemos transmitir
OBTENER /.../archivo.asp HTTP 1.0
...
Cookies: nombre de usuario=admin&nivel de usuario=5
...
para obtener derechos de administrador. Muy simple ¿no? Sin embargo, antes de que se descubriera esta vulnerabilidad, casi todos los sistemas de gestión de usuarios dependían de cookies.
2. Almacene la información del usuario de forma segura
Dado que las cookies no son seguras y debemos almacenar la información de inicio de sesión del usuario, ¿dónde debería almacenarse?
Notamos que en ASP, además de las Cookies, también existe la Sesión que puede almacenar información. La sesión se almacena en el servidor y el cliente no puede cambiarla casualmente, por lo que tiene una seguridad extremadamente alta. De esta forma, podrá sustituir todos los códigos de Cookies por Sesión.
3. Almacenar la información del usuario durante mucho tiempo.
El uso de la sesión para guardar la información de inicio de sesión del usuario, aunque elimina el problema del engaño de las cookies, la sesión no se puede almacenar durante mucho tiempo (la sesión predeterminada de IIS caduca 20 minutos después de que el usuario deja de responder), por lo que se describe el método de almacenamiento híbrido Cookies + Sesión. en esta sección se produce.
Hay dos variantes de este método. La primera es almacenar el nombre de usuario y la contraseña en Cookies. Cuando el usuario visita una página, la Sesión se lee primero. Si hay contenido, la Sesión prevalecerá. se leerá y se utilizará la información proporcionada en las Cookies. Inicie sesión de forma opaca con su nombre de usuario y contraseña para determinar si el contenido de las cookies es legal. Si es legal, se almacenará en la Sesión. El código para implementar este método es el siguiente:
vbs:
Copie el código de código de la siguiente manera:
<%
Nombre de usuario y contraseña tenues
nombre de usuario = Sesión(nombre de usuario)
si nombre de usuario = entonces
' No hay información de inicio de sesión de usuario en la sesión
nombre de usuario = Solicitud.Cookies(nombre de usuario)
contraseña = Solicitud.Cookies(contraseña)
' Tenga en cuenta que el nombre de usuario y la contraseña obtenidos en las dos oraciones anteriores deben evitarse de vulnerabilidades de inyección SQL (es decir, se filtran las comillas simples'), que se omiten aquí.
si nombre de usuario = o contraseña = entonces
'El usuario no ha iniciado sesión
...
demás
' Esto supone que los objetos conn y rs han sido creados
rs.Open SELECCIONE TOP 1 * DESDE [usuario] DONDE nombre de usuario =' & nombre de usuario & ' AND contraseña =' & contraseña & ', conn, 1, 3
si rs.eof entonces
'La información en las cookies es ilegal
...
demás
'La información de las cookies es legal, inicia sesión automáticamente
Sesión (nombre de usuario) = nombre de usuario
...
terminar si
terminar si
demás
'La información del usuario ya existe en la sesión, léala directamente
...
terminar si
%>
js:
Copie el código de código de la siguiente manera:
<%
var nombre de usuario, contraseña;
nombre de usuario = Sesión (nombre de usuario) +;
if (nombre de usuario == || nombre de usuario == indefinido) {
// No hay información de usuario en la sesión
nombre de usuario = Solicitud.Cookies(nombre de usuario) +;
contraseña = Solicitud.Cookies(contraseña) + ;
// Tenga en cuenta que el nombre de usuario y la contraseña obtenidos en las dos oraciones anteriores deben evitar vulnerabilidades de inyección SQL (es decir, filtrar las comillas simples '), que se omiten aquí.
if (nombre de usuario == || nombre de usuario == indefinido || contraseña == || contraseña == indefinido) {
//El usuario no ha iniciado sesión
...
}
demás {
// Esto supone que se han creado los objetos conn y rs
rs.Open(SELECT TOP 1 * FROM [usuario] DONDE nombre de usuario=' + nombre de usuario + ' AND contraseña=' + contraseña + ', conexión, 1, 3);
si (rs.eof) {
//La información en las Cookies es ilegal
...
}
demás {
//La información en Cookies es legal, inicia sesión automáticamente
Sesión(nombre de usuario) = nombre de usuario +;
...
}
}
}
demás {
// La información del usuario ya existe en la sesión, léela directamente
...
}
%>
Sin embargo, este método no es muy seguro para los usuarios porque el navegador transmitirá cookies cada vez que visiten la página y, una vez que otros obtengan las cookies que contienen contraseñas, la cuenta del usuario será robada. Para esta situación, existe un segundo método, que consiste en agregar un campo código de verificación en la base de datos de información del usuario. Cuando el usuario inicia sesión, se genera aleatoriamente un valor de verificación entero largo y se almacena en el campo código de verificación, y el nombre de usuario y este código de verificación. Se agregan valores de almacenamiento. Al verificar la información del usuario en Cookies, solo se verifican el nombre de usuario y el código de verificación. La ventaja de este método es que incluso si un pirata informático obtiene las cookies del usuario, solo puede utilizar el código de verificación generado temporalmente para iniciar sesión, pero no puede obtener la contraseña del usuario. Siempre que este usuario inicie sesión nuevamente con el nombre de usuario y la contraseña, el valor del código de verificación cambiará y los piratas informáticos no podrán iniciar sesión con el código de verificación original.
La implementación de este método sólo requiere ligeros cambios en el código del método 1 anterior. Primero, en su programa de inicio de sesión, debe agregar un párrafo donde se almacena la información del usuario después de la verificación:
vbs:
Copie el código de código de la siguiente manera:
<%
Respuesta.Cookies(código de verificación) = int(rnd * 2100000000)
%>
js:
Copie el código de código de la siguiente manera:
<%
Response.Cookies(verifycode) = Math.floor(Math.random() * 2100000000);
%>
Luego, cambie la verificación de Cookies (contraseña) a la verificación de Cookies (código de verificación) en el código de verificación proporcionado anteriormente.
4. Conclusión
A través de nuestro análisis y procesamiento, la vulnerabilidad de suplantación de cookies se ha resuelto por completo. Desde entonces, nuestro programa ASP se ha vuelto más seguro.