PHP file type verification class function based on file header
Last Update:2018-04-03
Source: Internet
Author: User
In PHP development, the traditional file Upload type verification method is based on the file extension (such as the pathinfo function), it is easy to modify the extension to deceive me to write a verification class here, determine the file format through the file header. (It is not secure. if the user spoofs the file header, it can pass verification)
The code is as follows:
/**
* Document type
*
* @ Author Silver
*/
Class FileTypeValidation
{
// File type, different header information
Private static $ _ fileFormats = Array (
'Jp2' => '0000000c6a502020 ',
'3gp '=> '123 ',
& Apos; 3gp5 & apos; = & apos; 0000001866747970 & apos ',
'M4a '=> '00000020667479704d3441 ',
'Ico '=> '123 ',
'Spl' => '123 ',
'Vob' => '0001ba ',
& Apos; cur & apos; = & apos; 00000200 & apos ',
'Wb2' => '123 ',
'Wk1 '=> '123 ',
'Wk3' => '20171a0000100400 ',
'Wk4 '=> '20171a0002100400 ',
'Wk5 '=> '20171a0002100400 ',
'20140901' => '20171a00051004 ',
'Qxd '=> '20174d4d585052 ',
'Mdf '=> '010f0000 ',
'Tr1' => '123 ',
'Rgb '=> '01da01010003 ',
'Drw' => '07 ',
'Dss '=> '123 ',
'Dat '=> 'a90d000000000000 ',
'Db3' => '03 ',
'Qph' => '123 ',
'Adx' => '123 ',
'Db4' => '04 ',
'N' => 'fffe000000 ',
'A' => 'fffe000000 ',
'Skf '=> '07534b46 ',
'Dtd '=> '123 ',
'DB' => 'd0cf11e0a1b11ae1 ',
'Pcx' => '0a050101 ',
'MP' => '0ced ',
'Doc' => 'd0cf11e0a1b11ae1 ',
'Nri' => '0e4e65108f49534f ',
'Wk' => 'ff00020004040554 ',
'Pf '=> '123 ',
'Ntf' => '4e49544630 ',
'NSF '=> '4e45534d1a01 ',
'Arc' => '123 ',
'Pak '=> '5041434b ',
'Eth '=> '1a350100 ',
'Mkv '=> '1a45dfa393428288 ',
'Ws '=> '1d7d ',
'Gz '=> '1f8b08 ',
'Tar. Z' => '1fa0 ',
'Ain '=> '123 ',
'Lib' => 'Export c617264243e0a ',
'Msi '=> 'd0cf11e0a1b11ae1 ',
'Vmdk' => '4b444d ',
'Dsps '=> '23204d6963726f73 ',
'Amr' => '2321414d52 ',
& Apos; hdr & apos; = & apos; 49536328 & apos ',
'Sav' => '24464c3240282329 ',
'Eps '=> 'c5d0d3c6 ',
'PDF '=> '123 ',
'Fdf '=> '123 ',
'Hqx' => '123 ',
'Log' => '2a2a2a2020496e73 ',
'Ivr' => '2e524543 ',
'Rm '=> '2e524d46 ',
'Rmvb '=> '2e524d46 ',
'A' => '2e00001fd00 ',
'Au '=> '646e732e ',
'Cat' => '30 ',
'Evt' => '300000004c664c65 ',
'Asf' => '3026b2758e66cf11 ',
'Wma' => '3026b2758e66cf11 ',
'Wmv '=> '3026b2758e66cf11 ',
'Wri' => 'bedomain00ab ',
'7z' => '377abcaf271c ',
'Psd '=> '123 ',
'Sync' => '123 ',
'Asx' => '3C ',
'Xdr '=> '3C ',
'Dci' => '3c21646f63747970 ',
'Manifest '=> '3c3f786d6c2076657272136f6e3d ',
'Xml' => '3c3f786d6c2076657272136f6e3d22312e30223f3e ',
'Msc '=> 'd0cf11e0a1b11ae1 ',
'FM '=> '3c4d616b65724669 ',
'If' => '56657272136f6e20 ',
'Gid' => '4c4e0200 ',
'Hlp '=> '4c4e0200 ',
'Dwg '=> '123 ',
'Syw' => '414d594f ',
'Abi '=> '414f4c494e444558 ',
'Aby' => '414f4c4442 ',
'Bag' => '414f4c2046656564 ',
'Idx' => '123 ',
'IND '=> '414f4c494458 ',
'Pfc '=> '414f4c564d313030 ',
'Org '=> '414f4c564d313030 ',
'Vcf '=> '2017547494e3a5643 ',
'Bin' => 'Export c4932323351 ',
'Bmp '=> 'mongod ',
'Dib' => 'did ',
'Prc' => '0000f4f4b4d4f00009 ',
'Bz2' => '2017a68 ',
'Tar.bz2 '=> '2017a68 ',
'Tbz2' => '0000a68 ',
'Tb2' => '2017a68 ',
'Rtd' => '43232b44a4434da5 ',
'CBD '=> '434246494c45 ',
'ISO '=> '123 ',
'Clb' => '434f4d2b ',
'Cpt' => '43505446494c45 ',
'Cru' => '000000 ',
'Swf '=> '123 ',
'Ctf' => '436174616c6f6720 ',
'DMs' => '444d5321 ',
'Adf' => '5245564e554d3a2c ',
'DVR' => '123 ',
'Ifo' => '123 ',
'Cdrs '=> '123 ',
'Vcd' => '454e545259564344 ',
'Mdi '=> '123 ',
'E01' => '4c5646090d0aff00 ',
'Evtx '=> '456c6646696c6500 ',
'Qbb' => '123 ',
'Cpe '=> '464158434f564552 ',
'Flv' => '464c56 ',
'Aiff '=> '464f524d00 ',
'Yml' => '582d ',
'Gif' => '123 ',
'Pat '=> '123 ',
'Gx2 '=> '123 ',
'Sh3' => '123 ',
'Tif '=> '4d4d002b ',
'Tiff '=> '4d4d002b ',
'Mp3' => '123 ',
'Koz' => '123 ',
'Crw' => '49491a0000004845 ',
'Cab '=> '4d534346 ',
'Command' => '49544f4c49544c53 ',
'Chi '=> '123 ',
'Chm' => '123 ',
'Jar' => '5f27a889 ',
'JG' => '4a47040e000000 ',
'K' => '4b47213f61726368 ',
'Shd' => '123 ',
'Lnk '=> '4c00000001140200 ',
'Obj '=> '80 ',
'Pdb' => 'aced000573720012 ',
'Mar '=> '4d000023000 ',
'Dmp '=> '123 ',
'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 ',
'000000' => '4d5a ',
'Api' => '4d5a900003000000 ',
'Flt' => '76323030332e3130 ',
'Zap '=> '4d5a90000300000004000000ffff ',
'Sln' => '4d6963726f736f66742056697375616c ',
'Jnt '=> '4e422a00 ',
'Jtp '=> '4e422a00 ',
'Cod '=> '4e616d653a20 ',
'Dbf' => '4f504c4461746162 ',
'Oga' => '4f67675300020000 ',
'Ogy' => '4f67675300020000 ',
'Ogv' => '4f67675300020000 ',
'Ogx' => '4f67675300020000 ',
'Dw4' => '4f7b ',
'Pgm '=> '50350a ',
'Pax' => '123 ',
'Pgd '=> '504750644d41494e ',
'IMG '=> 'eb3c902a ',
'Zip' => '504b0304140000 ',
'Docx' => '504b030414000600 ',
'Ppt' => '504b030414000600 ',
'Xlsx' => '504b030414000600 ',
'Kwd '=> '504b0304 ',
'Odt' => '504b0304 ',
'Odp' => '504b0304 ',
'Ott '=> '504b0304 ',
'Sxc '=> '504b0304 ',
'Sxd '=> '504b0304 ',
'Ssi' => '504b0304 ',
'Sxw' => '504b0304 ',
'Wmz' => '504b0304 ',
'Xpi '=> '504b0304 ',
'Xps '=> '504b0304 ',
'Xpt' => '5850434f4d0a5479 ',
'Grp '=> '504d4343 ',
'Qemu' => '123 ',
'Abd' => '5157205665722e20 ',
'Qsd' => '5157205665722e20 ',
'Reg '=> 'fffe ',
'Sud' => '123 ',
'Ani '=> '123 ',
'Cmx' => '20140901 ',
'Ds4' => '123 ',
'4xm '=> '123 ',
'Av' => '123 ',
'Cda' => '123 ',
'Qcp' => '123 ',
'Rummi' => '123 ',
'Wav '=> '123 ',
'Cap' => '123 ',
'Rar '=> '526172211a0700 ',
'Ast '=> '5343486c ',
'Shw' => '53484f57 ',
'CPI '=> 'ff464f4e54 ',
'Sit '=> '123 ',
'Sdr '=> '534d2017254445257 ',
'Fcn' => '53514c4f434f4e56 ',
'Cal '=> 'b5a2b0b3b0a5b5 ',
'Info' => 'e31000000000000 ',
'Uce '=> '123 ',
'Ufa '=> '554641c6d2c1 ',
'Pch' => '123 ',
'Ctl '=> '56455253494f4e20 ',
'Ws2 '=> '123 ',
'Lwp '=> '576f000000000000f ',
'Bdr '=> '123 ',
'Zoo' => '5a4f4f20 ',
'Ecf' => '5b47656e6538516c ',
'Vcw' => '5b4d535643 ',
'Dun' => '5b50686f6e655d ',
'Sam '=> '5b7665725d ',
'Cpx' => '5b57696e646f7773 ',
'Cfg '=> '5b666c7471_6d2e ',
'Cas '=> '5f434153455f ',
'Cbk' => '5f434153455f ',
'Arj' => '60ea ',
'Vhd '=> '636f6e6563746978 ',
'CSH' => '123 ',
'P10' => '123 ',
'Dex '=> '6465780a30303900 ',
'Dsw' => '64737766696c65 ',
'Flac '=> '664c614300000022 ',
'Dbb' => '6c33336c ',
'ACD' => '123 ',
'Ram' => '727473703a2f2f ',
'Dmg '=> '78 ',
'Lgc '=> '7b0d0a8f20 ',
'Lgd '=> '7b0d0a6f20 ',
'Pwi '=> '7b5c707769 ',
'Rtf '=> '7b5c72746631 ',
'PSP '=> '7e0000b00 ',
'Wab' => '9ccbcb8d1375d211 ',
'Wpf '=> '81cdab ',
'PNG '=> '89504e470d0a1a0a ',
'Aw' => '8a01090020.e108 ',
'Ha' => '123 ',
'Skr' => '123 ',
'Gpg' => '99 ',
'Pkr' => '123 ',
'Qdf '=> 'ac9ebd8f0000 ',
'Pwl' => 'e3828596 ',
'Dcx' => 'b168de3a ',
'Tid' => '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 ',
'Rdv' => 'd0cf11e0a1b11ae1 ',
'Sou' => 'd0cf11e0a1b11ae1 ',
'SPO' => 'd0cf11e0a1b11ae1 ',
'Password' => 'd0cf11e0a1b11ae1 ',
'Wps' => 'd0cf11e0a1b11ae1 ',
'Ftr' => 'd20a0000 ',
'Arl' => 'd42a ',
'Aut' => 'd42a ',
'WMF '=> 'd7csc69a ',
'Efx' => 'dcfe ',
'One' => 'e4525c7b8cd8a74d ',
'RP' => '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 ',
);
/**
* Check the file type
*
* @ Param string $ filePath file path
* @ Param string $ fileExt file extension
*
* @ Return boolean
*/
Public static function validation ($ filePath, $ fileExt)
{
// Unknown file format
If (! Isset (self ::$ _ fileFormats [$ fileExt])
{
Return false;
}
$ Length = strlen (self: $ _ fileFormats [$ fileExt]);
$ Bin = self: _ readFile ($ filePath, $ length );
$ FileHead = @ unpack ("H {$ length}", $ bin );
// Determine the file header
If (strtolower (self: $ _ fileFormats [$ fileExt]) = $ fileHead [1])
{
Return true;
}
Return false;
}
/**
* Reading file content
*
* @ Param string $ filePath file path
* @ Param integer $ size
*
* @ Return string
*/
Private function _ readFile ($ filePath, $ size)
{
$ File = fopen ($ filePath, "rb ");
$ Bin = fread ($ file, $ size );
Fclose ($ file );
Return $ bin;
}
}
?>
Call
The code is as follows:
Require './class_filetypevalidation.php ';
// File path
$ FilePath = "D:/test.png ";
$ X = FileTypeValidation: validation ($ filePath, 'Zip ');
Var_dump ($ x );