Опасные .htaccess: что прячут вредоносные файлы и как их вычистить
После взлома CMS или плагина злоумышленник почти всегда кладёт вредоносный .htaccess — он выполняется на каждый запрос в каталоге и дочерних папках, поэтому один файл может перенаправлять всех посетителей на спам, делать ваши картинки PHP-шеллами или блокировать вам вход в собственную админку. Ниже — что конкретно прячут, где искать и как чистить.
Почему .htaccess под ударом
Файл .htaccess привлекателен для злоумышленников по трём причинам:
- Выполняется на каждый запрос в каталоге и во всех дочерних папках. Один файл в корне сайта охватывает весь трафик.
- Читается без перезапуска Apache — правки вступают в силу немедленно, незаметно для владельца.
- Часто игнорируется при беглой проверке — владелец смотрит PHP-файлы и базу данных, но не думает заглянуть в
.htaccessкаждого подкаталога.
Типичная схема: взлом через уязвимый плагин или CMS, загрузка PHP-шелла, а затем — размещение вредоносного .htaccess в нескольких каталогах (корень, /uploads/, /cache/, /wp-content/).
Скрытые редиректы посетителей
Самый распространённый приём — перенаправление трафика на спам или малварь. Редирект обычно настраивается «избирательно», чтобы владелец ничего не заметил:
- Только с поисковиков (клоакинг):
RewriteCond %{HTTP_REFERER} google|yandex— пользователи, пришедшие по ссылке из поиска, уходят на спам, а владелец, открывающий сайт напрямую, видит норму. - Только мобильных:
RewriteCond %{HTTP_USER_AGENT} (android|iphone|ipad|mobile)— мобильные посетители уходят на спам, десктопные — нет. - Только для Googlebot: другой контент поисковику и людям — прямое нарушение правил, называется клоакинг.
Типичный вредоносный фрагмент:
RewriteEngine On RewriteCond %{HTTP_REFERER} (google|yandex|bing|mail\.ru) [NC] RewriteRule .* http://evil-spam-site.example/go [R,L]
Признаки: пользователи жалуются на «перенаправление на непонятный сайт»; в Яндекс.Вебмастере или Google Search Console появились предупреждения о вредоносном контенте; трафик упал, а отказы выросли. Редирект «через раз» (только с поиска) — почти всегда признак клоакинга в .htaccess.
Исполнение картинок как PHP
Второй по популярности трюк — заставить Apache выполнять произвольные файлы как PHP. Это позволяет злоумышленнику загрузить shell.jpg (картинку с PHP-кодом внутри) и запустить его как скрипт.
Используемые директивы:
AddType application/x-httpd-php .jpg .jpeg .png .txt— все файлы с такими расширениями Apache начинает передавать PHP-интерпретатору.AddHandler application/x-httpd-php .jpg— аналогичный эффект через другой механизм.php_value auto_prepend_file /var/www/uploads/shell.txt— PHP автоматически подгружает указанный файл перед каждым PHP-скриптом в каталоге. Залитый бэкдор выполняется при любом обращении к сайту.
AddType application/x-httpd-php .jpg .jpeg .png .gif .txt php_value auto_prepend_file /var/www/html/uploads/image001.jpg
Такой .htaccess в папке /uploads/ означает, что любой загруженный файл с PHP-кодом внутри будет выполнен как скрипт. Эту угрозу закрывает правильно настроенный .htaccess в папке загрузок (см. раздел «Защититься»).
Манипуляции с доступом
Иногда цель вредоносного .htaccess — не перенаправить трафик, а закрыть вам доступ к собственному сайту или к нужным инструментам:
- Блокировка входа в админку:
Require all deniedв/wp-admin/или папке CMS-администратора — вы не можете войти и почистить заражение. - Кастомная страница ошибки с редиректом:
ErrorDocument 404 //evil.com/spam-page— 404-ошибки уводят посетителей на сторонний сайт. - Включение листинга:
Options +Indexes— злоумышленник открывает себе просмотр файлов каталога. - Избирательный доступ:
Order allow,deny+Allow from 198.51.100.7— доступ к закрытым файлам только с IP злоумышленника.
SEO-спам через rewrite
Для дорвеев и продвижения спам-сайтов злоумышленники настраивают генерацию «виртуальных» страниц с ключевыми словами:
RewriteEngine On RewriteRule ^(viagra|casino|poker|loans|pills)(.*)$ /doorway.php?kw=$1$2 [L]
Поисковик индексирует ваши страницы с тематикой «казино» и «лекарства», которые на самом деле генерируются скриптом злоумышленника. Трафик по спам-запросам растёт, позиции по вашим запросам падают, а в Google Search Console появляются тысячи «новых» URL.
Где и как искать вредоносный .htaccess
Где смотреть: корень сайта — обязательно; все подкаталоги, особенно uploads/, cache/, tmp/, wp-content/, images/. Злоумышленник кладёт файл туда, где у него есть права на запись — чаще всего это именно каталоги загрузок.
Признаки подозрительного .htaccess:
- Дата модификации файла не совпадает с датой установки/обновления CMS.
- Содержит
RewriteRule .* http(редирект на внешний URL без очевидной причины). - Содержит
base64— часто используется для обфускации вредоносного кода. - Содержит
AddTypeилиAddHandlerс PHP-обработчиком для нетипичных расширений. - Содержит
auto_prepend_fileилиauto_append_file. - Содержит
php_valueс путём к файлу вне стандартных директорий. - Содержит незнакомые IP-адреса в
Allow from.
Быстрая проверка через SSH — найти все .htaccess на сайте и просмотреть подозрительные строки:
# найти все .htaccess find /var/www/site -name ".htaccess" -type f # найти подозрительные строки grep -rn "auto_prepend_file\|AddType.*php\|base64\|RewriteRule .* http" /var/www/site --include=".htaccess"
Сравните каждый найденный файл с эталонным .htaccess вашей CMS из официальной документации. Любое отличие — повод разобраться.
Также используйте инструменты сайта: вставьте содержимое подозрительного файла в объяснялку .htaccess — она разберёт каждую строку; прогоните через аудит безопасности — он ищет опасные конструкции.
Что делать: вычистить и восстановить
- Сделайте бэкап вредоносного файла перед удалением — он может понадобиться для расследования (как улика) или анализа.
- Замените на эталонный .htaccess вашей CMS из официального источника. Не редактируйте вредоносный файл — замените целиком.
- Проверьте ВСЕ .htaccess на сайте — злоумышленник обычно кладёт файлы в нескольких местах.
- Ищите шеллы и бэкдоры — вредоносный
.htaccessэто симптом, а не причина. Найдите и удалите загруженныеshell.php,image001.jpgс PHP-кодом и другие вредоносные файлы. - Смените все пароли: FTP/SFTP, панель хостинга, базу данных, учётные записи CMS (особенно администратора).
- Обновите CMS и все плагины — закройте уязвимость, через которую произошёл взлом.
- Проверьте cron-задачи (
crontab -l),wp_options(для WordPress: поляsiteurl,home,active_plugins), базу данных на предмет вставленного вредоносного кода. - Запросите снятие пометки «опасный сайт» в Google Search Console и Яндекс.Вебмастере после чистки.
Как защититься на будущее
Защита .htaccess от вредоносных модификаций строится на нескольких уровнях:
- Закройте сами .ht-файлы:
<Files ~ "^\.ht"> Require all denied </Files>
- Запретите PHP в папке загрузок (кладёте в
uploads/.htaccess):
<FilesMatch "\.ph(p[0-9]?|tml|ar|tt)$"> Require all denied </FilesMatch>
- Права 644 на .htaccess (владелец — пользователь Apache или ваш FTP-пользователь, не www-data): файл не должен быть перезаписываем PHP-процессом.
- Мониторинг изменений файла: некоторые хостинги и плагины безопасности (Wordfence, Sucuri) умеют оповещать об изменении
.htaccess. - AllowOverride None на папку загрузок в конфиге сервера (хостинг настраивает это за вас — уточните у поддержки): тогда вредоносный
.htaccessв/uploads/просто игнорируется Apache.
Подробнее о защите сайта через .htaccess — центр безопасности.
Ссылки
- Центр безопасности .htaccess — защита от ботов, доступ по IP, заголовки безопасности.
- Аудит безопасности .htaccess — автоматический поиск опасных конфигураций.
- Объяснить .htaccess построчно — разобрать подозрительный файл.
- Линтер .htaccess — проверить синтаксис и опасные директивы.
- Почему .htaccess не работает — 500, 403, бесконечный редирект.
- Отладка .htaccess — error_log, tracing, бинарный поиск.