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.