Buenas a todos, en anteriores entregas de nuestra serie de artículos sobre seguridad web hemos hablado de inyecciones SQL o CSRF, hoy trataremos las vulnerabilidades de tipo Cross-Site Scripting (XSS) y os explicaremos como protegerlas.
Una vulnerabilidad XSS permite a un atacante inyectar código script para que sea ejecutado por una victima.
Se distinguen 2 tipos de XSS:
- Directa (persistente): el fragmento de código se encuentra almacenado en la aplicación Web y posteriormente es mostrado sin ningún tipo de filtrado (tipico hace algunos años en foros y correos en los que al abrir un mensaje se ejecutaba el código una y otra vez)
- Indirecta (reflejada): se introduce el fragmento de código como contenido de algún parámetro usado por la aplicación Web (un ejemplo fue el XSS de la página que podéis ver a la derecha)
Si un aplicativo sufre vulnerabilidades de tipo XSS se expone a:
- Ejecución de scripts en el navegador de la víctima.
- Robo de credenciales.
- Inserción de contenido hostil.
- Phising.
- etc.
Para solucionar los problemas provocados por los ataques XSS es útil tomar una serie de recomendaciones:
- Validación de la entrada de datos: es necesario validar todas las entradas de datos para que no contengan caracteres especiales, como “<”, “>”, “(“, “)”. La validación debe hacerse siempre en el lado del servidor y nunca en el cliente mediante código Javascript, ya que este tipo de validaciones pueden ser modificadas.
- Las reglas de validación de entrada de datos deben filtrar los valores hexadecimales de cada carácter (por ejemplo el caracter “<”, 3C)
- Codificación fuerte de salida: asegurar que toda la información suministrada por el usuario sea apropiadamente codificada antes de devolver la página, consiguiendo que toda la información sea considerada como texto y no como contenido activo