techdoc centre
本站搜索 用户名: 密码:
   HOME  TECHDOC  WEB  SDK  NSDT  TOPIC  BIZDOC   LOGIN
  发布地区 Global 发布类别 NSDT PHP
  PHP检测上传文件的类型
于 2017-08-20 编辑: Eric 查看: 1033 次   Article Url Print this page

作者:老王
! y' ^$ c! a/ ]9 Q" {
* w5 k2 k; a) q2 R2 b+ v最烂的方法就是通过$_FILES[...]['type']来检测上传文件的类型,因为只需简单修改文件扩展名就可以伪造它。% w3 K' Z6 Y$ B. O3 y% e

2 u  b: C2 ^. C3 a另一个相对安全点的方法是通过文件头两个字节的内容来判断上传文件的类型,例子代码如下:
& @9 c1 D, `$ a* q* c. H# ]
) n' v1 v1 b4 d0 E: @; C2 M01 $handle = fopen($_FILES[...]['tmp_name'], 'rb');
3 W* m5 h3 l7 [' Q7 w6 N0 I02 $content = fread($handle, 2);
. u1 `2 a4 w9 M0 _! z03 fclose($handle);
. `' E% z# d7 k- z" B- ~  R04# r& S% g8 E4 i& r& Z$ Y% G  F
05 $info = unpack('c2chars', $content);
  o+ I( m6 u- K4 I) G% q! B( C066 O: ?+ @/ R, R- [9 f/ H
07 if (empty($info['chars1']) || empty($info['chars2'])) {1 q) o/ R$ y% _, b4 J% h" u
08     exit('Error!');- I* h1 h$ Z% U8 M2 y! l
09 }
# L* }2 r$ u$ j9 r10" @" {4 A$ s+ z# Y  {: u
11 if ($info['chars1'] < 0) {1 L' J2 N0 Q4 R5 \, F
12     $info['chars1'] += 256;8 O4 x' T2 ^+ m* s4 E
13 }
- X5 U- }" `2 F3 x9 i14 if ($info['chars2'] < 0) {- I9 i6 e, @( W- F; ?# O0 S
15     $info['chars2'] += 256;! I+ S, \/ d. Q' G; c8 v9 W$ q, Z
16 }2 b) u2 m* k; m5 Q1 C
17" g: q& M7 u  F7 A6 [8 \, L/ r
18 $code = $info['chars1'] . $info['chars2'];
" u! u# X( B% r& v
0 W2 Y+ v. U% N% H+ F' `/ N' [; Z' |
注:网上搜索的大多数相关的程序没有做256的相关操作,这是我通过试验数据自己意淫的TDD结果,不肯定是否一定正确,读者自己斟酌。. C) x$ I9 ?( S; _! G8 ?

) l) U- p! j* U4 g通过switch判断$code变量,就可以对应到文件类型,常见的图片类型结果大致如下:: f- l3 g5 D. @; D' z) n

& \9 z1 I# j5 C: ?# qGIF:7173, k6 e  d0 I1 S! `) p
JPG:255216
' I3 }; ?" o6 o7 O( |PNG:13780

& n  D+ w& i' a/ b3 G
. o* l; H! O3 C; P% L当然也可以判断其他的文件类型,自己做做试验就知道数值大小了。不过如果仅仅是判断图片的话,还有一个更简单方法,那就是getimagesize,这个方法虽然从名字上看是用来取得图片大小的,但结果里包含了图片类型,另外,虽然这个方法在文档里被归纳在GD部分,但是即便没有安装GD,也是可用的。

网址: 相关网址


相关文章:

o CURL 模拟FTP上传文件
o 利用PHP小程序清除Mysql死连接
o 限制textarea输入的字符数
o 使用PHP调用TinyURL API的方法
o php实现验证码的识别
o 多菜鸟的PHP缓存类
o PHP缩图类
o 智能的PHP缩图类
o 推荐一个很强的PHP图片处理(含缩图)类
o PHP删除非空目录函数


   Search:

   

   Categories:

 Open All Close


Copyright techdoc.netsoftlab.ca powered by netsoft lab. 2007-2012  
Friend Websites:   netsoftlab.ca   cnstar.ca   CS lessions