2010-02-21 1 views
5

Nota: mi occupo dell'iniezione SQL e dell'output di output altrove. Questa domanda riguarda solo il filtraggio degli input, grazie.Filtraggio input utente: devo filtrare l'HTML?

Sono nel mezzo del refactoring delle mie funzioni di filtraggio dell'input dell'utente. Prima di passare il parametro GET/POST ad un filtro specifico tipo con filter_var() faccio la seguente:

Ora la domanda: ha ancora senso passare il parametro a un filtro come htmLawed o HTML Purifier oppure posso pensare all'input come sicuro? Mi sembra che questi due differiscano principalmente sulla granularità degli elementi e degli attributi HTML consentiti (a cui non sono interessato, poiché rimuovo tutto), ma i documenti htmLawed hanno una sezione su "dangerous characters" che suggerisce che potrebbe esserci un motivo per usarlo. In questo caso, quale sarebbe una sana configurazione per questo?

+0

Il carattere pericoloso potrebbe essere un carattere di controllo UTF-8. – Jacco

+0

Qualche suggerimento su come sbarazzarsi di loro? – djn

+1

In realtà non ho capito, SQL Injection si occupa di impedire l'inserimento di brutti utenti in una query sql. In effetti, la maggior parte delle vulnerabilità è dovuta a INGRESSO spiacevole, non all'output. Queste sono chiamate vulnerabilità "Taint and Sink". – rook

risposta

2

Ci sono molti approcci diversi per XSS che sono sicuro. L'unico motivo per sapere se il tuo approccio trattiene l'acqua è quello di testare lo sfruttamento. Raccomando l'uso di Free XSS vulnerability Scanner * o l'open source wapiti.

A dire il vero non userò mai strip_tags() perché non sempre hai bisogno di tag html per eseguire javascript! Mi piace htmlspecialchars($var,ENT_QUOTES);.

Per esempio questo è vulnerabile a XSS:

print('<A HREF="http://www.xssed.com/'.strip_tags($_REQUEST[xss]).'">link</a>'); 

Non hanno bisogno <> per eseguire JavaScript in questo caso perché si può usare onmouseover, qui è un attacco esempio:

$_REQUEST[xss]='" onMouseOver="alert(/xss/)"'; 

ENT_QUOTES si prenderà cura delle doppie virgolette che correggeranno questa vulnerabilità XSS.

* Sono affiliato con questo sito/servizio.

+0

Ottimo punto! Grazie! Ho trovato un elenco di eventi su http: // php.net/manual/en/function.strip-tags.php # 82180 e passato l'array a uno str_ireplace() - questo dovrebbe occuparsene. – djn

+1

Si prega di notare le linee guida [promozione] (http://stackoverflow.com/faq#promotion). –

0

Penso che quello che stai facendo è sicuro, almeno dal mio punto di vista non codice html dovrebbe ottenere attraverso il filtro

+0

-1 Sì, ma javascript può ancora farlo con questi filtri. – rook