¿Es esto vulnerable al exploit XSS?

3

Una llamada típica ajax:

$.ajax({
  url: "http://mywebsite/script?param=" + $("#field").val(),
  dataType: "jsonp",
  success: function(response) {
      $("#id").html(response);
  },
 });

envía un parámetro. El parámetro se filtra y se desinfecta en el lado del servidor. El servidor devuelve una respuesta de texto simple que se utiliza para mostrarse en la página HTML. Sin embargo, es posible interceptar la respuesta e incluir una etiqueta. Debido a que el código usa $ ("# id"). Html (respuesta) para mostrar la respuesta, se ejecutará la respuesta modificada, incluido el contenido.

Como esto ocurre solo cuando la respuesta del servidor es manipulada y antes de mostrarse en el cliente, ¿es esto vulnerable a XSS? ¿Cómo puede ser explotado?

Como método preventivo es mejor usar $ ("# id"). text (respuesta); en lugar de $ ("# id"). html (respuesta) para garantizar que la cadena de respuesta, incluso cuando se intercepta, se muestre como texto?

    
pregunta GearLab 30.12.2015 - 15:31
fuente

1 respuesta

2

No nos ha proporcionado suficiente información para determinar si esto es vulnerable a XSS. XSS ocurre cuando una entrada de usuario se muestra en un navegador sin un escape adecuado. Por ejemplo:

$.ajax({
  $("#id").html($("#field").val());
 });

es vulnerable porque el valor de entrada de #field se muestra en el navegador sin escapar.

Si nos fijamos en su ejemplo:

$.ajax({
  url: "http://mywebsite/script?param=" + $("#field").val(),
  dataType: "jsonp",
  success: function(response) {
      $("#id").html(response);
  },
 });

existe una vulnerabilidad si response contiene todo o parte del valor de no escapado de #field . Si response solo puede contener cadenas constantes como OK y Error , o si se realizó un escape HTML adecuado en la entrada del usuario, entonces está seguro. De lo contrario, tienes una vulnerabilidad.

    
respondido por el Neil Smithline 30.12.2015 - 21:30
fuente

Lea otras preguntas en las etiquetas