è sicuro consentire l'aggiunta di immagini esterne a Blog o a qualsiasi contenuto Web?

6

Sto filtrando tutte le immagini allegate a qualsiasi contenuto del mio blog:

  1. Controlla l'estensione del file.
  2. Verifica il tipo di contenuto utilizzando $finfo = finfo_open(FILEINFO_MIME_TYPE);
  3. Ho anche salvato l'immagine temporaneamente sul mio server e controllo la dimensione utilizzando getimagesize() , quindi la cancello se la funzione non ha restituito false.

Ma dopo questi controlli, non controllerò nuovamente l'immagine.

Cosa mi è successo

Su un profilo utente posso vedere il mio indirizzo IP sull'immagine ogni volta che visito il profilo utente. Questo è un esempio che ho allegato a questo post:

Ora, posso concludere che consentire agli utenti di allegare qualsiasi immagine sarà pericoloso a causa di questo attacco di file di cloaking che può generare un'immagine dinamica su ogni richiesta.

C'è qualche meccanismo per impedirlo?

o dovrei rimuovere tutte le immagini allegate dal profilo utente e salvare ogni immagine sul mio server

    
posta Akam 04.03.2013 - 21:56
fonte

3 risposte

7

Se si tratta di una semplice immagine del profilo, puoi evitare la maggior parte delle minacce alla sicurezza utilizzando una terza parte attendibile come Gravatar (che è ciò che security.se utilizza). L'utilizzo di un'immagine collegata come " Web Bug " è inevitabile con le immagini remote, ma a quanto pare a molte persone non interessa Gravatar può seguirli. L'archiviazione locale di un file controllato da un aggressore crea altre minacce alla sicurezza.

Più in generale, non si desidera archiviare file controllati dall'utente sul proprio server. Un buon esempio di utilizzo di questo tipo di vulnerabilità è l'utilizzo di una vulnerabilità PHP local file include (LFI) per ottenere l'esecuzione di codice in modalità remota . Anche la memorizzazione temporanea di un file controllato da un utente malintenzionato è una minaccia alla sicurezza che può essere sfruttata con un attacco LFI.

Verificare che il collegamento sia effettivamente un'immagine usando getimagesize () aiuta a prevenire CSRF. Tuttavia, anche un file immagine valido può contenere tag PHP nei metadati EXIF e potrebbe essere utilizzato in un attacco LFI. Gli attacchi LFI come questo possono essere prevenuti usando l'opzione di configurazione open_base_dir di PHP per impedire a PHP di includere file nell'immagine o nelle directory temporanee.

    
risposta data 04.03.2013 - 22:14
fonte
2

Quando un'immagine esterna viene "allegata" al commento, si verifica una di queste due cose, a seconda del modo in cui il server gestisce tali cose:

  • Un riferimento all'URL che punta all'immagine viene mantenuto e riprodotto nel file HTML che viene restituito a qualsiasi browser del client che visita il tuo sito.
  • L'immagine viene scaricata dal tuo server e i client riceveranno la copia che conservi sul tuo server.

Nel primo caso, ogni cliente che visita la tua pagina scarica automaticamente l'immagine e il server all'altra estremità (non il tuo, quello contenente l'immagine) può servire qualsiasi immagine come meglio crede, eventualmente a seconda di chi sta attualmente chiedendo (è così che funzionano le immagini "mostra il mio IP"). Anche se tu stesso navighi nella pagina con il tuo browser, non puoi essere sicuro che ogni altro visitatore vedrà la stessa cosa. Inoltre, il sysadmin sul server che contiene l'immagine sarà in grado di raccogliere l'indirizzo IP per ogni visitatore del tuo sito.

Ultimo ma non meno importante, un link "immagine" pericoloso può indicare cose diverse dalle immagini e iscrivere involontariamente tutti i visitatori del tuo sito in un denial-of-service distribuito .

Sembra quindi più sicuro ottenere una copia dell'immagine sul server e servirla solo ai visitatori dal tuo server. Ciò dovrebbe essere associato a una fase di convalida / conversione che verifica che l'immagine possa essere decodificata e impone di avere una dimensione "sana". Fai attenzione ai formati di immagine scriptable come SVG !

    
risposta data 04.03.2013 - 22:29
fonte
1

Non solo possono comunicare il tuo IP, ma possono anche indovinare il tipo di browser che stai utilizzando e il sito web che ti ha inviato lì (header di referer).

Sì, l'unico modo per controllare la privacy delle immagini è quello di mantenere quelle immagini ospitate su un server la cui politica sulla privacy è controllata, e nel tuo caso che includerebbe la copia delle immagini sul tuo server.

    
risposta data 04.03.2013 - 22:03
fonte