
Цель валидации: минимальный срез ядра WordPress, воспроизводящий цепочку REST-to-SQLi из wp2shell (CVE-2026-63030 + CVE-2026-60137)
Компактная реализация небольшой части REST API WordPress без внешних зависимостей — достаточно, чтобы обслуживать публичную коллекцию записей и выполнять несколько подзапросов за одно обращение. Удобен для обучения тому, как маршрутизация WordPress, WP_Query и $wpdb сочетаются, не подтягивая всё ядро.
| Метод | Маршрут | Назначение |
|---|---|---|
GET | /wp-json/wp/v2/posts | Список записей. Поддерживает author_exclude, per_page. |
POST | /wp-json/batch/v1 | Выполняет несколько подзапросов в одном запросе. |
Оба маршрута общедоступны (без аутентификации), что соответствует настройкам по умолчанию для основной коллекции записей.
index.php front controller / router
wp-includes/
functions.php absint / wp_parse_id_list / wp_parse_url
class-wpdb.php thin $wpdb (prepare / get_results)
class-wp-query.php post query builder
rest-api/
class-wp-rest-request.php
class-wp-rest-server.php routing + /batch/v1
endpoints/class-wp-rest-posts-controller.php /wp/v2/posts
php -S 127.0.0.1:8080
curl 'http://127.0.0.1:8080/wp-json/wp/v2/posts?author_exclude[]=3'
Требуется PHP ≥ 8.0. База данных MySQL необязательна — без неё $wpdb возвращает SQL, который он выполнил бы, чтобы вы могли видеть сгенерированные запросы.