PHP判断图片是否为标准图片(防止篡改图片上传)

在项目安检时发现,某系项目中图片上传只是对后缀名进行了检查,导致含有某些代码的‘图片’也能上传到服务器,有重大隐患。写了一个方法,检验图片的正确性。(此方法无法完全验证,将图片源码中加了代码无法判断,不过将图片处理比如加水印以后,含有代码的图片在当作php执行时会失效)

 

      如果需要对图片进行安全处理,经看这里---http://alfred-long.iteye.com/blog/1725628

 

/*
 *判断上传的图片是否为标准图片
 *$file $FILES['']获取的值
 *return 正常图片 true ;  异常图片 false;
 */
function isimage($file){
	if ($file["type"] == "image/gif") {
		@$im = imagecreatefromgif($file['tmp_name']);
	} elseif ($file["type"] == "image/png" || $file["type"] == "image/x-png") {
		@$im = imagecreatefrompng($file['tmp_name']);
	} else {
		@$im = imagecreatefromjpeg($file['tmp_name']);
	}
	if($im==false){
		return false;
	}else{
		return true;
	}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要检测图片是否篡改,有以下几种方法: 1. 哈希算法:计算图片的数字指纹,对比源图片和待检测图片的数字指纹是否相同,如果不同说明图片已被篡改。 2. 数字水印:在图片中添加数字水印,检测时对比图片中的水印是否被修改。 3. 图像隐写术:在图片中隐藏信息,检测时通过读取隐藏信息判断图片是否篡改。 4. 图像分析:对图片的像素、颜色、直方图等特征进行分析,判断图片是否存在异常。 这些方法各有优缺点,应根据具体需求选择合适的方法进行图片验证。 ### 回答2: 要检测图片是否篡改,可以采取以下几种方法: 1. 数字签名算法:通过对原始图片进行数字签名,生成唯一的指纹。当图片篡改后,指纹会发生变化,可以通过对比新的指纹与原始指纹,判断图片是否篡改。 2. ELA(Error Level Analysis)分析:ELA是一种基于压缩算法的图像分析方法。通过对比原始图片和经过重新压缩的图片的差别,如果图片篡改,重新压缩后的图片中会出现较大的错误级别。 3. 直方图分析:通过分析图片的直方图来检测图片是否篡改。直方图中的图像特征如亮度、颜色等会因为篡改而发生变化,在比对直方图时可以发现这些变化。 4. 基于深度学习的方法:利用深度学习模型对图片进行分析和识别。可以通过训练模型来辨别篡改过的图片和原始图片之间的差异。 5. 像素差分分析:对比原始图片和被检测图片中每个像素的差异,如果差异超过一个阈值,则认为图片篡改。 需要注意的是,以上方法并非绝对可靠,每种方法都有其局限性。因此,通常建议结合多种方法进行综合判断,以增加检测的准确性和可靠性。 ### 回答3: 要检测图片是否篡改,可以采取以下几种方法。 首先,可以使用哈希函数来生成图片的哈希值。哈希值是一串由数字和字符组成的固定长度的字符串,它能够代表图片的内容。通过计算图片的哈希值并与原始图片的哈希值进行比较,就可以判断是否存在篡改。如果哈希值相同,那么可以认为图片没有被篡改。然而,这种方法对于一些轻微的篡改可能不够敏感。 其次,可以使用数字水印技术。数字水印是一种嵌入在图片中的不可见的信息,它能够验证图片的完整性和真实性。通过提取数字水印并与原始图片中嵌入的信息进行比较,就可以判断图片是否经过篡改。数字水印技术可以实现较高的检测准确率,但需要专门的算法和设备支持。 此外,还可以进行画面特征分析。每张图片都有其独特的特征和结构,通过分析图片的纹理、颜色、亮度等特征,可以判断图片是否存在异常。例如,利用图像处理算法,可以检测到图片是否存在克隆、剪贴、缝合等篡改痕迹。 最后,可以利用「数字取证」的方法来检测图片是否篡改。数字取证是一种通过收集、保护、分析和展示数字信息的过程,可以追踪图像篡改的痕迹。例如,查看图片的元数据,如拍摄时间、地点等信息,并与实际情况进行核对,就可以判断图片是否经过篡改。 综上所述,检测图片是否篡改可以通过哈希函数生成哈希值、采用数字水印技术、进行画面特征分析和利用数字取证方法。不同的检测方法可以相互结合,提高检测的准确性和可信度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值