Como saber se um arquivo de imagem REALMENTE é um arquivo de imagem?
6 respostas
K
kicolobo
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…
M
maquiavelbona
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
kicolobo
no meu caso são apenas os formatos de imagem que normalmente são utilizados em aplicações web.
Não é um número pequeno. Se for só o trio do mal(PNG/JPEG/GIF) não vais ter muito problema.
Até!
E
eclipso
É, 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…