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?
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…
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é!
no meu caso são apenas os formatos de imagem que normalmente são utilizados em aplicações web.
Valeu pela ajuda gente!
[quote=kicolobo]no meu caso são apenas os formatos de imagem que normalmente são utilizados em aplicações web.
…[/quote]
Só 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é!
É, 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
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…