Vorrei creare uno script di shell che verificherà che tutti i file in una directory siano file di immagine.
Di recente abbiamo riscontrato un problema per cui un hacker è stato in grado di generare un file in una directory e mascherarlo come file .jpg. Vorrei creare uno script di shell per controllare tutti i file nella directory per assicurarmi che siano file jpg, gif o png reali.
Risposta accettata:
Penso che tu voglia stare molto attento nell'usare file
in una circostanza in cui gli dai un input completamente non attendibile. Ad esempio, RHEL 5 file
identificherà questo:
GIF87a
<?php
echo "Hello from PHP!n";
?>
Come "Dati immagine GIF, versione 87a, 15370 x 28735". L'interprete PHP non ha problemi a eseguire quell'input. Questa mancanza di problemi è alla base dei problemi di "inclusione di file locali" (LFI).
Secondo, file
(e anche strings
) analizza effettivamente i file di input per dirti cosa vuoi sapere. Questi parser sono complicati e presentano problemi.
Ho intenzione di suggerire il identify
comando dalla suite ImageMagick. Non è ingannato dal mio semplice esempio sopra, e analizza solo i file di immagine correttamente, quindi dovrebbe essere meno soggetto a difetti di sicurezza rispetto a file
.