Apache: запрет выполнения PHP в /upload (1С-Битрикс)
Отключение выполнения PHP в каталоге upload для сайтов на 1С-Битрикс: через .htaccess (Require all denied) или php_admin_flag engine off в конфиге виртуального хоста.
Как использовать
- Вариант 1: положите .htaccess в каталог /upload/ сайта; нужен AllowOverride All (или хотя бы FileInfo) для этой директории.
- Вариант 2: добавьте блок Directory в конфиг виртуального хоста и перезапустите Apache.
- Проверьте: запрос к /upload/любой_файл.php должен возвращать 403 или не выполнять скрипт.
В 1С-Битрикс каталог /upload используется для загружаемых пользователем файлов (картинки, документы) и по рекомендации Bitrix не должен выполнять PHP. На серверах под Apache запросы к *.php в этой папке по умолчанию могут уходить в PHP, и при загрузке вредоносного файла в /upload он способен выполниться. Симптом: после взлома или ошибочной загрузки скрипт в /upload/shell.php отдаёт код вместо 403. Решение — запретить выполнение PHP в /upload на уровне веб-сервера: через .htaccess в каталоге или через конфиг виртуального хоста. После применения запросы к любому .php в /upload будут возвращать 403 или не обрабатываться PHP.
Решение
Два рабочих варианта: локальный .htaccess в каталоге upload (если разрешён AllowOverride) или директива в конфигурации виртуального хоста Apache.
Вариант 1: .htaccess в каталоге upload
Файл размещается по пути: корень сайта/upload/.htaccess
# /upload/.htaccess — запрет выполнения всех .php в этой папке и подпапках
<FilesMatch "\.php$">
Require all denied
</FilesMatch>
Для работы .htaccess у директории должен быть разрешён AllowOverride (например, AllowOverride FileInfo или AllowOverride All) в конфиге хоста.
Вариант 2: конфигурация виртуального хоста
Подходит если вы управляете конфигом Apache напрямую (VPS, выделенный сервер).
<Directory /var/www/site/upload>
php_admin_flag engine off
</Directory>
Замените /var/www/site/upload на фактический путь к каталогу upload вашего сайта. После изменения перезапустите Apache (systemctl restart apache2 или service httpd restart).
- С способом 1 запрос к
/upload/file.phpобычно возвращает 403 Forbidden. - С способом 2 PHP не обрабатывает такие файлы (движок PHP в этой директории выключен).
- В
/uploadне должно быть рабочих PHP-скриптов; если есть кастомная логика — перенесите её в/localили другой каталог.
Проверка
Убедиться, что PHP в /upload не выполняется:
- Проверка ответа сервера (ожидаем 403 или пустое тело без выполнения кода):
curl -I "https://ваш-сайт.ru/upload/test.php"
Ожидаемый результат: 403 Forbidden (при варианте с .htaccess) или 200 с пустым/не PHP-выводом (при php_admin_flag engine off — зависит от конфига). Главное — не должен выполняться код из test.php, если такой файл там есть.
-
Диагностика, если 200 и выполняется PHP: проверьте, что в конфиге хоста для пути к
uploadнет переопределения (другойDirectoryсphp_admin_flag engine on). Убедитесь, что.htaccessлежит именно в/upload/.htaccessи включёнAllowOverrideдля этой директории. -
Поиск подозрительных .php в upload (после настройки полезно проверить наличие уже загруженных скриптов): см. Сканирование upload на вредоносный PHP.
Типичные ошибки
- .htaccess не срабатывает, запрос к /upload/file.php всё равно выполняется — для этой директории не разрешён AllowOverride. Проверьте конфиг виртуального хоста и задайте
AllowOverride FileInfoилиAllowOverride Allдля пути к корню сайта (или к upload). - После добавления Directory Apache не перезапускается или выдаёт ошибку — проверьте синтаксис:
apachectl configtestилиapache2ctl -t. Путь вDirectoryдолжен совпадать с реальным путём к каталогу на диске. - На shared-хостинге нет доступа к конфигу — используйте только вариант 1 (.htaccess в /upload). Если хостинг не позволяет AllowOverride для upload, обратитесь в поддержку.
Где применять
- Prod: любой хостинг с Apache и 1С-Битрикс (VPS, выделенный сервер, при наличии доступа — shared).
- BitrixVM / типовой стенд: обычно Apache или Nginx; при Nginx см. Запрет выполнения PHP в upload (Nginx).
Связанные сниппеты: Nginx: запрет выполнения PHP в /upload (1С-Битрикс), Сканирование upload на вредоносный PHP, Nginx и SSL Let’s Encrypt для BitrixVM.