Как запретить обработку разных типов файлов в WordPress

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

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

Разрешение загрузки всех типов файлов без ограничений может привести к серьёзным рискам безопасности. Например, злоумышленник может загрузить PHP-скрипт, переименованный в .jpg, и выполнить его, если сервер настроен неправильно. Также нежелательные форматы могут занимать много места или быть несовместимы с вашим сайтом.

Кроме безопасности, ограничения помогают поддерживать порядок в медиабиблиотеке и упрощают администрирование. Особенно это актуально для сайтов с большим количеством пользователей или магазинов на WordPress.

Как WordPress обрабатывает загрузку файлов: MIME-типы и расширения

При загрузке файлов WordPress проверяет MIME-тип и расширение файла. Эта проверка происходит в функции wp_check_filetype_and_ext(). Встроенный список разрешённых типов файлов можно найти и изменить с помощью фильтра upload_mimes.

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

Фильтр upload_mimes для ограничения типов файлов

Самый простой способ запретить загрузку определённых типов файлов — модифицировать список разрешённых MIME-типов с помощью фильтра upload_mimes. Ниже пример, который запрещает загрузку файлов с расширением .exe и .bat:

add_filter('upload_mimes', 'wp_course_restrict_upload_mimes', 10, 1);
function wp_course_restrict_upload_mimes($mimes) {
    unset($mimes['exe']);
    unset($mimes['bat']);
    return $mimes;
}

Этот код нужно добавить в файл functions.php вашей темы или в кастомный плагин. После этого попытка загрузить .exe или .bat файл приведёт к ошибке.

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

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

Пример кода, запрещающего загрузку файлов .svg и .js с объяснением:

add_filter('wp_handle_upload_prefilter', 'wp_course_reject_specific_file_types');
function wp_course_reject_specific_file_types($file) {
    $forbidden_extensions = array('svg', 'js');
    $file_ext = pathinfo($file['name'], PATHINFO_EXTENSION);
    if (in_array(strtolower($file_ext), $forbidden_extensions)) {
        $file['error'] = 'Загрузка файлов с расширением .' . $file_ext . ' запрещена по соображениям безопасности.';
    }
    return $file;
}

Этот подход позволяет гибко управлять запрещёнными типами и давать понятные пользователям сообщения об ошибках.

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

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

  • WP Upload Restriction — простой плагин для ограничения типов файлов, поддерживает белый и чёрный списки.
  • Prevent Upload of Specific File Types — позволяет запретить загрузку по расширениям и MIME-типам.

Для установки плагина перейдите в админку WordPress, раздел «Плагины» → «Добавить новый», найдите нужный плагин и установите. После активации настройте ограничения в его параметрах.

Дополнительные меры безопасности при работе с файлами

Ограничение типов файлов — это только часть комплексной безопасности. Рекомендуется также:

  • Отключить выполнение PHP в папках с загруженными файлами через .htaccess.
  • Использовать плагины безопасности, например, Clearfy Pro, которые помогают автоматически заблокировать опасные типы.
  • Регулярно проверять медиабиблиотеку на подозрительные файлы.

Пример .htaccess для запрета выполнения PHP в uploads

# Запретить выполнение PHP в папке uploads
<FilesMatch "\.php$">
    Order deny,allow
    Deny from all
</FilesMatch>

Этот файл нужно разместить в директории wp-content/uploads или в её подпапках.

Как дополнительно фильтровать типы файлов при загрузке через REST API

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

Пример фильтра, который запрещает загрузку .exe через REST API:

add_filter('rest_pre_insert_attachment', 'wp_course_rest_restrict_file_types', 10, 2);
function wp_course_rest_restrict_file_types($attachment, $request) {
    $file = isset($_FILES['file']) ? $_FILES['file'] : null;
    if ($file) {
        $ext = pathinfo($file['name'], PATHINFO_EXTENSION);
        $forbidden = array('exe', 'bat');
        if (in_array(strtolower($ext), $forbidden)) {
            return new WP_Error('rest_upload_forbidden', 'Загрузка данного типа файлов запрещена.', array('status' => 403));
        }
    }
    return $attachment;
}

Выводы и рекомендации

Ограничение типов загружаемых файлов — важный шаг для повышения безопасности и поддержания порядка на сайте. Используйте фильтр upload_mimes для базового ограничения, добавляйте проверку через wp_handle_upload_prefilter для пользовательских сообщений об ошибках и не забывайте про серверные меры защиты, такие как запрет выполнения PHP в папках с медиа.

Если вы хотите автоматизировать часть этих процессов и получить дополнительные инструменты безопасности, обратите внимание на плагин Clearfy Pro. Он позволяет гибко управлять безопасностью сайта и ограничениями загрузок без написания кода.

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
WooCommerce: как избежать конфликтов при изменении товара в корзине
01.05.2026
Как создать автоматические подписки на новые статьи WordPress с помощью кода и плагинов
26.01.2026
WooCommerce: как автоматически удалять товар из корзины при обновлении количества
11.05.2026
WooCommerce: как реализовать отложенную загрузку товаров по атрибутам
04.05.2026
Как создать своё меню в WordPress с помощью кода: подробное руководство с примерами
05.01.2026
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее