D.W. ha alcuni punti eccellenti, ma vorrei solo sottolineare alcune cose:
This code does four things:
- Removes characters and constructs that can trick browsers.
- Makes sure all HTML entities are well-formed.
- Makes sure all HTML tags and attributes are well-formed.
- Makes sure no HTML tags contain URLs with a disallowed protocol (e.g.
javascript:
).
Supponendo che funzioni in modo eccellente su tutto questo elenco, ci sono alcune omissioni notevoli: bilanciamento tag , attacchi a livello di codifica , link spam .
Anche se lo fa bene, HTMLPurify è stato utilizzato ed è stato attaccato. Mi viene in mente almeno un accademico della sicurezza, che si assicura che HTMLPurify sia patchato e stabile prima di pubblicare nuovi attacchi. Se Drupal non riceve uno scrutinio simile, userei quello più duro.
Bilanciamento tag
Se la sicurezza dei tuoi utenti dipende dal fatto che siano in grado di distinguere il contenuto che hai creato da chi è stato autore di commentatori o di terze parti, il bilanciamento dei tag è importante.
Immagina di aver usato <table>
s per la formattazione. I tag sbilanciati possono consentire loro di importare contenuti dalla regione che sembra essere contenuto di terze parti in un'area della pagina che sembra essere controllata dai proprietari del sito. Ad esempio, se la tua white-list includesse tag di formattazione altrimenti innocui come <table>
, quindi
</table>
<center>If you have any questions,
<a href="[email protected]">contact us</a>
<br>Bogus copyright</center><br><br><br><br><sub><sub><sub><sub><sub>
potrebbe lasciare che l'attaccante forzi un piè di pagina che contiene collegamenti di phishing.
Un simile apparentemente innocuo </ul>
potrebbe aiutare un utente malintenzionato a uscire da un elenco di commenti utente che vengono visualizzati utilizzando <ul><li>...</ul>
per HTML semantico.
Le white-list configurabili dall'utente ti danno molto spazio per impiccarti qui dato che gli esperti HTML ritengono giustamente che elementi bilanciati come <table>
e <ul>
non facciano nulla di sensibile alla sicurezza (creano solo riquadri attorno al contenuto scorrevole) , ma i singoli tag sono problematici.
Attacchi a livello di codifica
Se l'autore dell'attacco può ottenere contenuto disinfettato nei primi kB di una pagina HTML che non ha un'intestazione Content-type
che specifica una codifica, allora potrebbe essere in grado di indurre IE a trattare la pagina come UTF-7 , evitando tutte le altre condizioni igieniche.
Questo potrebbe rientrare in "costrutti che possono ingannare i browser", ma il codice sorgente su quella pagina non indica che lo faccia.
link spam
Se consenti i link ma il disinfettante non aggiunge rel="nofollow"
ai link, la tua reputazione può essere dirottata.