2011-07-27 10 views
8

Estoy ocupado con un sistema de inicio de sesión para mi proyecto.Comprobando si el usuario ha cambiado el valor de cookie, manualmente

Solo para dar un paso extra hacia la seguridad .. ¿Cómo puedo verificar/detectar si un usuario ha cambiado manualmente un valor de cookie?

¿Hay alguna manera fácil de hacerlo? ¿O tengo que establecer una variable de sesión adicional y hacerla coincidir con eso? Habiendo dicho esto, ¿es una sesión normal de ASP.Net trazable por el navegador? Y visible para el usuario?

Gracias.

Respuesta

9

Puede agregar una firma digital al valor de la cookie y verificar la firma cuando la vuelva a leer. De esta forma, si se manipula el valor de la cookie será muy evidente.

private string sign(string hashStr, byte[] secret) 
{ 
    // Compute the signature hash 
    HMACSHA1 mac = new HMACSHA1(secret); 
    byte[] hashBytes = Encoding.UTF8.GetBytes(hashStr); 
    mac.TransformFinalBlock(hashBytes, 0, hashBytes.Length); 
    byte[] hashData = mac.Hash; 

    // Encode the hash in Base64. 
    string hashOut = Convert.ToBase64String(hashData); 

    return hashOut; 
} 

Editar: solucionado el codificador por lo que es explícitamente UTF-8.

Como de costumbre, también debe estar seguro de añadir un poco de sal a la cadena antes de llamar a esto, vea: Secure hash and salt for PHP passwords

+0

Confundido, ¿qué es 'headerencoder'? –

+0

Lo siento, código de cortar y pegar :) Voy a editar. –

+0

Gracias Bill, definitivamente usaré esto. –

2

Si tiene que manejar información tan delicada, le sugiero que no la almacene en las cookies de los usuarios. En su lugar, use sessions para almacenar dichos valores ya que el usuario no podrá alterar dichos valores.

1

¿Por qué no encriptas el valor de la cookie? De esta forma, es difícil para el usuario realmente cambiarlo correctamente. Al igual que en la respuesta anterior, si es realmente confidencial, la cookie no es el lugar para almacenarla, pero el cifrado brinda un poco más de protección.

+0

El cifrado no es suficiente: puede cambiar los valores y no se detectará (aunque el descifrado puede fallar, y por supuesto el usuario está haciendo cambios a ciegas) - también debe firmar la cookie, como sugiere Bill Brasky. – blowdart

+0

realmente hermano, no creo que esta respuesta merezca un voto negativo. revisa esta respuesta, es una opción. depende de cuáles sean tus intenciones Puede ser el cifrado funcionará para su propósito. http://stackoverflow.com/questions/523629/tips-on-signed-cookies-instead-of-sessions –

0

Añadir una segunda variable a la cookie, que es único para el primer valor.

En Page_Load compare los dos valores a la base de datos.

Si no coinciden con un registro, elimine la cookie.

Cuestiones relacionadas