Come fermare JS dall'esecuzione quando viene passato come parametro all'URL? (nessun tag script)

0

Avevo bisogno di interrompere un attacco XSS quando il carico utile è inserito nell'URL come parametro. In questo caso, tuttavia, non ci sono tag script . Questo è il mio URL che causa un attacco XSS:

localhost/example/file.jsp?testParm1=');alert(1);('&testParm2=');alert(1);('

Quando premo Invio dopo aver digitato questo nel mio browser, viene visualizzata una finestra di avviso che dice "1". Quando ho cliccato su "OK", la finestra di avviso che diceva "2" si avvicinò.

Sto usando JSP, quindi in file.jsp, prendo i parametri passati:

<%
   // Get url parameters
   String lTestParm1 = myObj.retrieveString( "testParm1" );
   String lTestParm2 = myObj.retrieveString( "testParm2" );
%>

Solitamente per la prevenzione dell'XSS vorrei sfuggire ai caratteri speciali in modo che non eseguisse ciò che è nel parametro come javascript (ad esempio se inserisco testParm1=<script>alert('hey')</script> nell'URL), ma non posso farlo poiché ci sono nessun tag script .

Ora nella parte JS del codice anche in file.jsp:

<script language="JavaScript" type="text/javascript">

    var lWindow = popUp( '<%= lTestParm1 %>');    // I think it is happening here

    <custom_tag:If condition="<%= lTestParm2 == null %>">
        // Do something
    </custom_tag:If>
    <custom_tag:Else>
        window.location.replace( '<%= lTestParm2 %>' );    // And possibly here
    </custom_tag:Else>

</script>

Ho inserito un paio di commenti accanto alle 2 righe in cui penso che il problema sia.

Per provare a interrompere questo attacco XSS, ho sostituito ogni apostrofo con 2 apostrofi nell'URL. Questo sembrava funzionare per questo caso.

Non sono riuscito a trovare altri articoli / domande relative a questo problema, ma ho trovato delle somiglianze con le domande di sostituzione apostrofo dell'iniezione SQL. Hanno detto che ci sono ancora molti modi per superare apostrofo la sostituzione da sola.

Ecco un link a una delle domande: link

Questo mi ha fatto chiedere se la mia soluzione è sufficiente, o se ci sono ancora modi per eseguire un attacco XSS anche con la mia apostrofia sostitutiva.

    
posta Michael 10.07.2017 - 22:53
fonte

1 risposta

1

Un buon modo per occuparsi di questo sarebbe sostituire tutti i caratteri speciali ( specificamente i seguenti 6 # / '(); ) con i loro equivalenti di entità di carattere HTML. Apparirà visivamente lo stesso ma javascript non lo riconoscerà come quel personaggio.

Gli esempi principali.

  • & num; diventa & num;
  • / diventa & sol;
  • 'diventa & apos;
  • (diventa & lpar;
  • ) diventa & rpar;
  • ; diventa & semi;

Puoi vedere più riferimenti HTML qui: link

edit1: Inoltre, filtra le versioni codificate dell'URL in quanto queste saranno convertite nell'equivilante ASCII al momento di colpire il server ma forse dopo la loro sostituzione. dipende da quando si convalida. Dovresti anche limitare la lunghezza dell'input, in quanto ciò potrebbe rendere l'XSS meno efficace se accidentalmente ti lasci passare qualcosa. Se evitabile, non riflettere gli input in javascript.

edit2: potresti persino ottenere una libreria per codificare l'intera stringa negli equivalenti dell'entità di carattere HTML. Probabilmente il più semplice.

    
risposta data 11.07.2017 - 01:53
fonte

Leggi altre domande sui tag