È vulnerabile allo sfruttamento XSS?

3

Una tipica chiamata ajax:

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

invia un parametro. Il parametro viene filtrato e disinfettato sul lato server. Il server restituisce una semplice risposta di testo che viene utilizzata per essere visualizzata nella pagina HTML. Tuttavia è possibile intercettare la risposta e includere il tag. Poiché il codice utilizza $ ("# id"). Html (risposta) per visualizzare la risposta, verrà eseguita la risposta modificata, incluso il contenuto.

Poiché ciò si verifica solo quando la risposta del server viene manipolata e prima visualizzata sul client, è vulnerabile a XSS? Come può essere sfruttato?

Come metodo preventivo è meglio usare $ ("# id"). text (response); invece di $ ("# id"). html (risposta) per garantire che la stringa di risposta, anche se intercettata, venga visualizzata come testo?

    
posta GearLab 30.12.2015 - 15:31
fonte

1 risposta

2

Non ci hai fornito abbastanza informazioni per determinare se questo è vulnerabile a XSS. XSS si verifica quando un input dell'utente viene visualizzato in un browser senza escape appropriato. Ad esempio:

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

è vulnerabile perché il valore di input da #field viene visualizzato nel browser senza eseguire l'escape.

Se guardiamo il tuo esempio:

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

esiste una vulnerabilità se response contiene tutto o parti del valore senza escape di #field . Se response può contenere solo stringhe costanti come OK e Error , o se è stato eseguito un escape HTML corretto sull'input dell'utente, allora sei sicuro. Altrimenti, hai una vulnerabilità.

    
risposta data 30.12.2015 - 21:30
fonte

Leggi altre domande sui tag