Detener el secuestro de sesiones

2

Si te has dado cuenta, pongo "detener" en lugar de "prevenir" en el título porque quiero que mi aplicación PHP sea lo más segura posible. Me pregunto si alguien tiene mejores formas de evitar el secuestro de sesiones que lo que ya tengo. Me gustaría mantener las medidas de seguridad de mi código PHP y no en ninguna de las configuraciones del servidor web.

Esto es lo que estoy haciendo ahora mismo:

  • Cuando un usuario inicia sesión, session_regenerate_id () se llama
  • Se crea una variable de sesión que almacena la dirección IP de los usuarios que se decide a partir de HTTP_X_CLUSTER_CLIENT_IP, HTTP_CLIENT_IP, HTTP_FORWARDED, HTTP_FORWARDED_FOR o REMOTE_ADDR (el que se encuentre primero)

¿Alguien tiene algún consejo sobre qué más debería hacer? También me preguntaba cuál es el mejor método para determinar la dirección IP de los usuarios para que no pueda ser falsificada.

    
pregunta ub3rst4r 18.11.2012 - 03:19
fuente

1 respuesta

4

En primer lugar, elimine todas las comprobaciones propuestas. Se basan en la entrada controlada por el atacante para imponer restricciones de seguridad. Nada de esto es "seguro", es simplemente una tontería.

Es imposible falsificar su dirección IP a través de Internet debido al protocolo de enlace de 3 vías , deberías intentar estudiar redes, en realidad es bastante interesante. El uso de la variable PHP HTTP_FORWARDED_FOR para seguridad es una infracción de CWE-291: Confiando en la dirección IP autoinformada .

Entonces, ¿cómo evitar el "secuestro de sesión"? Evita que el atacante obtenga el ID de sesión en primer lugar .

OWASP A9 - Protección de la capa de transporte insuficiente y OWASP A2- Cross Site Scripting .

Establezca estas configuraciones de sesión de PHP:

session.cookie_httponly = 1 (helps mitigate xss)
session.session.use_only_cookies = 1 (prevents session fixation)
session.entropy_file = "/dev/urandom" (better entropy source)
session.cookie_lifetime = 0  (smaller exploitation window for xss/csrf/clickjacking...)
session.cookie_secure = 1 (owasp a9 violations)
    
respondido por el rook 18.11.2012 - 03:44
fuente

Lea otras preguntas en las etiquetas