Какой метод безопасен для загрузки файлов в php? - PullRequest
1 голос
/ 04 апреля 2020

Существует два способа проверить формат файла при загрузке в php.

$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) { ........

и использовать MIME-тип ...

if(($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/png")
|| ($_FILES["file"]["type"] == "image/jpg") .....

В каком режиме вы рекомендуете мы верим с точки зрения безопасности и почему?

Ответы [ 2 ]

0 голосов
/ 07 апреля 2020

PHP имеет набор функций imagecreatefXXX (). Я хотел бы использовать их на основе $ _FILES ['xxx'] ['type'] и посмотреть, получите ли вы действительный ресурс изображения. Если выходные данные из imagecreatefromXXX () имеют значение FALSE, откажитесь от файла. Смотрите пример здесь:

https://www.php.net/manual/en/function.imagecreatefrompng

Также полезно знать о том, как сделать безопасную загрузку файлов, et c. Как всегда на сайте PHP, пользовательские заметки содержат самородки чистого золота.

https://www.php.net/manual/en/features.file-upload.php

https://www.php.net/manual/en/features.file-upload.post-method.php

0 голосов
/ 04 апреля 2020

@ unclexo Я написал код следующим образом. Как вы думаете, это безопасно?

$file = $_FILES["file"]["name"];
$Forfi = basename($file);
$FilTy = strtolower(pathinfo($Forfi,PATHINFO_EXTENSION));
if( $FilTy == "gif" || $FilTy == "jpg" || $FilTy == "jpeg" .............. Step 1

if(($_FILES["file"]["type"] == "image/gif") || ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg") || .............. Step 2

if($_FILES["file"]["size"] < 17500000){.............. Step 3

if($_FILES["file"]["error"] == 0){.............. Step 4

if(is_uploaded_file($_FILES["file"]["tmp_name"])){ .............. Step 5

$MimeChk = finfo_file(finfo_open(FILEINFO_MIME_TYPE) , $_FILES["file"]["tmp_name"]);
$AllowTy = array("image/png","image/jpeg","application/pdf");
if(in_array($MimeChk,$AllowTy)){ .............. Step 6

.... rename file and use move_uploaded_file .............. Step 7

Эти 7 шагов выполняются по порядку. Как вы думаете, эти злоумышленники безопасны для загрузки файлов?

...