PHP 基于文件头的文件类型验证类函数 |
本文标签:文件类型,验证类 我这里写了一个验证类,是通过文件头来判断文件格pps也不是百分之百安全,如果用户伪造了文件头,也能通过验证) 复制代码 代码如下: <?php /** * 检证文件类型类 * * @author Silver */ class FileTypeValidation { // 文件类型,不同的头信息 private static $_fileFormats = Array( jp2 => 0000000C6A502020,<br/> 3gp => 0000002066747970, 3gp5 => 0000001866747970, m4a => 00000020667479704D3441, ico => 00000100, spl => 00000100, vob => 000001BA, cur => 00000200, wb2 => 00000200, wk1 => 0000020006040600, wk3 => 00001A0000100400, wk4 => 00001A0002100400, wk5 => 00001A0002100400, 123 => 00001A00051004, qxd => 00004D4D585052, mdf => 010F0000, tr1 => 0110, rgb => 01DA01010003, drw => 07, dss => 02647373, dat => A90D000000000000, db3 => 03, qph => 03000000, adx => 80000020031204, db4 => 04, n => FFFE0000, a => FFFE0000, skf => 07534B46, dtd => 0764743264647464, db => D0CF11E0A1B11AE1, pcx => 0A050101, mp => 0CED, doc => D0CF11E0A1B11AE1, nri => 0E4E65726F49534F, wks => FF00020004040554, pf => 1100000053434341, ntf => 4E49544630, nsf => 4E45534D1A01, arc => 41724301, pak => 5041434B, eth => 1A350100, mkv => 1A45DFA393428288, ws => 1D7D, gz => 1F8B08, tar.z => 1FA0, ain => 2112, lib => 213C617263683E0A, msi => D0CF11E0A1B11AE1, vmdk => 4B444D, dsp => 23204D6963726F73, amr => 2321414D52, hdr => 49536328, sav => 24464C3240282329, eps => C5D0D3C6, pdf => 25504446, fdf => 25504446, hqx => 2854686973206669, log => 2A2A2A2020496E73, ivr => 2E524543, rm => 2E524D46, rmvb => 2E524D46, ra => 2E7261FD00, au => 646E732E, cat => 30, evt => 300000004C664C65, asf => 3026B2758E66CF11, wma => 3026B2758E66CF11, wmv => 3026B2758E66CF11, wri => BE000000AB, 7z => 377ABCAF271C, psd => 38425053, sle => 414376, asx => 3C, xdr => 3C, dci => 3C21646F63747970, manifest => 3C3F786D6C2076657273696F6E3D, xml => 3C3F786D6C2076657273696F6E3D22312E30223F3E, msc => D0CF11E0A1B11AE1, fm => 3C4D616B65724669, mif => 56657273696F6E20, gid => 4C4E0200, hlp => 4C4E0200, dwg => 41433130, syw => 414D594F, abi => 414F4C494E444558, aby => 414F4C4442, bag => 414F4C2046656564, idx => 5000000020000000, ind => 414F4C494458, pfc => 414F4C564D313030, org => 414F4C564D313030, vcf => 424547494E3A5643, bin => 424C4932323351, bmp => 424D, dib => 424D, prc => 424F4F4B4D4F4249, bz2 => 425A68, tar.bz2 => 425A68, tbz2 => 425A68, tb2 => 425A68, rtd => 43232B44A4434DA5, cbd => 434246494C45, iso => 4344303031, clb => 434F4D2B, cpt => 43505446494C45, cru => 43525553482076, swf => 465753, ctf => 436174616C6F6720, dms => 444D5321, adf => 5245564E554D3A2C, dvr => 445644, ifo => 445644, cdr => 52494646, vcd => 454E545259564344, mdi => 4550, e01 => 4C5646090D0AFF00, evtx => 456C6646696C6500, qbb => 458600000600, cpe => 464158434F564552, flv => 464C56, aiff => 464F524D00, eml => 582D, gif => 47494638, pat => 47504154, gx2 => 475832, sh3 => 4848474231, tif => 4D4D002B, tiff => 4D4D002B, mp3 => 494433, koz => 49443303000000, crw => 49491A0000004845, cab => 4D534346, lit => 49544F4C49544C53, chi => 49545346, chm => 49545346, jar => 5F27A889, jg => 4A47040E000000, kgb => 4B47425F61726368, shd => 68490000, lnk => 4C00000001140200, obj => 80, pdb => ACED000573720012, mar => 4D41723000, dmp => 504147454455, hdmp => 4D444D5093A7, mls => 4D563243, mmf => 4D4D4D440000, nvram => 4D52564E, ppz => 4D534346, snp => 4D534346, tlb => 4D53465402000100, dvf => 4D535F564F494345, msv => 4D535F564F494345, mid => 4D546864, midi => 4D546864, dsn => 4D56, com => EB, dll => 4D5A, drv => 4D5A, exe => 4D5A, pif => 4D5A, qts => 4D5A, qtx => 4D5A, sys => FFFFFFFF, acm => 4D5A, ax => 4D5A900003000000, cpl => DCDC, fon => 4D5A, ocx => 4D5A, olb => 4D5A, scr => 4D5A, vbx => 4D5A, vxd => 4D5A, 386 => 4D5A, api => 4D5A900003000000, flt => 76323030332E3130, zap => 4D5A90000300000004000000FFFF, sln => 4D6963726F736F66742056697375616C, jnt => 4E422A00, jtp => 4E422A00, cod => 4E616D653A20, dbf => 4F504C4461746162, oga => 4F67675300020000, ogg => 4F67675300020000, ogv => 4F67675300020000, ogx => 4F67675300020000, dw4 => 4F7B, pgm => 50350A, pax => 504158, pgd => 504750644D41494E, img => EB3C902A, zip => 504B0304140000, docx => 504B030414000600, pptx => 504B030414000600, xlsx => 504B030414000600, kwd => 504B0304, odt => 504B0304, odp => 504B0304, ott => 504B0304, sxc => 504B0304, sxd => 504B0304, sxi => 504B0304, sxw => 504B0304, wmz => 504B0304, xpi => 504B0304, xps => 504B0304, xpt => 5850434F4D0A5479, grp => 504D4343, qemu => 514649, abd => 5157205665722E20, qsd => 5157205665722E20, reg => FFFE, sud => 52454745444954, ani => 52494646, cmx => 52494646, ds4 => 52494646, 4xm => 52494646, avi => 52494646, cda => 52494646, qcp => 52494646, rmi => 52494646, wav => 52494646, cap => 58435000, rar => 526172211A0700, ast => 5343486C, shw => 53484F57, cpi => FF464F4E54, sit => 5374756666497420, sdr => 534D415254445257, cnv => 53514C4F434F4E56, cal => B5A2B0B3B3B0A5B5, info => E310000100000000, uce => 55434558, ufa => 554641C6D2C1, pch => 564350434830, ctl => 56455253494F4E20, ws2 => 575332303030, lwp => 576F726450726F, bdr => 5854, zoo => 5A4F4F20, ecf => 5B47656E6572616C, vcw => 5B4D535643, dun => 5B50686F6E655D, sam => 5B7665725D, cpx => 5B57696E646F7773, cfg => 5B666C7473696D2E, cas => 5F434153455F, cbk => 5F434153455F, arj => 60EA, vhd => 636F6E6563746978, csh => 6375736800000002, p10 => 64000000, dex => 6465780A30303900, dsw => 64737766696C65, flac => 664C614300000022, dbb => 6C33336C, acd => 72696666, ram => 727473703A2F2F, dmg => 78, lgc => 7B0D0A6F20, lgd => 7B0D0A6F20, pwi => 7B5C707769, rtf => 7B5C72746631, psp => 7E424B00, wab => 9CCBCB8D1375D211, wpf => 81CDAB, png => 89504E470D0A1A0A, aw => 8A0109000000E108, hap => 91334846, skr => 9501, gpg => 99, pkr => 9901, qdf => AC9EBD8F0000, pwl => E3828596, dcx => B168DE3A, tib => B46E6844, acs => C3ABCDAB, lbk => C8007900, class => CAFEBABE, dbx => CFAD12FE, dot => D0CF11E0A1B11AE1, pps => D0CF11E0A1B11AE1, ppt => D0CF11E0A1B11AE1, xla => D0CF11E0A1B11AE1, xls => D0CF11E0A1B11AE1, wiz => D0CF11E0A1B11AE1, ac_ => D0CF11E0A1B11AE1, adp => D0CF11E0A1B11AE1, apr => D0CF11E0A1B11AE1, mtw => D0CF11E0A1B11AE1, opt => D0CF11E0A1B11AE1, pub => D0CF11E0A1B11AE1, rvt => D0CF11E0A1B11AE1, sou => D0CF11E0A1B11AE1, spo => D0CF11E0A1B11AE1, vsd => D0CF11E0A1B11AE1, wps => D0CF11E0A1B11AE1, ftr => D20A0000, arl => D42A, aut => D42A, wmf => D7CDC69A, efx => DCFE, one => E4525C7B8CD8A74D, rpm => EDABEEDB, gho => FEEF, ghs => FEEF, wp => FF575043, wpd => FF575043, wpg => FF575043, wpp => FF575043, wp5 => FF575043, wp6 => FF575043, jfif => FFD8FF, jpe => FFD8FF, jpeg => FFD8FF, jpg => FFD8FF, mof => FFFE23006C006900, ipa => 504B03040A, ); /** * 检查文件类型 * * @param string $filePath 文件路径 * @param string $fileExt 文件扩展名 * * @return boolean */ public static function validation($filePath, $fileExt) { // 文件格式未知 if (!isset(self::$_fileFormats[$fileExt])) { return false; } $length = strlen(self::$_fileFormats[$fileExt]); $bin = self::_readFile($filePath, $length); $fileHead = @unpack("H{$length}", $bin); // 判断文件头 if (strtolower(self::$_fileFormats[$fileExt]) == $fileHead[1]) { return true; } return false; } /** * 读取文件内容 * * @param string $filePath 文件路径 * @param integer $size * * @return string */ private function _readFile($filePath, $size) { $file = fopen($filePath, "rb"); $bin = fread($file, $size); fclose($file); return $bin; } } ?> 调用 复制代码 代码如下: require ./class_filetypevalidation.php; // 文件路径 $filePath = "D:/test.png"; $x = FileTypeValidation::validation($filePath, zip); var_dump($x); |