2012-08-10 12 views
5

Dopo aver letto http://dsecrg.com/files/pub/pdf/XSS_in_images_evasion_bypass_(eng).pdf, è chiaro che consentire il caricamento di immagini dagli utenti ti apre agli attacchi XSS.Usa PHP per prevenire gli attacchi XSS all'interno di un'immagine

Non sono riuscito a trovare alcun esempio di PHP su come schermare un'immagine caricata per gli attacchi XSS.

Ho trovato uno per CodeIgniter, che sto usando. La funzione è xss_clean($file, IS_IMAGE), ma c'è solo una frase di documentazione per questo, quindi non ho idea di come funzioni e un commento nel loro forum ha detto che ha avuto un tasso irragionevolmente alto di falsi positivi, quindi non è utilizzabile in produzione.

Cosa consiglia per evitare gli attacchi XSS all'interno di un'immagine caricata?

risposta

4

Fintanto che l'estensione è corretta (e gli utenti sono diligenti sull'aggiornamento del browser), l'iniezione di immagini non dovrebbe essere possibile.

Ad esempio, se qualcuno carica alert('xss'); come immagine e si dispone di <img src='that-image.png'>, verrà emesso come png e JavaScript non verrà eseguito (almeno fino a IE7). Ciò che è importante è che si rinomino le immagini in modo appropriato.

Se si dispone di php> 5.3 e l'estensione PECL finfo, è possibile utilizzarlo per ottenere il tipo mime del file e disporre di una whitelist di tipi consentiti (png, jpg, gif che immagino). Se sei su una macchina Linux, file può aiutarti anche con quello.

+0

Io personalmente emetto tutto come application/octet-stream –

+0

Grazie Explosion, questo è il modo in cui lo gestirò. Come indicato nell'articolo che ho collegato sopra: "Si può, ovviamente, ignorare questo problema affermando che proviene dal difetto dell'applicazione.Tuttavia, un cyber-crook può installare e utilizzare shell PHP tramite un'immagine nel la presenza di PHP locale include la vulnerabilità e in tal caso, le funzionalità di un browser non saranno più rilevanti, ciò conferma che, se ci occupiamo dei dati dell'utente, il filtraggio è necessario in ogni caso. " Questo mi ha spaventato, ma il mio server è aggiornato e dopo averci pensato ... Non mi interessa davvero che gli utenti di IE 7 siano posseduti da un hacker. – Justin

0

In CodeIgniter ci sono molti modi per prevenire l'XSS. Puoi abilitarlo quando ottieni il valore come -> post ('data', true). Il secondo parametro è il booster XSS.

Inoltre, non utilizzare il tag HTML IMG. Usa il CodeIgniter che pulirà, guarderà e renderà più facile la visualizzazione dell'immagine.

Solo i miei due centesimi!

+0

Non sono sicuro se questo effettivamente filtrerebbe l'immagine (forse solo il nome file?) A meno che non si usi specificamente xss_clean ($ file, TRUE). Vedi IS_IMAGE qui: http://codeigniter.com/user_guide/libraries/security.html – Justin

+0

Sì, la funzione 'img()' nel Codeigniter [HTML Helper] (http://ellislab.com/codeigniter/user-guide /helpers/html_helper.html#img) ** non esegue alcun controllo di sicurezza **, semplicemente costruisce un tag ''. Il mio metodo preferito è quello di ottenere il tipo MIME dell'immagine e consentire solo i tipi che conosci di essere al sicuro ... –

Problemi correlati