Pregunta

    

Esta pregunta ya tiene una respuesta aquí:

         

Estoy utilizando 2 variables de cookie (día de vencimiento 7), que es identificación de usuario y hash. Hash es codifican sha1 de agente de usuario y el ID de usuario. En este caso, algún hacker puede iniciar sesión que se roba el navegador del conocimiento de la galleta. ¿Qué camino debería seguir la práctica, o que es mejor para mí recordar los problemas de seguridad?

¿Fue útil?

Solución

Si bien se puede desmenuzar un user_id y secret_key, cualquier persona que intercepta esta cookie puede acceder a su aplicación. Además de esto, se puede hacer para que sus Recuérdame galletas de echarse a perder muy rápidamente. A nadie le gusta una galleta rancia.

Se puede almacenar el registro de hora de la última visita de cada usuario en su base de datos y en la cookie. Cada vez que lea la cookie para registrar el usuario en, comprobar para ver que tanto las marcas de tiempo coinciden. Si no lo hacen, denegar al usuario. Si lo hacen, actualizar las marcas de tiempo.

El uso de este método, que vuestros usuario vuelve a su sitio, todas las viejas galletas de echarse a perder. Un pirata informático que ha interceptado una galleta ahora tiene una galleta rancia valor porque él no sabe la marca de hora exacta en la cookie actual. Por supuesto, el hacker puede utilizar una cookie fresco todo lo que quiere hasta que el usuario inicia sesión de nuevo.

//check for cookie
if(isset($_COOKIE['remember_me'])) {
   // get hash and time stamp from cookie
   $hash = substr($_COOKIE['remember_me'],0,40);
   $last_visit = substr($_COOKIE['remember_me'],41);

   // query your db with $hash and $last_visit

   // if hash and time stamp match up
      // log in

      // store the current time stamp in a variable to use for both
      $time = date("Y-m-d H:i:s");
      // update the time stamp in your cookie
      $cookie = $pass . "-" . $time;
      setcookie('remember_me', $cookie, time()+60*60*24*100, '/');
      // update the time_stamp in your database
   else {
      // remove the remember me cookie
      setcookie('remember_me', '', time()-42000, '/')
   }

Este método ofrece una pequeña cantidad de la seguridad, y sin duda debe ser utilizado a lo largo de los métodos propuestos secundarios en otras respuestas. Una de las claves hash debe ser almacenada en la cookie. Un recuerdo me cookie no puede ser perfectamente segura, por lo que la contraseña de reingreso debe ser requerida por cualquier acceso adicional a las funciones de datos o aplicaciones altamente sensibles.

También recomiendo el nombramiento de su galleta de algo más que 'remember_me' para que sea un poco más difícil de encontrar. Mientras que no aporta mucha seguridad, en su caso, el nombramiento de su cookie 'ht33424' toma el mismo tiempo que nombrarlo 'remember_me' o 'hack_me'.

Otros consejos

Puede establecer la fecha de caducidad simlply como ahora, más de un año en la galleta, pero luego tener un campo de contraseña entrar en todas las áreas sensibles, al igual que la aplicación Amazon usos. Una cookie secuestrado otorgará acceso, pero a la compra o modificar nada personal requiere contraseña para ser reingresado.

El problema de 'Recordarme' tablas es que si un hacker puede tener acceso a esta tabla se puede crear y entrada a todas las cuentas que él quiere. Se puede argumentar que refuerza la seguridad de un memorizar característica, pero debe sopesarse con los riesgos de suavizar las áreas de rodilla de seguridad.

En lo personal, yo crear un hash aleatoria y almacenarlo en un "yo recuerde" mesa. La tabla también tiene el agente de usuario, ID de usuario y la dirección IP. Compruebo tanto cada vez que vuelva a registrarse el usuario desde el recuérdame-función. Y si el usuario se conecta a cabo manualmente, simplemente eliminar esa fila de la tabla. Entonces, si se inicia sesión de nuevo, se crea un nuevo hash de azar. Realmente no hay manera de combatir a alguien que huele paquetes con un sistema me recuerda (a menos que utilice las cookies seguras HTTPS con el único conjunto de la bandera). Así que utilice una conexión segura con HTTPS sólo las cookies. Si no puede, entonces, al menos, hacer que el modo aleatorio el hash si se descubre que al menos puede generar un nuevo hash para matar a ese inicio de sesión ...

Se puede eventualmente utilizar sesiones para almacenar el estado del usuario. Sin embargo, la celebración de la sesión, siempre causan mismo problema, cuando sea robado ID de sesión. Usted puede unirse a informaciones de galletas con algún otro -. Como el navegador o la dirección IP, pero que podría causar un problema, cuando el usuario no tiene IP estática

De todos modos, la celebración de un identificador de sesión es más seguro que sha1 sólo poner de usuario endoded contraseña para galletas.

HMAC

Por lo general hacer de esta manera, así que no tengo nada que tienda en el lado del servidor de bases de datos o similar.

Se tiene que generar cadena aleatoria que se convierte en su "clave secreta", y que usted tiene que almacenar en el lado del servidor (probablemente en una secuencia de comandos de configuración de php como una constante) y que nunca tenga que decirle a nadie. Voy a llamar a este SECRET_KEY clave secreta.

A continuación, la cookie tiene que poner dos valores:

  • USER_ID: El ID de usuario del usuario que obtendrá el inicio de sesión automático
  • HASH: Un hash criptográfico seguro de USER_ID y SECRET_KEY. Así, por ejemplo, md5(USER_ID . "-" . SECRET_KEY). (Se prefiere diferente Algo que MD5, como sha1 o sha256).

Así que su cookie final podría ser:. USER_ID:HASH

A continuación, cuando se tiene que comprobar si una cookie es un verdadero recuérdame galleta, usted tiene que hacerlo:

function isCookieGenuine($cookie_value) {
  list($value, $hash) = explode(':', $cookie_value, 2);

  if (md5($value . "-" . SECRET_KEY) == $hash)
    return true;
  else
    return false;
}

El punto es que sólo se puede generar un hash que pasa esta comprobación porque el hash necesita no sólo el USER_ID sino también la SECRET_KEY que se desconoce por alguien que no sea el servidor! :)

Como se señaló en los comentarios que usted puede hacer esto mediante el uso de la función hash_hmac en PHP> = 5.1.2: http://us.php.net/manual/en/function.hash-hmac.php

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top