Uso sempre strip_tags
per prevenire gli attacchi XSS, ma oggi ho visto un post che diceva che era orribilmente pericoloso. Come dice il manuale, non controlla l'HTML malformato!
È vero?
Che cosa posso fare per prevenire XSS?
Per evitare XSS è necessario:
Convalida tutti gli input utente che elaborerai (per esempio - se il parametro ID GET dovrebbe essere un numero, assicurati che sia con es. la funzione is_number()
di PHP o usando Filtro estensione). Questo non dovrebbe includere solo parametri GET / POST, ma anche nomi di cookie, valori di cookie, intestazioni HTTP, nomi di file caricati ecc. Gli attaccanti possono manipolare le richieste in molti modi. Se devi accettare & visualizzare il contenuto HTML dell'utente (ad esempio nell'applicazione CMS) utilizzare la collaudata HTMLPurifier libreria per filtrare Javascript e amp; altro carico utile XSS e lascia solo HTML pulito e igienizzato.
Durante la visualizzazione del valore utilizza codifica dell'output contestuale (a volte chiamato "escaping"). Esistono diverse regole su come codificare il valore fornito dall'utente se si verifica in:
È preferibile fare riferimento alle regole raccomandate descritte in Foglio trucchi OWASP XSS Prevenzione . Leggilo attentamente e rispettalo: XSS è # 2 rischio per le applicazioni web di oggi, quindi hai davvero bisogno di proteggersi da esso. Vedi anche Video tutorial OWASP su XSS .
Dovresti usare la codifica contestuale. Consulta il foglio di imbroglio di prevenzione xss . Devi codificare in modo diverso a seconda di dove si trova l'output. Ad esempio, il seguente input verrà perso da strip_tags, ma causa xss se l'output è nell'attributo value di un input di testo html: "autofocus onfocus=" alert (1)