Recientemente descubrí una vulnerabilidad XSS en una aplicación que usa JSP para renderizar páginas. El código vulnerable en el JSP era algo como esto:
<td>${customer.notes}</td>
Se solucionó al escapar de la entrada controlada por el usuario, el código resultante tiene este aspecto:
<td><c:out value="${customer.notes}"/></td>
JSP y otros marcos de plantillas que he usado, siempre están predeterminados para que solo escapen datos dinámicos cuando se solicitan específicamente y no escapan de forma predeterminada.
El inverso de esto es claramente un valor predeterminado mucho más seguro, es decir. todos los datos dinámicos se escapan, a menos que indique específicamente que el marco no lo haga.
¿Hay marcos que funcionen de esta manera? ¿Hay un problema importante en cambiar los marcos futuros para comportarse de esta manera? Obviamente, usted incurre en la sobrecarga de los datos de escape que pueden no estar necesariamente controlados por el usuario, pero si tiene problemas de rendimiento, puede desactivarlo cuando sea seguro. ¿Hay algo que me falta?