Проблема здесь в том, что CodeIgniter, похоже, имеет небольшую ошибку в своем загрузчике, и я согласен с @ bearfriend.
Функция is_allowed_filetype()
библиотеки загрузки позволяет параметр $ignore_mime
, но этот параметрне поставляется в функции do_upload
.Поэтому мое решение - отключить обнаружение пантомимы и (смею сказать) изменить класс загрузки ядра так, чтобы проверка загрузки файла выглядела следующим образом:
if ( ! $this->is_allowed_filetype($this->detect_mime ? false : true))
** Обратное значениетребуется ваш параметр detect_mime
Однако, к сожалению, здесь есть другая проблема безопасности.Пользователь может переименовать вирус.exe в allow.jpg, и файл все равно будет разрешен.Насколько это плохо, зависит от прав доступа к файлам и того, для чего вы используете файлы, а также от того, как эти файлы будут использоваться.Я, например, попробовал эту идею здесь (https://www.bleepingcomputer.com/forums/t/573945/this-looks-new-and-slipped-by-the-gmail-filters-this-morning/#entry3687679), и он не загрузился, потому что это был недопустимый образ. Разные ОС могут отличаться.
Другая проблема с моим решением - если вы решитедля обновления CI эти изменения будут потеряны (хотя, возможно, будут улучшены в более позднем выпуске).
Да, и CI тогда никогда не установит $this->file_type
с ignore_mime
true. Решение, если вам требуется file_typeв выводе после загрузки вместо этого будет использоваться ваше собственное имя переменной (вместо того, чтобы придерживаться ignore_mime).