Диагностика проблемы: почему видео скачиваются неавторизованными пользователями
При продаже видеофайлов через WooCommerce часто возникает задача ограничить доступ к скачиванию только для авторизованных пользователей, чтобы защитить контент от нелегального распространения. Несмотря на стандартные настройки WooCommerce для цифровых товаров, пользователи могут получить прямую ссылку на файл и скачать его без входа в систему.
Основная причина — неправильная настройка доступа к файлам и отсутствие контроля ссылок на загрузку.
Пошаговое решение
1. Настройка продукта WooCommerce как «Виртуальный» и «Загружаемый»
В админке WooCommerce при создании товара убедитесь, что вы отметили галочки Виртуальный и Загружаемый. Это позволит WooCommerce автоматически управлять доступом к скачиванию.
2. Хранение видеофайлов вне публичной директории
Для максимальной безопасности загружайте видеофайлы в директорию, недоступную напрямую по URL, например, wp-content/uploads/protected-videos, и укажите этот путь в настройках товара. WooCommerce будет выдавать файлы через обработчик PHP, проверяя права доступа.
3. Проверка настроек «Доступ к загрузке»
В WooCommerce перейдите в WooCommerce → Настройки → Продукты → Загрузки. Убедитесь, что выбрано:
- Метод загрузки: «Прямой доступ к файлу» запрещён, лучше выбрать «Прокси загрузка» (X-Accel-Redirect / X-Sendfile) или «Force Downloads».
- Доступ к загрузке: «Только для авторизованных пользователей, которые приобрели продукт».
4. Принудительная авторизация перед загрузкой (проверка через фильтр)
Добавьте следующий код в файл functions.php вашей темы или в плагин-сниппет, чтобы дополнительно блокировать загрузку при отсутствии авторизации:
add_filter('woocommerce_file_download_permissions_check', 'restrict_video_download_to_logged_in', 10, 3);
function restrict_video_download_to_logged_in($has_permission, $download, $product) {
if (!is_user_logged_in()) {
return false;
}
return $has_permission;
}
Проверка результата после внедрения
- Выйдите из аккаунта на сайте и попробуйте загрузить видео с прямой ссылки — доступ должен быть запрещён.
- Авторизуйтесь под пользователем, который покупал видео, и проверьте, что загрузка работает.
- Если используется кэширование, очистите кэш сайта и браузера.
Частые ошибки и как их исправить
- Проблема: Файлы доступны по прямой URL без авторизации.
Причина: Видео лежат в публичной папке без защиты.
Решение: Переместите видео в защищённую директорию и настройте WooCommerce для выдачи файлов через прокси. - Проблема: Настройки WooCommerce по умолчанию не работают.
Причина: Используется «Прямой доступ» в настройках загрузок.
Решение: Переключите на «Force Downloads» или «X-Sendfile». - Проблема: Пользователи получают ссылки на загрузку в письмах, которые могут передавать другим.
Причина: Ссылки на загрузку не имеют ограничения по времени.
Решение: Используйте плагины или кастомный код для генерации временных ссылок.
Практические советы по безопасности и производительности
- Используйте метод
X-SendfileилиX-Accel-Redirectдля отдачи файлов через сервер, чтобы снизить нагрузку на PHP и защитить файлы. - Ограничьте число загрузок и срок доступа к файлам в настройках товара.
- Регулярно обновляйте WooCommerce и используемые плагины, чтобы избежать уязвимостей.
- Для больших видео используйте CDN, настроенный на защиту приватных файлов.
Сравнение вариантов ограничения скачивания видео
| Метод | Описание | Плюсы | Минусы |
|---|---|---|---|
| Прямой доступ к файлам | Видео лежит в публичной папке, ссылки открыты | Простота настройки | Нет защиты, доступ для всех |
| Force Downloads | WooCommerce отдаёт файлы через PHP с проверкой прав | Защита доступа, контроль загрузок | Нагрузка на сервер при больших файлах |
| X-Sendfile / X-Accel-Redirect | Отдача файлов через веб-сервер с проверкой WooCommerce | Высокая производительность, безопасность | Требует поддержки на сервере и правильной настройки |