APACHE
#apache#bitrix#security#upload#htaccess#php

Apache: запрет выполнения PHP в /upload (1С-Битрикс)

Отключение выполнения PHP в каталоге upload для сайтов на 1С-Битрикс: через .htaccess (Require all denied) или php_admin_flag engine off в конфиге виртуального хоста.

Как использовать

  1. Вариант 1: положите .htaccess в каталог /upload/ сайта; нужен AllowOverride All (или хотя бы FileInfo) для этой директории.
  2. Вариант 2: добавьте блок Directory в конфиг виртуального хоста и перезапустите Apache.
  3. Проверьте: запрос к /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 не выполняется:

  1. Проверка ответа сервера (ожидаем 403 или пустое тело без выполнения кода):
curl -I "https://ваш-сайт.ru/upload/test.php"

Ожидаемый результат: 403 Forbidden (при варианте с .htaccess) или 200 с пустым/не PHP-выводом (при php_admin_flag engine off — зависит от конфига). Главное — не должен выполняться код из test.php, если такой файл там есть.

  1. Диагностика, если 200 и выполняется PHP: проверьте, что в конфиге хоста для пути к upload нет переопределения (другой Directory с php_admin_flag engine on). Убедитесь, что .htaccess лежит именно в /upload/.htaccess и включён AllowOverride для этой директории.

  2. Поиск подозрительных .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.