Dipende dal contesto. Suppongo che tu stia utilizzando la funzione htmlentities()
, che sarebbe generalmente sicura. Fa più o meno esattamente la stessa cosa di htmlspecialchars()
.
Entrambe sono protette contro XSS generico e prevengono l'XSS basato sugli eventi quando il parametro sterilizzato viene iniettato in un tag HTML.
Entrambi non impediscono gli attacchi di javascript:
, che possono verificarsi se si inserisce il valore del parametro in un collegamento, iframe o un altro tag simile. Se inserisci un src
o href
da uno qualsiasi di questi tag, ti consigliamo di rimuovere prima tutti gli spazi bianchi dal parametro e quindi di controllare sia javascript:
che data:
.
javascript:alert(0)
ti darà un avviso quando inserito in un link o in un iframe.
data:text/javascript:alert(0)
farà lo stesso.
data:text/html:<script>alert(0);</script>
fa la stessa cosa e ignora strip_tags
.
La ragione per la prima rimozione degli spazi bianchi, è di impedire a un utente malintenzionato di eliminare un'interruzione di riga / un carattere CRLF nel mezzo del loro carico utile, quindi PHP lo legge come non javascript:
o data:
quando blocca il payload, ma verrà comunque eseguito in quanto javascript lo ignorerà.
Spero che questo spieghi che tipo di attacchi sono possibili, è molto facile affermare che htmlentities()
e htmlspecialchars()
sono una soluzione adatta al problema, ma a seconda della situazione, può essere estremamente pericoloso consigli.