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 );