Cómo prevenir XSS al transferir contenido de páginas web dentro de XML

1

Tengo una aplicación web ASP.NET que utiliza HTTPS y solicitud / respuesta basada en XML. Parece que la cookie de sesión de un usuario se puede recuperar a través de XSS, si se intercepta la solicitud / respuesta y se agrega un código JavaScript malicioso como carga útil.

Dado que es una solicitud-respuesta basada en XML, la carga útil debe estar codificada en HTML. Aquí hay un ejemplo:

"<iframe name="if(0){\u0061lert(1)}else{\u0061lert(document.cookie)}" onload="eval(name)"/>

¿Hay alguna forma en que pueda detener la ejecución de cualquier script malicioso?

  1. ¿Cómo identificar una solicitud / respuesta que contenga un script malicioso ? Noté que todos los scripts maliciosos deben contener " , & , ( y ) , pero los datos del usuario también pueden contener estos caracteres.
  2. ¿Cómo detengo la ejecución de este script en los navegadores de los usuarios? Ya he intentado decodificar todas las solicitudes / respuestas para corromper el script que funciona, pero mis solicitudes / respuestas contienen datos de usuarios que contienen caracteres como & . Esto lleva a que todo el XML se corrompa, lo que bloquea la aplicación.
pregunta KatariaA 01.06.2014 - 23:02
fuente

1 respuesta

1

Estás en el camino correcto, con codificación XML. No se puede predecir todo el contenido malicioso posible, por lo que codificar datos dinámicos para garantizar que sea benigno es el enfoque correcto. El problema con el que te has encontrado es que las cosas se ponen realmente difíciles si intentas manejar la codificación de salida para múltiples ubicaciones de salida a la vez. El enfoque correcto (y usted está cerca) es codificar solo para la ubicación de salida actual , y permitir que otras ubicaciones de salida se codifiquen por sí mismas.

Creo que lo que te confunde es que estás pensando en el XML como si fuera la salida en bruto del HTML. Debe considerar el XML como parte de su pila de protocolos de comunicaciones de red y el HTML como salida separada.

Si leo esto correctamente, tienes un código de servidor que escribe un mensaje XML y otro código de cliente que se ejecuta en el navegador web, recibe el mensaje XML y escribe en el contexto de HTML, JavaScript, URL o CSS. (Si leo incorrectamente, es probable que tenga un back-end que escribe XML en un front-end que está escribiendo HTML, JavaScript, URL y CSS. En este caso, considere que el front-end es el cliente del back-end en el resto de este post.)

Por lo tanto, el servidor es responsable de escribir de forma segura XML y el cliente es responsable de escribir correctamente los datos HTML, JavaScript, URL y CSS. De esta manera, el código que escribe la salida es responsable de la presentación segura de esa salida.

    
respondido por el atk 02.06.2014 - 00:17
fuente

Lea otras preguntas en las etiquetas