病毒图像风险

时间:2017-06-13 20:45:24

标签: java image base64

我可能会问一个愚蠢的问题,但我想确定我的应用程序已经完成,我不想在将来遇到某些病毒问题

我有一个用angular2编写的应用程序和java中的后端。 人们可以更改他们的个人资料图片。

从我的前端我在base64中对图片进行编码并将其发送到我的休息api。

  • 服务器检查base64的大小,如果达到一定的大小则拒绝它(但我默认在tomcat中也有2MB的maxPostSize)
  • 然后使用库net.iharder对base64进行解码,并在bytearray中对其进行转换 http://iharder.sourceforge.net/current/java/base64/

  • 一旦完成,我通过创建带有

    的BufferedImage来检查文件是否是图片(并调整大小)
    ImageIO.read(ByteArrayInputStream)
    

    如果它与图像不对应则返回null所以我也没有看到这里的风险。

  • 完成后,我将图片存储在我的服务器中。

任何查看带有图片的个人资料的个人资料都会收到一个base64编码的图像(对应于上传的图像),它将以基本的方式显示

<img src="myBase64"/>

仅允许JPG和PNG

我的问题是:如果一个人发送包含病毒的文件,我的服务器或最终用户是否有任何风险?或者使用ImageIO读卡器我是否安全。

提前致谢

1 个答案:

答案 0 :(得分:1)

如果您存储发送给您的任何内容并将其保持不变,那么任何事情都可能发生。仅仅因为ImageIO可以读取图像,并不意味着那里没有妥协的东西。

但是,如果你调整图像大小并使用它,那么当你从原始图像字节创建一个全新的图像时,几乎没有任何幸存的机会。 JPG和(我猜)PNG文件可以包含不属于图像的元数据,这些元数据可能是漏洞利用的向量。但是,通过从原始图像数据创建新图像,您可以隐式地删除所有这些。