wpcorp.ru wordpress WP Corp

WooCommerce: как запретить загрузку файлов определённых типов для цифровых товаров

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

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

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

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

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

add_action('admin_init', function() {
    $allowed = get_allowed_mime_types();
    error_log(print_r($allowed, true));
});

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

Пошаговое решение: запрет на загрузку определённых типов файлов

Для ограничения загрузок конкретных типов файлов цифровых товаров в WooCommerce добавьте следующий фильтр в functions.php вашей активной темы или создайте небольшой плагин:

add_filter('upload_mimes', function($mimes) {
    // Список запрещённых расширений
    $blocked = [
        'exe', 'bat', 'sh', 'js', 'scr', 'msi', 'cmd', 'com', 'pif', 'cpl', 'jar'
    ];

    foreach ($blocked as $ext) {
        if (isset($mimes[$ext])) {
            unset($mimes[$ext]);
        }
    }
    return $mimes;
});

Этот код удаляет из списка разрешённых MIME-типов опасные расширения, запрещая их загрузку через медиабиблиотеку и функционал WooCommerce.

Если хотите запретить не только загрузку, но и попытки загрузки через WooCommerce Checkout или My Account, дополнительно можно использовать хук woocommerce_process_product_file_upload для проверки расширения файла и выдачи ошибки.

add_filter('woocommerce_process_product_file_upload', function($file) {
    $blocked_extensions = ['exe', 'bat', 'sh', 'js'];
    $ext = pathinfo($file['name'], PATHINFO_EXTENSION);
    if (in_array(strtolower($ext), $blocked_extensions)) {
        throw new Exception('Загрузка файлов с расширением .' . $ext . ' запрещена.');
    }
    return $file;
});

Проверка результата: как убедиться, что запрет работает

  • Попробуйте загрузить файл с запрещённым расширением через медиабиблиотеку WordPress — загрузка должна быть отклонена с сообщением об ошибке.
  • Если у вас есть цифровые товары с функционалом загрузки в WooCommerce, попробуйте загрузить запрещённые файлы при создании или редактировании товара — должен появиться предупреждающий текст.
  • Проверьте, что разрешённые форматы загружаются без проблем.

Частые ошибки и их исправление

  • Ошибка: Загрузка запрещённых файлов все ещё происходит.
    Причина: Другие плагины или темы перезаписывают фильтр upload_mimes после вашего кода.
    Решение: Установите приоритет фильтра ниже (например, 20) и убедитесь, что код выполняется после всех плагинов:
    add_filter('upload_mimes', 'your_function', 20);
  • Ошибка: Файлы с разрешёнными расширениями не загружаются.
    Причина: Некорректное удаление MIME-типов или конфликт с другими фильтрами.
    Решение: Проверьте список удаляемых расширений и используйте функцию print_r для дебага текущего массива MIME-типов.
  • Ошибка: Ошибка «Загрузка файла запрещена» появляется даже при разрешённых форматах.
    Причина: Возможно, работает дополнительная проверка на стороне сервера или плагина безопасности.
    Решение: Проверьте логи сервера и настройки защитных плагинов (например, Clearfy Pro от WPShop может влиять на загрузки).

Практические советы по безопасности и производительности при работе с загрузками в WooCommerce

  • Устанавливайте максимально жесткие ограничения на типы и размеры загружаемых файлов, особенно для цифровых товаров.
  • Используйте проверку на стороне сервера, а не только на клиенте или в PHP, чтобы исключить обход ограничений.
  • Регулярно обновляйте WordPress, WooCommerce и плагины безопасности для устранения уязвимостей.
  • Рассмотрите использование плагинов, например, Clearfy Pro (https://wpshop.ru/plugins/clearfy?source=wpcorp.ru&medium=article&campaign=woocommerce-zapret-zagruzki-opredelennyh-tipov-fajlov), для управления разрешениями и дополнительной защиты загрузок.
  • Минимизируйте нагрузку на сервер, не позволяя загружать слишком большие файлы и очищая временные файлы после обработки загрузок.

Сравнение способов ограничения загрузок в WooCommerce

МетодПреимуществаНедостатки
Фильтр upload_mimesПростой, работает на уровне WordPress, блокирует загрузку в медиабиблиотеку и WooCommerceМожет быть переопределён плагинами, не проверяет загрузки вне WordPress
Фильтр woocommerce_process_product_file_uploadСпецифичен для WooCommerce, позволяет выдавать ошибки на этапе загрузки товараНе блокирует загрузку через медиабиблиотеку напрямую
Плагины безопасности (например, Clearfy Pro)Расширенные настройки, интеграция с безопасностью сайтаПлатные решения, возможен конфликт с другими плагинами
×
WordPress
дай сайту суперсилу!

Скидки на топовые темы и плагины

Активировать суперсилу ⋙