Me pidieron que corrigiera una vulnerabilidad XSS en un sitio web antiguo, usando jsp y javascript.
En un botón "Volver", pondría un parámetro "backURL" como href, para poder volver a la página anterior en la que estaba.
Anteriormente, mi código javascript estaba en la página HTML, lo que lo haría explotable al reemplazar el parámetro con un script.
Se me ocurrieron 2 "Soluciones" y quería preguntar si eran válidas.
Primero, codificaría la URL al obtener el parámetro en la función javascript, usando esta biblioteca: https://www.owasp.org/index.php/OWASP_Java_Encoder_Project
Aquí está el código en mi archivo jsp:
<a class="float_left button" href="#" onclick="goback(this)" >Retour</a>
Luego, justo debajo, en el mismo archivo:
<script type="text/javascript"> function goback(domEle) { var backUrl = "${e:forHtml(param.backUrl)}"; domEle.href= decodeEntity(backUrl); } function decodeEntity(str){ return str.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">"); }
Pero luego, pensé que tal vez funcionaría simplemente poner este javascript en otro archivo, haciendo así:
archivo JSP:
<a class="float_left button" href="#" onclick="goback(this,'${param.backUrl}')" >Retour</a>
archivo javascript:
function goback(domEle,backUrl) { domEle.href= backUrl; }
De mis pruebas, ambos parecen funcionar. Pero quería saber si realmente era completamente a prueba de XSS, y si lo es, cuál es la mejor manera de hacerlo.
Gracias por adelantado !