Necesitaba evitar que ocurra un ataque XSS cuando la carga útil se inserta en la URL como un parámetro. En este caso, sin embargo, no hay etiquetas script
. Esta es mi URL que causa un ataque XSS:
localhost / example / file.jsp? testParm1 = '); alert (1); (' & testParm2 = '); alert (1); ('
Cuando presioné Intro después de escribir esto en mi navegador, apareció un cuadro de diálogo de alerta que decía "1". Cuando hice clic en "Aceptar" en eso, apareció el cuadro de diálogo de alerta que decía "2".
Estoy usando JSP, así que en file.jsp, tomo los parámetros que pasé:
<%
// Get url parameters
String lTestParm1 = myObj.retrieveString( "testParm1" );
String lTestParm2 = myObj.retrieveString( "testParm2" );
%>
Por lo general, para la prevención XSS, escaparía a los caracteres especiales, por lo que no ejecutaría lo que está en el parámetro como javascript (por ejemplo, si pongo testParm1=<script>alert('hey')</script>
en la URL), pero no puedo hacer eso ya que hay no hay etiquetas script
.
Ahora en la parte JS del código también en archivo.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>
Puse un par de comentarios junto a las 2 líneas donde creo que el problema es.
Para intentar detener este ataque XSS, reemplacé cada apóstrofe con 2 apóstrofes en la URL. Esto parece funcionar para este caso.
No pude encontrar ningún otro artículo / pregunta relacionado con este problema, pero sí encontré similitudes con las preguntas de reemplazo de apóstrofes de inyección SQL. Dijeron que todavía hay muchas maneras de superar el reemplazo de apóstrofes por sí mismo.
Aquí hay un enlace a una de las preguntas: enlace
Esto me hizo preguntarme si mi solución es suficiente, o si todavía hay formas de realizar un ataque XSS incluso con mi reemplazo de apóstrofe en su lugar.