Como saber se um arquivo de imagem REALMENTE é um arquivo de imagem?  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
kicolobo
Moderador
[Avatar]

Membro desde: 19/07/2006 14:11:09
Mensagens: 1188
Localização: Belo Horizonte
Offline

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?

http://devkico.itexto.com.br

Twitter: http://www.twitter.com/loboweissmann

Vamos aprender Grails?
http://www.grailsbrasil.com.br
[WWW] [MSN] [ICQ]
maquiavelbona
JWizard
[Avatar]

Membro desde: 29/06/2006 09:06:51
Mensagens: 2447
Localização: São Paulo - SP
Offline

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é!

----------------------------------------------------------------
"Within a few years a simple and inexpensive device, readily carried about, will enable one to receive on land or sea the principal news, to hear a speech, a lecture, a song or play of a musical instrument, conveyed from any other region of the globe. "
Nikola Tesla - A means for furthering Peace (1905)

"Gedanken ohne Inhalt sind leer, Anschauungen ohne Begriffe sind blind."
Immanuel Kant - Kritik der reinen Vernunft (1781)
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

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...

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
maquiavelbona
JWizard
[Avatar]

Membro desde: 29/06/2006 09:06:51
Mensagens: 2447
Localização: São Paulo - SP
Offline

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é!

----------------------------------------------------------------
"Within a few years a simple and inexpensive device, readily carried about, will enable one to receive on land or sea the principal news, to hear a speech, a lecture, a song or play of a musical instrument, conveyed from any other region of the globe. "
Nikola Tesla - A means for furthering Peace (1905)

"Gedanken ohne Inhalt sind leer, Anschauungen ohne Begriffe sind blind."
Immanuel Kant - Kritik der reinen Vernunft (1781)
kicolobo
Moderador
[Avatar]

Membro desde: 19/07/2006 14:11:09
Mensagens: 1188
Localização: Belo Horizonte
Offline

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

Valeu pela ajuda gente!

http://devkico.itexto.com.br

Twitter: http://www.twitter.com/loboweissmann

Vamos aprender Grails?
http://www.grailsbrasil.com.br
[WWW] [MSN] [ICQ]
maquiavelbona
JWizard
[Avatar]

Membro desde: 29/06/2006 09:06:51
Mensagens: 2447
Localização: São Paulo - SP
Offline

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

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é!

----------------------------------------------------------------
"Within a few years a simple and inexpensive device, readily carried about, will enable one to receive on land or sea the principal news, to hear a speech, a lecture, a song or play of a musical instrument, conveyed from any other region of the globe. "
Nikola Tesla - A means for furthering Peace (1905)

"Gedanken ohne Inhalt sind leer, Anschauungen ohne Begriffe sind blind."
Immanuel Kant - Kritik der reinen Vernunft (1781)
eclipso
JavaEvangelist

Membro desde: 07/12/2006 12:57:04
Mensagens: 446
Offline

É, 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...

CV: http://lattes.cnpq.br/0044387433155250
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team