文档章节

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

xueyi28
 xueyi28
发布于 2016/05/22 15:58
字数 406
阅读 16
收藏 0

当你通过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

本文转载自:http://blog.csdn.net/kangqi7000/article/details/51475429

共有 人打赏支持
xueyi28
粉丝 7
博文 92
码字总数 33680
作品 0
南宁
Python中的startswith和endswith函数使用实例

在Python中有两个函数分别是startswith()函数与endswith()函数,功能都十分相似,startswith()函数判断文本是否以某个字符开始,endswith()函数判断文本是否以某个字符结束。 startswith()函...

Betty__
2016/09/27
71
0
ng-Cordova插件之fileTransfer的使用

其实我觉得gitHub上的文档说的已经很详细了,但是鉴于是一个比较常用的插件以及貌似使用方法稍微的要比ng-camera那样看起来简单点,所以这里稍微的写写记录下 $cordovaFileTransfer的用处:用...

邪气小生
2015/11/13
0
2
49.(android开发)imageView图片切换

android 的图片显示控件 imageView 是很常见的。显示图片比较简单,设置图片源就可以了。 一般我们使用 APP 内的资源来实现。图片原始文件就放在 res 下的 drawable 或 mipmap 内。 我这次想...

厚土火焰山
2017/12/22
0
0
Layui框架】layer.photos()遇到动态加载图片的时候出现问题

[1. 问题] [2. 第一个问题的解决] [3. 第二个问题的解决思路过程] [4. 总结] 1. 问题 1.1. 问题描述 当layer.photo()作用的区域内的图片是动态加载产生的的时候,出现两个问题。 一次性加载一...

哪种生活可以永远很轻松
07/07
0
0
异常处理 扩展 PHP

php 异常处理怎么扩展?java有强大的异常处理,但是php的异常处理比较简单,每次写一个比较复杂的方法都要有大量的 if...else..判断,这对phper的思维逻辑真是个极大的考验。(比如说一个简单...

风雪中的舞者
2015/08/06
62
2

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JS:异步 - 面试惨案

为什么会写这篇文章,很明显不符合我的性格的东西,原因是前段时间参与了一个面试,对于很多程序员来说,面试时候多么的鸦雀无声,事后心里就有多么的千军万马。去掉最开始毕业干了一年的Jav...

xmqywx
今天
0
0
Win10 64位系统,PHP 扩展 curl插件

执行:1. 拷贝php安装目录下,libeay32.dll、ssleay32.dll 、 libssh2.dll 到 C:\windows\system32 目录。2. 拷贝php/ext目录下, php_curl.dll 到 C:\windows\system32 目录; 3. p...

放飞E梦想O
今天
0
0
谈谈神秘的ES6——(五)解构赋值【对象篇】

上一节课我们了解了有关数组的解构赋值相关内容,这节课,我们接着,来讲讲对象的解构赋值。 解构不仅可以用于数组,还可以用于对象。 let { foo, bar } = { foo: "aaa", bar: "bbb" };fo...

JandenMa
今天
1
0
OSChina 周一乱弹 —— 有人要给本汪介绍妹子啦

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @莱布妮子 :分享水木年华的单曲《中学时代》@小小编辑 手机党少年们想听歌,请使劲儿戳(这里) @须臾时光:夏天还在做最后的挣扎,但是晚上...

小小编辑
今天
18
4
centos7安装redis及开机启动

配置编译环境: sudo yum install gcc-c++ 下载源码: wget http://download.redis.io/releases/redis-3.2.8.tar.gz 解压源码: tar -zxvf redis-3.2.8.tar.gz 进入到解压目录: cd redis-3......

hotsmile
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部