2012-03-03 32 views
1

我一直在寻找一种方法来过滤使用Java上传到服务器的图像。在Servlets中上传安全图像

是否有像Verot's PHP upload class这样的库将图像重写到服务器以确保不包含非图像数据(如字符串或无关的二进制数据)?

我想这样做,因为字符串可能是恶意的JavaScript和二进制数据可能是可执行的,这可能对服务器有害。

+0

您可以随时尝试通过ImageIO读取图像。如果提供的数据是垃圾,它将创建一个空映像。 – Perception 2012-03-03 01:23:36

+0

谢谢,但这将与附加非图像数据的图像一起工作吗?这是一个有效的图像,但有非法添加。 – user1246246 2012-03-03 04:04:54

+0

你必须测试并找出答案。它可能会忽略附加的数据,但再一次,您必须测试以确认。 – Perception 2012-03-03 04:08:53

回答

-1

文件上传后用这种方法检查!

public boolean checkIfImageFile(String filename){ 
     boolean isimage=false; 
     try{ 
       BufferedImage bi=ImageIO.read(new File(filename)); 
       if (bi!=null)isimage=true; 
     }catch(Exception e){ 
       isimage=false; 
     } 
     return isimage; 
} 

好运

+0

谢谢。虽然这将与添加数据的图像一起工作吗?一些图像是有效的图像,它们只是附加了非图像数据。 gifar(在他们的数据中带有罐子的GIF)和一些带有JavaScript的图像作为元数据放入。 – user1246246 2012-03-03 04:03:41

+0

那么在这种情况下,只需将BufferedImage渲染为新图像,然后[save](http://docs.oracle.com/javase/tutorial/2d/images/saveimage.html)即可获得新图像。这将删除任何数据,您可以将其存储在您的首选格式。 – Wesley 2012-03-04 00:17:51