4 dic 2012

Filtrando XSS en .Net, PHP y J2EE (Parte I de II)

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
Eso es todo por hoy, en el próximo artículo de la cadena realizaremos algunas recomendaciones expecíficas para filtrar XSS en los lenguajes J2EE, PHP y .NetSaludos!

1 comentario:

  1. Hola!Yo pondría como recomendación principal la codificación de la salida, ya que el no permitir caracteres como o () (o las "comillas dobles", que son típicas en formularios) puede no ser factible en muchos casos, por ejemplo en el campo sobre el que estoy escribiendo ahora mismo, que permite texto libre :DAdemás, habitualmente lo que se quiere no es filtrar estos caracteres en la entrada, sino limitarla a los justos y necesarios que necesitas (Lista blanca en vez de lista negra), ya no sólo para XSS sino para cualquier parámetro de entrada

    ResponderEliminar