若已正确判断出图片类型,防止了绝大多数恶意图片上传。但是若通过修改文件流的方法,给一张本身合法的图片中强行写入一些恶意代码,或者病毒代码,这样前面的方法仍然能够顺利通过,因为它本身是张正确格式的图片,仅仅读取字节与获取图片类型无法做到清除这种类型图片中隐藏的恶意代码。附用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图片处理**是图像操作的重要工具,它是一个Java接口,用于ImageMagick库,使得在Java环境中可以方便地进行图像处理。这个技术涵盖了多个关键知识点,包括创建缩略图、添加水印、切图以及压缩图片,这些都是...
jmagick处理图片,图片高质量压缩,图片加水印。
例如,一个Web应用可能使用Jmagick来动态生成缩略图,或者在上传图片时进行预处理,以确保符合规定的尺寸和格式。 总的来说,Jmagick提供了一种灵活且强大的方式,让Java开发者能够充分利用ImageMagick的图像处理...
里面包括jmagick 所需所有文件,jmagick.dll,jmagick.jar 还有安装文件, 以及linux安装说明! jmagick jmagick.jar jmagick资料 jmagick缩略图 jmagick jmagick.jar jmagick资料 jmagick缩略图
在JMagick中,这通常意味着在完成图像操作后,确保`MagickImage`和`ImageInfo`对象被显式清除。例如,在上述代码中,可以在完成写入图像后添加以下清理代码: ```java // 清理资源 image.destroyImages(); ...
本文将详细介绍如何在Java环境中安装和配置JMagick,以及如何使用提供的示例进行测试。 ### 1. 获取必备组件 首先,你需要下载以下两个关键组件: - **jmagick.dll**: 这是JMagick的核心动态链接库,它提供了Java...
- 安全监控:在安防系统中,可以利用JMagick进行视频帧的截取和分析,辅助识别异常行为。 总的来说,JMagick-win-6.3.9是Java开发者在处理图像任务时的一款强大工具,它结合了Java的便捷性和ImageMagick的强大功能...
通过 JMagick,Java 开发者可以利用 C++ 编写的 ImageMagick 库的强大功能,无需直接编写原生代码或使用 JNI(Java Native Interface)。 **JMagick 的安装与配置** 在使用 JMagick 之前,需要先确保已经正确安装...
在IT行业中,图片处理是一项非常重要的任务,尤其是在开发图片搜索系统、社交媒体平台或者任何涉及到大量图像的应用中。本文将深入探讨“Jmagick缩图”这一主题,它是一种基于Java的图片处理工具,用于快速有效地...
《JMagick与ImageMagick在Java环境中的应用》 JMagick与ImageMagick是两个在图像处理领域中广泛使用的开源库,尤其在Java环境中,它们为开发者提供了强大的图像处理功能。本文将深入探讨这两个工具的核心概念、功能...
在实际应用中,JMagick可以用于各种场景,如网站的图像上传处理、图片格式转换、图片质量优化等。例如,一个常见的应用场景是用户上传一张大尺寸的照片,服务器端可以通过JMagick进行自动缩放,减少存储空间并加快...
JMagick将这种能力无缝地集成到Java应用程序中,使得开发者可以在Java环境中执行复杂的图像操作,而无需依赖外部进程或插件。 **核心特性** 1. **广泛的图像格式支持**:JMagick继承了ImageMagick的强大功能,能够...
通过JMagick,Java开发者可以利用ImageMagick的强大功能,无需离开Java环境。它提供了一系列的API,使得对图像进行旋转、缩放、裁剪、颜色转换等操作变得轻而易举。 首先,我们来了解一下JMagick的核心组件。`...
JMagick则将其功能融入到Java环境中,使得Java开发者可以利用C++编写的ImageMagick库进行图像操作,而无需关心底层实现的复杂性。 在JMagick-5.5.6-0版本中,包含了完整的源代码,这对于开发者来说是极具价值的。源...
描述和标签中的信息与标题相同,暗示这个压缩包可能包含了完整的JMagick源码或者二进制库,以及可能的构建或配置文件,以便用户在自己的Java项目中集成和使用JMagick。 压缩包内的文件名称列表包括: 1. README.TXT...
结合这个“ImageMagick-6.3.9+jmagick组合”,开发者可以在Java环境中利用ImageMagick 6.3.9的强大功能,无需担心兼容性和稳定性问题。这在开发基于Java的图像处理应用时尤其有用,例如在线图片编辑服务、自动化图像...
jmagick image generate or operator library
jmagick.jar java图像应用
JMagick-6.0.4-0.tar 下载
**JMagick 用法详解** JMagick 是一个 Java 的图像处理库,它提供了对 ImageMagick 图像处理库的 Java 接口。ImageMagick 是一个强大的跨...记得在使用过程中查阅 JMagick 的官方文档以获取更详细的信息和示例代码。