Recentemente ho scoperto una vulnerabilità XSS in un'applicazione che utilizza JSP per il rendering delle pagine. Il codice vulnerabile nel JSP era qualcosa del genere:
<td>${customer.notes}</td>
È stato risolto eseguendo l'escape dell'ingresso controllato dall'utente, il codice risultante ha il seguente aspetto:
<td><c:out value="${customer.notes}"/></td>
JSP e altri framework di template che ho usato, sempre predefinito per l'escape dei dati dinamici solo quando richiesto specificatamente e non per l'escape di default.
L'inverso di questo è chiaramente un default molto più sicuro, cioè. tutti i dati dinamici sono sfuggiti, a meno che tu non specifichi esplicitamente al framework di non farlo.
Esistono strutture che funzionano in questo modo? C'è un grosso problema nel cambiare i quadri futuri per comportarsi in questo modo? Ovviamente si incorre nella fuga di dati che potrebbero non essere necessariamente controllati dall'utente, ma se si verificano problemi di prestazioni, è possibile disabilitarli ovunque siano sicuri. C'è qualcosa che mi manca?