2.11 Seguridad

Seguridad

Para el manejo de las sesiones tenemos un abanico de funciones que nos facilitaran su uso. Todas la variables de sesión son accesibles mediante arrays en la variable global $_SESSION.

  • session_start: inicializa una sesión y crea el valor o identificador de la sesión.
  • session_id: devuelve el valor de la sesión actual.
  • session_regenerate_id: genera un nuevo identificador para la sesión actual.
  • session_unset: limpia todas la variables de sesión registradas.
  • session_destroy: elimina todas la variables de sesión.

Como hemos comentado anteriormente las sesiones nos permiten conservar información de un usuarioy también podemos limitar el acceso a ciertas páginas y definir un tiempo de visualización o acceso al usuario en ciertos sitios. Muchas veces el usuario se despista y deja de prestarle atención a nuestra aplicación web, un ejemplo claro son las redes sociales, chats, casi todas las aplicaciones desarrolladas en PHP utilizan esta herramienta que nos permitirá gestionar mejor el flujo de accesos de los usuarios.

Otro de los motivos de bastante peso para una buena práctica del uso de las sesiones es prevenir el secuestro o robo de sesión, en ingles llamado Session Hijacking, un atacante consigue el identificador de sesión entre una página web y un usuario, de forma que puede hacerse pasar por este y acceder a su cuenta en esa página web.

Existen una gran cantidad de metodologías para el secuestro de sesión, voy a listar algunas de ellas:

  • Fuerza bruta: el atacante probará identificadores aleatorios hasta encontrar el correcto.
  • Uso de servidor compartido: los archivos donde se alojan las sesiones es en el servidor por lo cual si es compartido podran acceder a ellos fácilmente. Podemos usar 2 métodos para dificultar su extracción o acceso:
  • Podemos guardarlos en un directorio donde sólo pueda acceder PHP con la función: session_save_path No es aconsejable debido a que un atacante conociendo su localización podría acceder.
  • session_set_save_handlercon esta función podemos guardar las sesiones en la base de datos.
  • Cross Site Scripting: si la página web es vulnerable el atacante puede inyectar código java script que envía las cookies de un usuario a su cuenta.
  • Podemos arreglar el XSS filtrado, en WordPress podeis ver el siguiente manual con las información “Buenas prácticas para el desarrollo de plugins”.
  •  Podemos prevenir haciendo que la mayoria de navegadores no puedan manejar con java script a través del atributo “HttpOnly” –>

ini_set('session.cookie_httponly', 1);

  • Snifing: un atacante que pueda capturar las tramas de la red para poder analizar los paquetes y de esta forma obtener el identificador de la sesión.
  • Las soluciones pueden ser, una buena fortificación en la red para que el intruso no pueda acceder y el uso del cifrado HTTPS.

Definir un tiempo de vida a la variable de sesión de PHP.

Después de dar algunas pautas contra los ataques más usuales de robo de las sesiones, otra buena práctica es definir un tiempo de vida a las sesiones para que un usuario logueado no se  quede “dormido” con la sesión abierta. En nuestra aplicación tendrá un limite de tiempo y cuando se agote se redireccionará a una página web para su nuevo acceso a la plataforma y creación de una nueva sesión.

 Código de SEguridad

 Imagen16. Código ejemplo

Podemos modificar las directrices de php.ini directamente en la ejecución. Puede ser otra forma de definir el tiempo bastante más cómoda que la anterior:

ini_set(”session.cookie_lifetime”,120);

ini_set(”session.gc_maxlifetime”, 120);

Recuerda ponerlo antes de la instrucción “session_start()”.

Revisa el pdf de SEGURIDAD para conocer los posibles ataques que puede sufrir un sitio web.

 

Arriba