PHP,Web安全 文件上传 发表于 2018-12-08 浏览量 30 没有评论 现在web安全互联网上一直以来都是一个比较严峻的问题,DDOS、CSRF、XSS、SQL注入、CRLF、点击劫持、图片覆盖劫持、触摸劫持等。我们在写文件上传改怎么写?文件上传又该注意什么? ##### 注意点 文件允许上传我们所需要的文件类型,但是我们不能仅仅简单的通过文件名或是mime获取文件的后缀,因为那些东西是可以篡改的,如果你是简单的通过这种方式来获取合法性,那么你成功被那些意图不单纯的人注入了不合法的文件。php提供了fileinfo扩展,此扩展可以通过文件内容来判断该文件类型,可以有效的控制合法的文件类型 示例代码 ```PHP file($_FILES['excelfile']['tmp_name']), allowExt(), true)) { throw new Exception('Illegal file'); } $fileDir = __DIR__ . '/../../files'; if (!move_uploaded_file($_FILES['excelfile']['tmp_name'], $file = sprintf("$fileDir/%s.%s", sha1_file($_FILES['excelfile']['tmp_name']), $ext))) { throw new Exception('Upload fail'); } exit('success'); } catch (Exception $e) { exit($e->getMessage()); } function allowExt() { return [ 'csv' => 'application/csv', 'xls' => 'application/vnd.ms-excel', 'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'xltx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.template', 'xlsm' => 'application/vnd.ms-excel.sheet.macroEnabled.12', 'xltm' => 'application/vnd.ms-excel.template.macroEnabled.12', 'xlam' => 'application/vnd.ms-excel.addin.macroEnabled.12', 'xlsb' => 'application/vnd.ms-excel.sheet.binary.macroEnabled.12', ]; } ```