Расширение загружаемого файла не входит в список разрешенных

Обновлено: 07.07.2024

Для повышения безопасности работы в Creatio вы можете настроить ограничения форматов загружаемых в приложение сторонних файлов. Ограничения на загрузку файлов действуют как для пользователей, так и для интеграций, например, внешних веб-сервисов.

При настроенных ограничениях Creatio проверяет формат файлов, которые загружаются на деталь Файлы и ссылки . В случае соответствия настройкам файл будет успешно загружен. В другом случае файл загружен не будет, а пользователь получит уведомление, что загрузка данного файла запрещена настройками безопасности. Для файлов, загруженных в систему до включения ограничений, настройки не применятся.

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

В системе предусмотрены следующие способы ограничения загрузки файлов:

Ограничения для файлов определенных типов — вы можете настроить список разрешенных расширений или список запрещенных расширений файлов. В этом случае можно установить разрешение или запрет на загрузку в приложение файлов определенных типов.

Ограничения для файлов неизвестных типов. В этом случае можно установить разрешение или запрет на загрузку в приложение файлов, у которых не указано расширение и невозможно определить тип по содержимому.

Выбрать режим проверки файлов

btn_system_designer.jpg

Перейдите в дизайнер системы по кнопке .

Перейдите в раздел Системные настройки .

Откройте системную настройку “Режим проверки файлов” (код “FileSecurityMode”).

В поле Значение по умолчанию выберите необходимый тип ограничения:

“Проверка файлов отключена” — чтобы отменить все ограничения на загрузку файлов в приложение.

“Список запрещенных расширений” — чтобы запретить загрузку в приложение файлов определенных типов.

“Список разрешенных расширений” — чтобы разрешить загрузку в приложение только файлов определенных типов.

Сохраните изменения.

Настроить список типов файлов

btn_system_designer00001.jpg

Перейдите в дизайнер системы по кнопке .

Перейдите в раздел Системные настройки .

Откройте системную настройку

“Список разрешенных расширений файлов” (код “FileExtensionsAllowList”), чтобы настроить список разрешенных к загрузке типов файлов. По умолчанию в настройке приведены наиболее часто используемые типы файлов.

“Список запрещенных расширений файлов” (код “FileExtensionsDenyList”), чтобы настроить список запрещенных к загрузке типов файлов. По умолчанию в настройке приведены типы файлов, которые могут являться вредоносными.

В поле Значение по умолчанию через запятую без пробела укажите расширения файлов ( Рис. 1 ) и проверьте корректность ввода.

Рис. 1 — Пример заполнения системной настройки “Список разрешенных расширений файлов”

scr_chapter_security_list_of_allowed.jpg

Сохраните изменения.

Настроить ограничения для неизвестных типов файлов

Creatio определяет типы загружаемых файлов по их расширению. В случае если расширение не указано, система определяет тип файла на основании его содержимого. По умолчанию в систему разрешено загружать файлы неизвестных типов. Запрет загрузки таких файлов повысит безопасность работы в приложении, но в этом случае обязательно потребуется настроить список разрешенных или запрещенных расширений.

Чтобы запретить загрузку в Creatio файлов неизвестных типов:

btn_system_designer00002.jpg

Перейдите в дизайнер системы по кнопке .

Перейдите в раздел Системные настройки .

Откройте системную настройку “Разрешить работу с неизвестными типами файлов” (код “AllowFilesWithUnknownType”).

Снимите признак Значение по умолчанию .

Сохраните изменения.

Настроить исключение веб-сервисов из ограничений загрузки файлов

Ограничение загрузки файлов применяется для всех используемых в системе веб-сервисов, включая те, которые были добавлены в процессе кастомизации системы, в проектных решениях и приложениях Marketplace. Чтобы веб-сервисы могли добавлять в Creatio файлы тех типов, которые не разрешены пользователям, их необходимо добавить в список исключений. Для этого:

btn_system_designer00003.jpg

Перейдите в дизайнер системы по кнопке .

Перейдите в раздел Справочники .

Откройте справочник Список исключений из проверки безопасности файлов .

Нажмите Добавить .

В поле Название укажите URI веб-сервиса, который необходимо добавить в исключения. Запись сохраняется автоматически.

Повторите для всех веб-сервисов, которым необходимо разрешить загрузку файлов в приложение.

WordPress не позволяет загружать в медиатеку что попало - защищается. Файлы нестандартных (не разрешенных) типов загрузить невозможно, потому что в WP есть список допустимых форматов файлов, т.е. белый список mime-типов.

Ищем WP-разработчика! Фулл-тайм, удаленка, хорошая зарплата, соц. пакет. Подробности.
Компания Boosta.

Иногда такая защита мешает, и несмотря на потенциальную опасность все же нужно иметь возможность загружать файлы нужных нам типов.

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

Вот так выглядит ошибка, если, например, попытаться загрузить файл в расширением .svg :


Процесс загрузки файла и проверка его типа

Нажали "загрузить", выбрали файл загрузили, WP отправил запрос на файл wp-admin/async-upload.php.

Далее по следующей цепочке до проверки миме типа:

Разрешаем/запрещаем типы файлов для загрузки

Для управления белым списком расширений файлов есть два хука:

upload_mimes - срабатывает раньше чем wp_check_filetype_and_ext .

Пример ниже показывает как разрешить загрузку одних типов файлов ( .doc , .djvu ) и как запретить другие ( .mp4a ) - удалить из белого списка.

По аналогии можно разрешать или запрещать любые другие типы файлов. См. Список MIME типов.

Как загружать SVG файлы

Тип SVG файла может меняться в зависимости от файла, поэтому с ним не все так просто. Подробнее смотрите в отдельной статье.

Там же можно увидеть какие могут нестандартные ситуации могут возникнуть при разрешении загрузки запрещенных типов файлов и как их решать.

Загрузка картинок с неправильным расширением

В WP предусмотрен механизм исправления расширения файла, когда оно указано неправильно. Например, мы загружаем картинку img.jpg реальный формат которой JPG. В этом случае проверка на соответствие реального MIME типа файла и его расширения не проходит и WP, на основе списка подобных соответствий, пытается установить правильное расширение и пройти проверку снова (см: wp_check_filetype_and_ext()). Если проверка проходит, то название файла изменяется на правильное.

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

Например, мы добавили WEBP формат в фильтр upload_mimes , нам также нужно учесть и этот механизм проверки соответствия расширения и mime типа, иначе мы просто не сможем загрузить картинку WEBP формата, если в названии у неё указано отличное от .webp расширение.

Сделать это можно с помощью фильтра getimagesize_mimes_to_exts, подробнее про то как все это работает, читайте в описании фильтра.

После этого хука, вы сможете загружать картинки WEBP формата, даже если в их названии указано другое расширение, например image.jpg .

Включение права unfiltered_upload

Право unfiltered_upload позволяет пользователям (ролям) загружать любые файлы, без проверки их типа.

  • В обычном режиме: Редактор, Админ
  • В режиме мультисайт: Супер-админ

Однако это право по умолчанию заблокировано, т.е. указанные роли не пройдут проверку if( current_user_can('unfiltered_upload') ) , несмотря на наличие у них такого права.

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

image

Автор: Haboob Team

Если во время пентестов система или приложение позволяет загружать любые файлы, то задача, связанная с получением доступа к серверу и выполнением вредоносного кода, упрощается. С другой стороны, если есть ограничения и фильтр загружаемых файлов по расширению, то сначала нужно обойти эту проверку. В этой статье мы поговорим о том, как в веб-приложениях обрабатывают и проверяют файлы, загружаемые на сервер, а также методы обхода этих проверок.

Фильтрация на стороне клиента

В этом случае проверка происходит в браузере средствами JavaScript, VBScript или HTML5 перед отправкой файлов на сервер. Программисты используют этот метод для того, чтобы оптимизировать взаимодействие пользователя с приложением и быстро выдать ответ на уровне браузера.

Обход фильтрации на стороне клиента

1. <script type="text/javascript">

2. var _validFileExtensions = [".jpg", ".jpg", ".bmp", ".jpg", ".jpg"];

3. function Validate(oForm)

4. var arrInputs = oForm.getElementsByTagName("input");

5. for (var i = 0; i < arrInputs.length; i++)

6. var oInput = arrInputs[i];

7. if (oInput.type == "file")

8. var sFileName = oInput.value;

9. if (sFileName.length > 0)

10. var blnValid = false;

11. for (var j = 0; j < _validFileExtensions.length; j++)

12. var sCurExtension = _validFileExtensions[j];

13. if (sFileName.substr(sFileName.length - sCurExtension.length, sCurExtension.length).toLowerCase() == sCurExtension.toLowerCase())

14. blnValid = true;

21. return false;

Как показано выше, JavaScript обрабатывает запрос перед отсылкой на сервер. Внутри кода происходит проверка, принадлежит ли расширение файла графическому формату (jpg, jpeg, bmp, gif, png). Этот метод фильтрации можно обойти после изменения содержимого запроса и самого файла на вредоносный код с расширением, способствующим выполнению этого кода.


Рисунок 1: Результат проверки файла на предмет присутствия расширения из списка графических форматов

Как показано на рисунке, загрузчик файлов приостанавливает отправку запроса, если мы пытаемся загрузить php-файл напрямую.


Рисунок 2: Запрос, формируемый во время загрузки файла

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

Проверка на стороне сервера

Более тщательная проверка имени файла происходит во время загрузки на сервер. В этом случае анализ расширения может выполняться множеством способов, но основных два: проверка по черному и белому спискам.

В черном списке находятся расширения файлов, которые не принимаются к загрузке ни при каких обстоятельствах, например, php, aspx. В случае с белым списком ситуация полностью противоположная. В этом перечне находятся только те расширения файлов, которые разрешены для загрузки на сервер, например, jpg, jpeg, gif.

Обход проверки на стороне сервера

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

В случае с обходом черного списка можно попробовать загрузить файлы со следующими расширениями: pht, phpt, phtml, php3, php4, php5, php6.

Обход белого списка осуществляется при помощи некоторых трюков, как, например, добавление пустого байта в имя файла (shell.php%00.jpg) или использование двойного расширения (shell.jpg.php).

В некоторых случаях проверку можно обойти при помощи расширений с измененным регистром одного из символов: pHp, Php, phP.

1. if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"

2. && $imageFileType != "gif" )

3. echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";

В коде выше показан пример кода загрузчика файлов, принимающего лишь несколько расширений (jpg, jpeg, gif). Далее рассмотрим пример обхода различных типов проверок.

Пример обхода черного списка


Рисунок 3: Обход фильтра при помощи загрузки файла с непопулярным расширением

На рисунке выше показан обход проверки при помощи загрузки файла с расширением .php5, который принимается сервером Apache и далее запускается автоматически как обычный php-файл.

Пример обхода белого списка

Пример обхода белого списка


Рисунок 4: Обход фильтра при помощи загрузки файла с двойным расширением

На рисунке выше показано, как можно обойти белый список через загрузку php-файла с двойным расширением.

Проверка заголовка CONTENT-TYPE

Обход проверки Content-Type

Этот класс фильтров можно обойти посредством изменения в файле shell.php или shell.aspx содержимого параметра Content-Type на значение «image/png», «image/jpeg» или «image/gif».

3. $mimetype = mime_content_type($_FILES['file']['tmp_name']);

4. if(in_array($mimetype, array('image/jpeg', 'image/gif', 'image/png')))

5. move_uploaded_file($_FILES['file']['tmp_name'], '/uploads/' . $_FILES['file']['name']);

9. echo 'Upload a real image';

В коде выше мы видим, что проверяется MIME-тип, являющийся частью заголовка Content-Type, у файла, загружаемого на сервер. В данном случае загрузчик принимает только файлы со следующими типами: image/jpeg, image/gif и image/png. Мы можем легко обойти этот фильтр, изменив поле Content-Type во время загрузки исполняемого файла на тот MIME-тип, который принимается веб-сервером.


Рисунок 5: Пример измененного поля Content-Type при загрузке php-скритпа

Проверка заголовка CONTENT-LENGTH

В этом случае сервер проверяет размер содержимого заголовка Content-Length у загружаемого файла и не допускает загрузку файлов, у которых этот размер превышает определенное значение. Хотя этот метод не настолько популярен, но может использоваться в некоторых загрузчиках.

Обход проверки CONTENT-LENGTH

Этот фильтр обходится при помощи загрузки вредоносного кода очень небольшого размера в зависимости от того, какое максимальное значение используется при сравнении веб-сервером. Максимальное значение можно выяснить через загрузку нескольких файлов различного размера с целью выяснения, какие файлы будут приниматься, а какие нет.

1. if ($_FILES["fileToUpload"]["size"] > 30)

2. echo "Sorry, your file is too large.";

В коде выше загрузчик не принимает файлы более 30 байт. Как было сказано выше, этот фильтр можно обойти при помощи загрузки вредоносного кода очень маленького размера.

По умолчанию WordPress позволяет загружать лишь определенные типы файлов. В этой статье мы расскажем, как в этой CMS разрешить загружать файлы всех типов.

Почему в WordPress не разрешено загружать все типы файлов?

В WordPress установлены ограничения на расширения файлов, чтобы защитить сайт от потенциальных угроз безопасности или неправильного использования.

Sorry, this file type is not permitted for security reasons.

Почему в WordPress не разрешено загружать все типы файлов?

Вот список распространенных типов файлов, которые можно загружать на свой WordPress-сайт:

  • Изображения: .jpg, .jpg, .jpg, .jpg, ico.
  • Документы: .pdf, .doc, .ppt, .odt, .xls, .psd.
  • Аудио: .mp3, .m4a, .ogg, .wav
  • Видео: .mp4, .mov, .avi, .mpg, .ogv , .3gp, .3g2.

Для чего разрешать загрузку других форматов?

Поддержка сайтом дополнительных типов файлов может улучшить UX площадки и оптимизировать рабочие процессы.

Например, чтобы получать заказы от клиентов, нужно разрешить им загружать файлы в форматах .xlsx, .xml или .ods.

Как разрешить загрузку всех типов файлов на WordPress?

Шаг 1: Выберите плагин загрузки файлов для WordPress

Чтобы разрешить на WordPress-сайте загрузку файлов различных форматов, вам понадобится специальный плагин. Например, File Upload Types by WPForms .

Данный плагин поддерживает множество разнообразных форматов файлов. Он также позволяет добавлять пользовательские типы файлов.

Шаг 2: Установите плагин для загрузки файлов WordPress

Войдите в панель администрирования WordPress, а затем перейдите в раздел Плагины> Добавить новый . В поисковое поле введите File Upload Types by WPForms и нажмите кнопку « Установить» .

Шаг 2: Установите плагин для загрузки файлов WordPress

Шаг 3: Активируйте нужные типы файлов на сайте

Перейдите в настройки плагина и затем выберите File Upload Types . После этого плагин продемонстрирует список типов файлов с их описанием, MIME-типом и расширением. Активируйте формат файла, который вы хотите принимать на своем WordPress-сайте и нажмите кнопку Save .

Шаг 3: Активируйте нужные типы файлов на сайте

Шаг 4: Добавьте пользовательский тип файлов

Если нее можете найти в списке нужный тип файла, прокрутите страницу с настройками плагина вниз. Затем добавьте описание нужного формата файла, его MIME-тип, расширение и после этого нажмите на знак «Плюс» (+).

Советы по безопасности при разрешении загрузки файлов различных форматов

Когда вы разрешаете пользователям загружать файлы определенных типов, то подвергаете свой сайт множеству рисков. Вот несколько советов по безопасности:

Надеемся, что вам понравилась эта статья, рассказавшая о том, как разрешить загрузку всех типов файлов в WordPress.

Дайте знать, что вы думаете по этой теме материала в комментариях. За комментарии, лайки, подписки, дизлайки, отклики огромное вам спасибо!

Читайте также: