Una lista nera di schemi URI non è affidabile.
Non esiste un elenco comune di schemi URI errati perché non è possibile costruirne uno completo. Ci sono molti schemi non standard per diversi browser e altri potrebbero essere aggiunti in futuro. (Un esempio di un pericoloso schema non standard sarebbe livescript:
per le vecchie versioni di Netscape.)
Questo è un altro buon punto:
I do not allow bitcoin: on my servers, nor anything except for http,
https, or ftp.
The reason is because I have no way of knowing what third party
applications might have vulnerabilities (including social engineering)
that could be exploited by a specially crafted URI string being fed to them.
(Origine)
Allo stesso modo, non esiste una lista nera di pericolosi tag HTML perché - anche se standardizzati - i browser continuano a seguire le proprie strade con i tag personalizzati. Costruire un elenco completo sarebbe senza speranza.
Un altro problema è che potresti incontrare problemi con schemi nidificati. Che dire di view-source:data:...
, rss:jar:...
, ecc.?
Quindi è più sicuro concordare una lista bianca di schemi accettabili e aggiungerne altri a richiesta. Ad esempio, questo è l'impostazione predefinita su Wordpress:
$protocols
(array) (optional) An array of acceptable protocols. Defaults to 'http
', 'https
', 'ftp
', 'ftps
', 'mailto
', 'news
', 'irc
', 'gopher
', 'nntp
', 'feed
', 'telnet
', 'mms
', 'rtsp
', 'svn
', 'tel
', 'fax
', 'xmpp
' if not set.
(Origine)