若已正确判断出图片类型,防止了绝大多数恶意图片上传。但是若通过修改文件流的方法,给一张本身合法的图片中强行写入一些恶意代码,或者病毒代码,这样前面的方法仍然能够顺利通过,因为它本身是张正确格式的图片,仅仅读取字节与获取图片类型无法做到清除这种类型图片中隐藏的恶意代码。附用UE打开后的恶意图片部分内容,图片的右半部分显示了恶意脚本:
试想,如这种类型图片上传到服务器,当引用了该图片的网页被访问时,而恰好用户的机子装了杀毒软件,则此时杀毒软件会对该页面报警,如果您的网页中存在大量的这种图片,那惨啦,一打开网页,杀毒软件就开始报病毒。这样用户还再敢访问您的网站。
针对这种情况,对于图片类型的文件,可以在上传后,对图片进行相应的缩放,破坏恶意用户上传的二进制可执行文件的结构,来避免恶意代码执行。jmagick可以对图片进行相应处理,而该工具提供的图片缩放方法能将多余的非图片元素清除,那么我们只需要在正确校验格式后对图片按原大小进行一次缩放来清除恶意信息:
代码如下:
packageapistudy;
importjava.io.IOException;
importmagick.ImageInfo;
importmagick.MagickImage;
/**
*Createdon2010-7-8
*<p>Description:[通过jmagick清除图片中的恶意信息]</p>
*@author[emailprotected]
*@version1.0
*/
publicclassImageTypeTest
{
static
{
System.setProperty("jmagick.systemclassloader","no");
}
/**
*Createdon2010-7-8
*<p>Discription:[main]</p>
*@paramargs
*@author:[[emailprotected]]
*/
publicstaticvoidmain(String[]args)
{
StringsrcFileName="c:/img/c.jpg";
try
{
filterImageByScale(srcFileName);
}
catch(IOExceptione)
{
e.printStackTrace();
}
}
/**
*Createdon2010-7-8
*<p>Discription:[filterImageByScale,清除图片中的恶意代码]</p>
*@paramsrcFileName
*@throwsIOException
*@author:[[emailprotected]]
*/
publicfinalstaticvoidfilterImageByScale(StringsrcFileName)throwsIOException
{
MagickImagemagic=null;
try
{
ImageInfoimgInfo=newImageInfo(srcFileName);
magic=newMagickImage(imgInfo);
intwidth=(int)magic.getDimension().getWidth();
intheight=(int)magic.getDimension().getHeight();
MagickImagenewImage=magic.scaleImage(width,height);
newImage.profileImage("*",null);//清除无用信息
newImage.setImageAttribute("JPEG-Sampling-factors",null);//清除无用信息
newImage.setImageAttribute("comment",null);//清除无用信息
newImage.writeImage(newImageInfo());
newImage.writeImage(imgInfo);
}
catch(Exceptione1)
{
e1.printStackTrace();
}
finally
{
try
{
magic.destroyImages();
}
catch(Exceptione2)
{
e2.printStackTrace();
}
}
}
}
运行以上程序后,再打开看原来的图片,恶意内容已经没有了,大小也比以前小了,杀毒软件也不会报病毒了。
相关推荐
JMagick图片处理 缩略图 水印 切图 压缩图片
jmagick处理图片,图片高质量压缩,图片加水印。
里面包括jmagick 所需所有文件,jmagick.dll,jmagick.jar 还有安装文件, 以及linux安装说明! jmagick jmagick.jar jmagick资料 jmagick缩略图 jmagick jmagick.jar jmagick资料 jmagick缩略图
Jmagick32位的和Jmagick64位的Jmagick.dll,Jmagick.jar 图片处理必备工具
压缩包在java下使用jmagick的所有必需工具和安装包,还有使用实例。
强大的图片处理工具,imagemagick的java接口
jmagick.zip
jmagick.jar 及用法。。。。。。。。。。
jmagick java 图像处理jmagick java 图像处理jmagick java 图像处理jmagick java 图像处理jmagick java 图像处理
JMagick是一个开源API,利用JNI(Java Native Interface)技术实现了对 ImageMagick API的Java访问接口,因此也将比纯Java实现的图片操作函数在速度上要快。
jmagick image generate or operator library
jmagick-win-6.3.9 java 图片裁剪工具
jmagick.jar java图像应用
JMagick-6.0.4-0.tar 下载
jmagick-6.2.4-1-IM-6.2.5.zip
文件包含:ImageMagick-6.4.5-3-Q16-windows-dll.exe,jmagick.dll,jmagick.jar,压缩包中的版本统一,安装ImageMagick,复制ImageMagick安装目录的所有.dll文件和Jmagick.dll到,系统的system32下 即可使用,System.set...
内容:【ImageMagick-6.3.9-0-Q16-windows-dll.exe安装文件】【jmagick-win-6.3.9-Q16内有jar包和dll文件】【java代码示例】 用法: ...3、讲jmagick.jar包加入自己的工程lib中,按照例子编写代码即可
java 图片放缩结束...防止内存泄露
压缩包在java下使用jmagick的所有必需工具和安装包,还有使用实例。
还在为找不到jar文件烦心吗,不用了到我空间来有你想要的,持续更新。。。 jmagick.jar