Potrei fare una domanda simile a questa: Whitelisting elementi DOM per sconfiggere XSS
Ma penso che la mia soluzione proposta sia diversa e mi chiedevo se potevo convincere la comunità a commentare se potesse essere un modo efficace per prevenire gli attacchi XSS.
Sto personalizzando un sistema di gestione dei contenuti che ha una grande base di codice (possibilmente centinaia di migliaia di righe di codice eseguibile). A causa della natura dello sviluppo dei COT, è molto difficile per gli sviluppatori tenere traccia di ogni singolo script eseguito dal browser.
È possibile autorizzare gli script sul lato server utilizzando un ServletFilter ?
La mia comprensione di un filtro servlet è che vede tutte le richieste e le risposte (ad esempio tutte le richieste e le risposte devono passare attraverso la catena di filtri). Ho notato che le risposte contengono tag. Il che significa che quando tutti i byte dello script vengono trasferiti al browser client dal server, l'intenzione è che lo script venga eseguito sul lato client. Lì ho la possibilità di eseguire un controllo whitelist direttamente nel filtro servlet prima che raggiunge il client. Mi piacerebbe assicurarmi che lo qualsiasi script inviato al client sia incluso nel mio elenco di script approvato. In caso contrario, il filtro modificherebbe la risposta e tirerà fuori la sceneggiatura allora e là.
Ora ci sono un paio di problemi a cui riesco a pensare con questo approccio. Innanzitutto, come potrei assegnare identificatori univoci a un particolare script che può essere aggiunto a una whitelist in primo luogo?
Il secondo problema è che, anche se trovassi un modo per assegnare identificatori univoci per un particolare script e li aggiungessi alla lista bianca, la lista bianca sarebbe probabilmente enorme (perché questo è un prodotto COT contenente forse migliaia di script). E se mi capita di dimenticare di mettere una buona sceneggiatura nella whitelist, allora ci saranno funzionalità rotte.
Queste sono le uniche questioni a cui posso pensare con questo approccio. Mi stavo chiedendo se la comunità potesse commentarla o renderla una soluzione migliore.