LabAndor Описать задачу

Данные и парсинг

  • Парсинг сайтов

Импорт и интеграции

Боты и автоматизация

  • Telegram-боты

Сайты и инфраструктура

  • VPS и серверы
  • Парсинг сайтов
  • Telegram-боты
  • VPS и серверы

Кейс · Автосалон, каталог машин из фида поставщика

Медиатека на 427 тысяч лишних файлов — и найденный по ходу взлом

  • 427 412Файлов-дублей удалено
  • ~30 ГБОсвобождено на хостинге
  • 0Дублей после исправления
  • 26Файлов закладки удалено
  • 7 159PHP-файлов проверено

Задача

У автосалона переполнялся хостинг. Каталог машин наполняется автоматически из фида поставщика, и при каждом обновлении фотографии скачивались заново — копиями с суффиксами -2, -3, -4. Клиент постоянный, это его третий заказ. Просил он две вещи: сделать, «чтобы чистилось само», и не трогать файлы, которые администратор заливает вручную. По сути задача была другой — найти, почему копии вообще появляются.

Что сделали

Сначала определили, что удалять нельзя. Сняли HTML всех опубликованных карточек и собрали эталон из фотографий, которые реально показываются на сайте: 1 831 адрес, 8 803 файла со всеми размерами. Ручные загрузки администратора, 995 файлов, отсекли по имени — у фото из фида это 32-символьный хеш, у ручных человеческое. Удаление запустили, только когда списки «сохранить» и «удалить» не пересеклись ни одним файлом.

Удалили 427 412 файлов двумя проходами и освободили около 30 ГБ. Удалённые адреса отдают 404, живые фотографии, логотип и PDF-ценники открываются. Проверку вели небольшими выборками с паузами, чтобы не нагружать хостинг, пока работает импорт фида.

Причина нашлась там, где её обычно не ищут. Фото машин попадают в ACF-галерею, а у поля галереи своя настройка поиска фото в медиатеке, и общая настройка импорта на неё не распространяется. Настроили сверку с медиатекой прямо в поле галереи, включили защиту от дублей вложений и загрузку только новых картинок. Теперь импорт узнаёт фото, которое уже есть на сайте, и не качает его повторно.

Результат подтвердили замером: посчитали файлы в папке месяца, прогнали полный импорт фида и посчитали снова. Было 8 446, стало 9 111. Прирост в 665 файлов — это 133 новые фотографии по пять размеров, все с чистыми именами и без копий. До исправления такой же прогон добавлял около 8 000 файлов. Автоочистка по расписанию не понадобилась: новых копий нет, чистить нечего.

Взлом, найденный по ходу

Среди фотографий попались программные файлы. В медиатеке их быть не должно. Разбор показал закладку для удалённого управления: 26 файлов в пяти папках и два вредоносных плагина — в одном файловый менеджер без пароля, открытый любому, кто знает адрес, в другом рассыльщик спама с домена клиента. Ещё нашлись пятеро чужих администраторов. Часть файлов маскировалась под родные файлы системы, у части были подделаны даты, а один прятал остальные из панели администратора.

Обычная чистка здесь не помогла бы. Тело закладки, 131 128 байт, лежало в базе данных под видом служебной записи, и раз в час удалённые файлы возвращались — сканер отчитался бы «чисто», а через час всё было бы на месте. Поэтому вырезали всю цепочку: файлы, вставку в файл настроек, запись в базе, задание планировщика и чужие доступы. Администраторов удалили с подтверждения владельца сайта.

После чистки в папке загрузок запретили запуск программ, сменили пароль администратора и ключи сессий. Все 7 159 PHP-файлов сайта проверили по дате изменения и содержимому: остатков нет.

Результат

Хостинг разгружен, рост остановлен на причине: новые машины из фида приходят без копий. Сайт вычищен от закладки. Вся работа уложилась в один вечер — заявляли «часа 4, может больше». Каждая цифра в кейсе — прямой замер на сайте.

Технологии

WordPressWP All Import ProACFPHPMySQLrclone и FTPApache .htaccessWP REST API

Связанные услуги

Похожая задача?

Опишите, что нужно — проверим и вернёмся с предварительной оценкой. После согласования ТЗ отправим персональную ссылку на оплату.

Опишите задачу

Уточним детали и вернёмся с предварительной оценкой в выбранный канал. Финальные цену и срок подтверждает специалист.

Куда прислать ответ *