Как определить, является ли выбранное изображение для загрузки допустимым?

Я реализую скрипт, который проверяет изображение для загрузки с использованием php. На самом деле, php-скрипт хорошо работает с файлом изображения gif, png и jpg, но когда у меня есть одно условие:

  1. Я взял изображение theFileName.bmp и переименовал его расширение в theFileName.jpg .
  2. Затем я выбираю переименованный для загрузки.

Я переименовал имя файла изображения вручную на свой компьютер, а затем я выбрал файл для загрузки.

Процесс загрузки занял около 2 или 3 секунд, после чего ничего не появилось (даже не ошибка), отображается только сообщение по умолчанию из браузера:

Соединение с локальным хостом было прервано.

Как я могу запретить пользователю выбирать файл изображения (и любой другой файл, если на то пошло), который не является действительным действительным изображением?

Решения здесь

Наконец, мне удалось найти собственные решения. Это немного долго, но, по крайней мере, это может сделать работу! Надеюсь, это может помочь кому-то.

  1. Это помогает предотвратить загрузку пользователем не требуемого типа mime
  2. Предотвращение использования пользователем текстового файла и его переименование и т. Д.
  3. Предотвращение использования пользователем текстового файла и изменение его типа mime
  4. Предотвращение из файла является непрочитанным
  5. Предотвращение из файла содержит ошибку
  6. Запретить загрузку не http
  7. Предотвращение размера файла изображения: 0, высота: 0
  8. Есть еще много вещей, чтобы проверить и проверить, чтобы убедиться, что это безопасно с помощью этого средства.

     # CHECK & TRY READ IMAGE FILE function is_readable_image( $theTmpFileloc ){ try { if ( !getimagesize( $theTmpFileloc ) ){ # THE IMAGE IS UNREADABLE return false; } # THE IMAGE IS READABLE return true; }catch( Exception $e ){ # THE IMAGE IS OTHER FILE return false; } } # READ AND RETURN AN ARRAY OF IMAGE SIZES function get_image_size( $theTmpFileloc ){ $imageSizes = array(); $tmpResults = getimagesize( $theTmpFileloc ); $imageSizes['width'] = $tmpResults[0]; $imageSizes['height'] = $tmpResults[1]; # IF EITHER WIDTH OR HEIGHT = 0, RETURN FALSE if ( $tmpResults[0] == 0 || $tmpResults[1] == 0 ) { return false; } return $imageSizes; } # READ AND RETURN AN IMAGE ACTUAL MIMETYPE function get_image_mime( $theTmpFileloc ){ $imageMime = ''; $tmpResults = getimagesize( $theTmpFileloc ); $imageMime = $tmpResults['mime']; return $imageMime; } # START OF PHP TO VALIDATE IMAGE FILE if ( isset($_FILES['postImage']) && !empty($_FILES['postImage']['name']) ) { $tmpFileLoc = $_FILES['postImage']['tmp_name']; $array_file_type = array('image/gif', 'image/png', 'image/x-png', 'image/jpeg', 'image/pjpeg'); if ( $_FILES['postImage']['error'] == 1 ) { # THE IMAGE FILE CONTAINS ERROR $resMessage['Error'] = true; }elseif ( !is_uploaded_file( $tmpFileLoc ) ) { # PREVENT FROM UPLOADING FROM EXTERNAL SOURCE NOT HTTP $resMessage['Error'] = true; }elseif ( !is_readable_image( $tmpFileLoc ) ) { # PREVENT FROM IMAGE IS INVALID OR OTHER MIMETYPE $resMessage['Error'] = true; }elseif ( !get_image_size( $tmpFileLoc ) ) { # PREVENT FROM IMAGE SIZE 0, 0 OR INVALID ACTUAL MIMETYPE $resMessage['Error'] = true; }elseif ( !in_array( get_image_mime( $tmpFileLoc ), $array_file_type) ) { # LEVEL 2 OF CHECKING AN IMAGE MIMETYPE $resMessage['Error'] = true; }else { # other checks with file extension, max_size, # dir is_writable and so on then move to move_uploaded_file } }