Como saber se um arquivo de imagem REALMENTE é um arquivo de imagem?

6 respostas
K

Olá,

estou com a seguinte dúvida: temos um sistema no qual o usuario faz o upload de alguns arquivos de imagem (que podem ser de diversos formatos).

A maneira mais ingênua de saber se trata-se realmente de um arquivo de imagem consiste em verificar sua extensão. No entanto, nada impede que um usuario mal intencionado pegue por exemplo um arquivo executável, mude sua extensão e faça o upload do arquivo para o sistema.

Sendo assim, pergunto: há alguma maneira segura de se verificar se o conteudo do arquivo realmente é uma imagem, e não um arquivo de outro formato? Em caso afirmativo, como devemos proceder?

6 Respostas

M

Google search: read image metadata java
http://johnbokma.com/java/obtaining-image-metadata.html
http://www.drewnoakes.com/code/exif/
http://schmidt.devlib.org/ffident/index.html
http://schmidt.devlib.org/image-info/
http://schmidt.devlib.org/java/pixel-image-io-libraries.html
http://java.sun.com/javase/6/docs/api/javax/imageio/ImageReader.html
http://www.shareit.com/product.html?productid=300033944

e mais aproximadamente 963.000 resultados.

Até!

V

Nunca testei, mas creio que dê para vocêtentar carregar a imagem, com o ImageIO read, e esperar por uma exceção caso o arquivo seja inválido…

M

Um outro formato que pode dar problema, é o SVG. Se for ter que aceitar todo e qualquer tipo de imagem, creio que você terá bastante trabalho para filtrar o que é útil ou não.

Até!

K

no meu caso são apenas os formatos de imagem que normalmente são utilizados em aplicações web.

Valeu pela ajuda gente!

M
<blockquote><div class="quote-author">kicolobo:</div>no meu caso são apenas os formatos de imagem que normalmente são utilizados em aplicações web.

…</blockquote> uma curiosidade, que formatos são esses?

Já vi colocarem:

-Jpeg e derivados;

-Gif;

-Png;

-Svg;

-Tiff;

-Bmp;

-Pcx;

-Raw;

-Ps;

Não é um número pequeno. Se for só o trio do mal(PNG/JPEG/GIF) não vais ter muito problema.

Até!

E

É, se fosse implementar sem ajuda de API…Teria que ler a imagem e comparar seu cabeçalho com o padrão de cada formato que você espera receber…E isso é meio sacal :wink:

Na real é isso que a API faz, e qdo ela lê um arquivo cujo cabeçalho não corresponde ao formato esperado, ela joga uma exceção…

Criado 23 de maio de 2007
Ultima resposta 23 de mai. de 2007
Respostas 6
Participantes 4