2009-08-16 10 views
11

Actualmente estoy revisando una de mis aplicaciones web y esperaba algún consejo para mejorar mi seguridad.Asegurando la autenticación basada en cookies

Notaré que la aplicación está en ASP.net y la implementación actual me impide usar la autenticación integrada. Esto tampoco es de ninguna manera una aplicación que requiere alta seguridad, solo me gusta tener mis bases cubiertas.

En el pasado he almacenado el id y un token. El token es un hash del ID del usuario + el Salt del usuario (reutilizando el valor de la información de autenticación) Cuando un usuario visita el sitio, el ID se compara con el token y se lo autentica en consecuencia.

Se me ocurre que aquí hay un gran agujero. Teóricamente, si alguien tiene en sus manos un valor de sal, todo lo que tendrían que hacer es adivinar el algoritmo hash e iterar a través de las posibles identificaciones hasta que ingresen. No espero que esto suceda, pero todavía parece un error .

¿Algún consejo sobre cómo confirmar correctamente que las cookies de usuario no se han modificado?

+0

Añadiré que parte de lo que me molesta es que si alguien obtuviera los valores de sal y los hashes de contraseña para el sitio, no les haría ningún bien con la autenticación de contraseña pura. Me parece que un buen método de autenticación de cookies funcionaría de manera similar. –

Respuesta

10

la manera más sitios web hacen es para autenticar el y si tienen éxito, envían al navegador una cookie para almacenar y enviar cualquier solicitud posterior. Si un atacante podía obtener el token (antes de que expirara), podría hacerse pasar por el usuario.

Debido a esto, la cookie y el proceso de autenticación siempre deben llevarse a cabo a través de una sesión https. La única forma real en que un atacante tiene que hacerse con la cookie es interceptarla en la computadora del usuario final y, si es capaz de hacerlo, probablemente pueda instalar un registrador de pulsaciones clave y obtener la contraseña del usuario de todos modos.

En cuanto a qué tipo de token usar, no importa, siempre que sea lo suficientemente pseudoaleatorio para que resulte adictivo para un atacante. Yo mismo uso GUIDs. si necesita información adicional en la cookie, aparte de solo un sessionid, puede adjuntarle un GUID y, probablemente, un hash o encriptarlo solo para un enfoque de cinturón y abrazaderas.

+0

Al utilizar la autenticación de cookies, debe tener cuidado con la falsificación de scripts entre sitios (CRSF). El navegador está enviando la credencial en nombre del usuario y también es posible engañar al navegador para que la envíe a un atacante. Pero eso se puede prevenir/minimizar usando un nonce. Google para obtener más información. – thebiggestlebowski

2

dos maneras:

  1. cifrarlo con un algoritmo simétrico (AES).

Esto es bueno porque le permite descifrarlo; pero se puede argumentar que no es necesario descifrarlo (dependiendo de qué más guarde allí).

  1. Hash y firme ella. De nuevo, esto utiliza una clave privada, por lo que incluso si alguien conoce los contenidos exactos, no pueden reproducir el hash, porque necesitan la clave privada.

Probablemente (y previamente) vaya con la opción n. ° 1.

0

¿por qué no almacenar el hash en la cookie o cualquier otro número seudoaleatorio? Luego verifique con la base de datos para obtener la identificación del usuario.

Otras cosas: sólo hace los http galleta, es decir, no se pueden establecer con javascript Si se trata de una opción, lo hacen solamente se transmite con los datos https

4

La mejor manera es almacenar una ID de sesión como el valor de la cookie.

Cuando el usuario inicia sesión, crea un registro en la base de datos o en otro almacén de sesión con una ID de sesión aleatoria. Coloque la identificación en una cookie. Cuando vea la cookie más tarde, puede recuperar toda la información del usuario de la base de datos.

Este enfoque tiene las ventajas siguientes,

  1. Es muy seguro. ID de sesión es simplemente un número aleatorio. No tiene que preocuparse por la clave comprometida o sal.
  2. La cookie se puede revocar fácilmente desde el servidor. Todo lo que tiene que hacer es eliminar el registro de la sesión y eso inutiliza la ID.
  3. El valor de la cookie puede ser realmente corto.

Si esto no funciona, intente el cifrado. Hash sería mi última opción. Hash en sí es inútil. Tienes que almacenar la identificación del usuario y otra información en una cookie diferente en claro. Terminaste exponiendo la información del usuario.

+1

zz coder: si bien es cierto, deberá exponer el UserID si lo tiene; generalmente no es crítico, por lo que no hay problema para exponerlo. Su enfoque de ID de sesión está bien, pero, como usted dice, debe guardar algo en el DB. Esto puede no ser deseado si se trata de información que debe vivir por bastante tiempo. –

Cuestiones relacionadas