mitigación de secuestro de sesión

3

Me gustaría reducir la probabilidad de secuestro de sesión implementando una solución de token basada en cookies.

La idea es generar un hash SHA256 basado en información relacionada con el cliente, como:

PHP

$_SERVER['HTTP_USER_AGENT']

JavaScript:

function gatherUserData(){
    return ["time_zone", (new Date()).getTimezoneOffset()/60, "history_length", history.length, "browser_name",
        navigator.appName, "browser_engine", navigator.product, "browser_language", navigator.language,
        "screen_width", screen.width, "screen_height", screen.height];
}

Cuando el cliente solicita una página, desafío su token recalcularla.

Creo que es muy poco probable que un pirata informático tenga toda esta información y, aunque la tenga, la haría un poco más difícil.

¿Ayudaría a prevenir el secuestro de sesiones?
¿Recomiendas alguna otra técnica?

    
pregunta Bob 16.04.2017 - 18:29
fuente

2 respuestas

5

Esto sería efectivo contra el secuestro de sesión. También desconectaría a los usuarios cuando cambiaran el tamaño de la ventana de su navegador o cuando actualizaran su navegador.

La mejor forma de evitar el secuestro de sesiones es vincular sesiones a direcciones IP. Además, debe actuar cuando detecte una sesión secuestrada, de modo que cuando dos direcciones IP estén utilizando el mismo identificador de sesión.

En el futuro, puede evitar el secuestro de sesiones vinculando las cookies a las conexiones TLS usando Enlace de token sobre HTTP .

Edite: vea ¿Por qué las sesiones no son exclusivas de un ¿Dirección IP? para algunas desventajas de vincular sesiones a direcciones IP.

    
respondido por el Sjoerd 16.04.2017 - 18:37
fuente
2

Entonces, al considerar este problema, debe considerar el robo de sesiones como un ataque en el contexto de su aplicación.

Por lo general, los ataques de robo de sesión son objetivos en lugar de genéricos, ya que una vez que la sesión ha sido robada, el atacante tiene que hacer algo al respecto, por lo que las protecciones que son parcialmente del lado del cliente no son tan grandes como que el atacante probablemente pueda aplicar ingeniería inversa a lo que usted está haciendo. re y pasa por alto la protección.

En general, la mejor manera de reducir el riesgo de secuestro de sesión es reducir la capacidad del atacante para obtener acceso a la cookie de sesión que utiliza el sitio.

entonces cosas como

  • Revisión para XSS
  • Establecer marcas de cookies como HTTPOnly y seguro
  • Limitar el tiempo durante el cual el token es válido
  • Asegurarse de que el cierre de sesión de la aplicación termine la sesión correctamente
  • Asegurar una buena configuración SSL para reducir los riesgos de rastreo de tráfico

son útiles para reducir los riesgos. También como dice @sjoerd, puede vincular el token a una dirección IP de origen, pero eso puede ser un poco riesgoso si los clientes están detrás de servidores proxy con equilibrio de carga, donde sus solicitudes podrían provenir de diferentes direcciones IP durante una sola sesión.

La sugerencia en su pregunta es probablemente un poco frágil y si un atacante puede obtener acceso al navegador del usuario (que es probable que necesiten, para robar su token de sesión en primer lugar) puede obtener acceso a toda la información que usted Lo utilizo para crear el token en primer lugar y pasárselo a usted, sin pasar por la protección.

    
respondido por el Rоry McCune 16.04.2017 - 20:44
fuente

Lea otras preguntas en las etiquetas