¿La configuración de mi sesión es lo suficientemente segura?

7

Estoy desarrollando una aplicación web de alojamiento y uso compartido de archivos.

¿Son las siguientes configuraciones de sesión PHP lo suficientemente seguras?

ini_set('session.cookie_httponly', 1);
ini_set('session.cookie_lifetime', 0); 
ini_set('session.entropy_file', '/dev/urandom');
ini_set('session.hash_function', 'whirlpool'); //is whirlpool that necessary?
ini_set('session.use_only_cookies', 1);
ini_set('session.hash_bits_per_character', 5);
ini_set('session.cookie_secure', 1);

session_name('sid');

session_start();

if (!isset($_COOKIE['sid'])) {
    $_SESSION['token'] = CryptoCharGen::alnum(); //20 chars
}

Para agregar a la seguridad:

  • Vincular un token CSRF criptográficamente fuerte al usuario sesión para la validación de formularios.
  • Regenerar un nuevo ID de sesión al iniciar y cerrar sesión y destruir la sesión anterior.
  • Regenerando un nuevo token CSRF luego de enviar con éxito el formulario cualquiera .

He leído para cambiar el nombre del nombre predeterminado de la sesión de PHP, así que lo llamé sid en su lugar. ¿Es eso lo suficientemente bueno?

¿Debo generar el ID de sesión con mi propio generador? (CryptoCharGen)

¿Debo preocuparme por cómo nombro mis variables de sesión?

    
pregunta Kid Diamond 10.05.2014 - 11:08
fuente

2 respuestas

6

También puedes agregar session.entropy_length = 512 y session.use_trans_sid = 0 .

Tampoco te olvides de:

  1. utilizar https
  2. regenere id de sesión si cambia los permisos de los usuarios.
  3. hacer tiempo de espera de sesiones. El tiempo depende de tu aplicación.

No tiene nada que ver con la seguridad, pero ¿por qué no cambiar session.hash_bits_per_character a 6. Cuanto mayor sea el número, menor será la cadena enviada desde y hacia el servidor.

    
respondido por el Salvador Dali 11.05.2014 - 13:51
fuente
1

Aquí hay algunos pasos adicionales que pueden hacer que la sesión sea segura.

  1. Limite la validez de la sesión por un corto tiempo aceptado
  2. Siempre transmita los identificadores de sesión en SSL / TLS
  3. Nunca enviar ID de sesión en las URL (usar publicación método)
  4. Cree tokens CSRF fuertes y asegúrese de que los tokens CSRF estén validados.

Puedes encontrar más en

respondido por el Kasun 10.05.2014 - 22:54
fuente

Lea otras preguntas en las etiquetas