文档章节

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

xueyi28
 xueyi28
发布于 2016/05/22 15:58
字数 406
阅读 20
收藏 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
博文 93
码字总数 33978
作品 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
Flask学习笔记之模板(二)

大纲 模板也是提供流程控制的,本次的分享内容见下: 判断 循环 静态文件 判断 这里我们输入一个成绩变量,看是否及格。 然后在模板中写入判读语句: 循环 这里我们定义一个列表,用来循环。...

罗罗攀
11/21
0
0
Layui框架】layer.photos()遇到动态加载图片的时候出现问题

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

哪种生活可以永远很轻松
07/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Linux系统设置全局的默认网络代理

更改全局配置文件/etc/profile all_proxy="all_proxy=socks://rahowviahva.ml:80/"ftp_proxy="ftp_proxy=http://rahowviahva.ml:80/"http_proxy="http_proxy=http://rahowviahva.ml:80/"......

临江仙卜算子
20分钟前
1
0
java框架学习日志-6(bean作用域和自动装配)

本章补充bean的作用域和自动装配 bean作用域 之前提到可以用scope来设置单例模式 <bean id="type" class="cn.dota2.tpye.Type" scope="singleton"></bean> 除此之外还有几种用法 singleton:......

白话
43分钟前
4
0
在PC上测试移动端网站和模拟手机浏览器的5大方法

总结很全面,保存下来以备不时之需。原文地址:https://www.cnblogs.com/coolfeng/p/4708942.html

kitty1116
今天
5
0
分布式Session共享解决方案

分布式Session一致性? 说白了就是服务器集群Session共享的问题 Session的作用? Session 是客户端与服务器通讯会话跟踪技术,服务器与客户端保持整个通讯的会话基本信息。 客户端在第一次访...

Java干货分享
今天
10
0
开源软件和开源模式面临的生存危机

导读 开源模式可能正面临一场危机。越来越多的开源软件和平台被大型云计算服务商融入自家的云服务体系,并以此获利颇丰,但并不支付费用,也没有对开源社区做出相应的回馈。而实际上,大部分...

问题终结者
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部