怎么判断一个文件是一张图片

当你通过Http协议下载到一个文件,你怎么判断这个文件是一个纯的图片文件,php中提供了这样的方法:

<?php
//$file = 'http://bdimg.share.baidu.com/static/images/r6.gif';
//$file='http://www.baidu.com/img/bd_logo1.png';
$file = 'http://php.net/manual/en/function.exif-imagetype.php';
var_dump(@exif_imagetype($file));

 

file可以是远程或者本地的一个文件,exif_imagetype会读取数据流的图片格式描述字段来确定图片的格式,这样基本可以通过这个方式可以确定这个文件的格式,但是黑客并不会善罢甘休,他们会在一张图片文件中追加需要执行的额外的代码,反而用图片的格式做掩护,这样我们即使校验了图片的大小也仅仅是增加了一丁点图片验证的难度而已。
在我看来黑客无非想通过图片数据隐藏一些攻击代码,再利用渲染程序的漏洞或者web漏洞来触发而已。
基本图片渲染的程序我不想研究,看起来基本已经成熟。
这里主要谈谈请求一个webresponse的头部到底要注意什么,必须要写成什么样子才能避免图片中执行异常代码。
我拿了一个百度的图片

 

Accept-Ranges:bytes
Cache-Control:max-age=315360000
Connection:Keep-Alive
Content-Length:5331
Content-Type:image/png
Date:Fri, 26 Jun 2015 15:33:39 GMT
ETag:"14d3-4ff90199dfb40"
Expires:Mon, 23 Jun 2025 15:33:39 GMT
Last-Modified:Fri, 01 Aug 2014 11:57:57 GMT
Server:Apache

 

 

 

另外我将http的协议重新研究了一遍:
http://www.cnblogs.com/TankXiao/archive/2012/02/13/2342672.html

转载于:https://my.oschina.net/xueyi28/blog/679361

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值