Загрузка данных


# Анализ WordPress-сайта amadeusconcerts

> Дата: 2026-06-11

---

## КРИТИЧЕСКИЕ ПРОБЛЕМЫ

### 1. Backdoor / скрытый канал связи с внешним сервером

**Файл:** `wp-content/themes/amadeus/inc/post-extended.php`

Содержит механизм связи с внешним Cloudflare Workers (`post-extended.proyabloko.workers.dev`):

- URL зашифрован в base64 и раскодируется в рантайме
- Генерирует уникальный `_wp_site_token` для каждого сайта
- Периодически отправляет POST-запросы на внешний сервер с токеном и доменом
- Добавляет скрытый виджет в админ-панель "⚙️ Site Status" для ввода токена
- Результат проверки кэшируется в транзиентах (12 часов)

**Риски:** потенциальный backdoor для удаленного доступа, эксфильтрация данных, скрытый рекламный инжектор. Файл необходимо срочно удалить и проверить сайт на наличие изменений.

---

### 2. Пиратская (nulled) версия ACF PRO

**Плагин:** `wp-content/plugins/advanced-custom-fields-pro-master/`

- Используется взломанная версия ACF PRO (6.2.7)
- В `acf.php` перехватывается `pre_http_request` — все запросы к серверам ACF подменяются на фальшивый положительный ответ
- Фальшивый лицензионный ключ: `E7B0U5F7CC8189E6ACL19DD6F6E1B662`
- Возвращает `"lifetime" => true` и `"status" => "active"` без реальной проверки

**Риски:** нет легитимных обновлений безопасности, возможны скрытые бэкдоры в пиратской сборке, нарушение лицензии.

---

### 3. Отсутствие nonce-проверок в AJAX-обработчиках

Большинство AJAX-обработчиков не имеют `check_ajax_referer()`:

| Обработчик | Файл |
|---|---|
| `theme_load_more_events_handler()` | `functions.php` |
| `live_search_handler()` | `inc/live_search.php` |
| `handle_filter_events()` | `inc/ajax-filters.php` |
| `set_current_city()` | `functions.php` |
| `ajax_filter_events()` | `inc/core.php` |
| `amadeus_load_more_selection_items()` | `functions.php` |

**Риски:** уязвимость к CSRF-атакам, возможность несанкционированного вызова AJAX-действий.

---

## ПРОБЛЕМЫ БЕЗОПАСНОСТИ

### 4. Пароль базы данных в открытом виде

**Файл:** `wp-config.php`, строка 29

```php
define( 'DB_PASSWORD', 'Q7QUFZJwSCFBKEA!' );
```

Пароль хранится в plain text. При компрометации файловой системы база данных полностью доступна злоумышленнику.

---

### 5. Секретные ключи аутентификации не сгенерированы

**Файл:** `wp-config.php`, строки 51–58

Все ключи и соли имеют значения `'put your unique phrase here'` (дефолтные). Это делает куки, пароли и nonce-токены предсказуемыми. Необходимо сгенерировать новые через https://api.wordpress.org/secret-key/1.1/salt/

---

### 6. API-ключ Яндекс.Карт — заглушка

**Файл:** `functions.php`, строка 66

```php
'https://api-maps.yandex.ru/2.1/?apikey=YOUR_YAMAPS_API_KEY&lang=ru_RU'
```

API-ключ не установлен — карты на сайте не работают.

---

## ПРОБЛЕМЫ ПРОИЗВОДИТЕЛЬНОСТИ

### 7. Множество отдельных HTTP-запросов

- **15 CSS-файлов** подключаются отдельно (7 базовых + 7 условных + 1 админский)
- **14 JS-файлов** подключаются отдельно
- **5 внешних CDN-библиотек:** Swiper 11, Fancybox 5, Litepicker, Google Fonts (Inter), Яндекс.Карты
- **Нет конкатенации** — каждый файл загружается отдельным HTTP-запросом
- **Нет минификации** — все файлы в исходном виде

---

### 8. `posts_per_page => -1` без пагинации

**Файл:** `inc/ajax-filters.php`, строка 32

Запрос всех событий без лимита перед фильтрацией в PHP. При 1000+ событий приведет к исчерпанию памяти.

---

### 9. Отсутствие оптимизации запросов

- У большинства `WP_Query` нет `no_found_rows => true`
- Прямые SQL-запросы не кэшируются объектным кэшем
- В `functions.php` — `get_posts` с `posts_per_page => -1` для массового обновления

---

### 10. Дублирование подключения CSS

**Файл:** `functions.php`

`category.css` подключается дважды: на строке 41 (внутри `is_category()`) и на строке 79 (внутри `is_category() || is_tax('event_tag')`).

---

## ПРОБЛЕМЫ КАЧЕСТВА КОДА

### 11. Нарушение иерархии шаблонов WordPress

Отсутствуют стандартные файлы шаблонов:
- `single.php`
- `archive.php`
- `page.php`
- `404.php`
- https://amadeusconcerts.ru/event-category/genre/123123

Весь роутинг через `index.php`, который вручную определяет тип страницы и подключает шаблонные части. Это снижает совместимость с плагинами и предсказуемость.


---

### 12. Сессии без инициализации

**Файл:** `functions.php` (множественные места)

Используется `$_SESSION['selected_city']`, но `session_start()` нигде не вызывается. Работает только если другой плагин случайно запускает сессии.

---

### 13. Опечатка в имени файла

`scipts.js` вместо `scripts.js` в `assets/js/`.

---

### 14. Жестко закодированные данные

- Номер телефона `+7 (981) 696-97-83`:
  - `template-parts/single-event.php` строка 385
  - `template-parts/event-footer_faq.php` строка 11

---

### 15. Inline CSS/JS в шаблонах

Множество инлайн-скриптов и стилей в PHP-шаблонах:
- JSON-данные в `<script>` тегах
- Swiper-инициализация в `single-event_video.php`
- Фоновые изображения через `style` атрибут
- Это усложняет поддержку и кэширование

---

### 16. Нелицензионное/неактивированное ПО

- `wp-all-import-pro` — без активной лицензии (не получает обновления)
- `wpai-woocommerce-add-on` — устаревшая версия (последний тест с WooCommerce 6.1, актуальный — 9.x)
- `wp-all-import` (free, v4.0.1) — установлен вместе с Pro-версией, создает конфликты

---

## ДОПОЛНИТЕЛЬНЫЕ ЗАМЕЧАНИЯ

### Архитектура темы

- **Движок:** кастомная тема "Amadeus" v2.0.1
- **CSS-фреймворк:** отсутствует — всё на кастомном CSS (reset.css + base.css + styles.css)
- **Page builder:** отсутствует — используется ACF + классический редактор
- **Кастомные типы записей:** `event` (Мероприятия), `faq` (FAQ)
- **Кастомные таксономии:** `event_category`, `event_tag` (venue), `faq_category`

### Git-репозиторий

В теме присутствует `.git` с историей разработки.

---

## ВЕРДИКТ

**С точки зрения продакшн-разработки сайт выполнен средне.**

**Плюсы:**
- Кастомная тема с продуманной структурой событий
- Использование ACF для гибкого управления контентом
- Функциональность: живой поиск, фильтрация, карты, расписание
- Свои шаблоны для разных типов страниц

**Минусы:**
- Критические дыры в безопасности (backdoor, nulled-плагин, дефолтные ключи)
- Отсутствие nonce-проверок в AJAX
- Нарушение стандартов WordPress (иерархия шаблонов, отсутствие 404)
- Проблемы с производительностью (много запросов, нет минификации)
- Пиратское ПО (ACF PRO) — уголовно и технически рискованно
- Небрежности (опечатки, дубликаты, хардкод)

### Топ-3 что срочно фиксить:

1. **Удалить `inc/post-extended.php`** — backdoor-коммуникация с внешним сервером
2. **Сгенерировать и установить секретные ключи** в `wp-config.php`
3. **Заменить nulled ACF PRO на лицензионный** — пиратский плагин = угроза безопасности