ИИ-инструменты и скрипты
Проверка безопасности плагинов WordPress
Проверяйте плагины и темы WordPress перед релизом: запросы $wpdb, собранные из $_GET, обработчики AJAX и admin-post без nonce и проверки прав, открытые REST-маршруты, неэкранированный вывод, unserialize данных запроса и проблемы в readme.txt.
Что вы получите: 1 файл · 62.78 KB · ZIP
Варианты покупкиОписание товара
Один обработчик wp_ajax_, сохраняющий настройки без check_ajax_referer(), позволяет другому сайту заставить вошедшего администратора изменить их, а если нет current_user_can(), вызвать его может любой подписчик. register_rest_route() с DELETE и без permission_callback открыт всему интернету, а "WHERE id = " . $_GET['id'] в запросе $wpdb остаётся SQL-инъекцией даже после sanitize_text_field(). Именно эти ошибки стоят за большинством уведомлений об уязвимостях плагинов. Этот навык находит их и другие ошибки плагинов WordPress, перечисленные ниже, до релиза или отправки на WordPress.org и подсказывает, как исправить каждую из них.
Ваш агент запускает сканер для папки плагина или темы: всех файлов .php и файла readme.txt плагина. Он отслеживает данные запроса ($_GET, $_POST, $_REQUEST, $_COOKIE, $_FILES, заголовки запроса, filter_input(), параметры REST-запроса) через присваивания, циклы foreach, тернарные операторы, wp_unslash() и сборку строк внутри каждой функции и знает, какие функции WordPress очищают (sanitize_text_field, absint, sanitize_key), экранируют (esc_html, esc_attr, esc_url, wp_kses_post) или подготавливают (плейсхолдеры $wpdb->prepare) значение. Он сопоставляет хуки add_action(), страницы админки и REST-маршруты с их обработчиками по имени во всех файлах, включая загрузчик хуков из шаблона плагина и вспомогательные функции проверки nonce или прав, которые вызывает обработчик. Примеры из руководства по плагинам (AJAX с check_ajax_referer, страница настроек, конечные точки REST с __return_true на GET-маршрутах, REST-контроллер) не получают BLOCK. Он никогда не запускает PHP или WordPress. Результат: BLOCK, REVIEW или NOT FLAGGED с указанием файла, строки, причины и более безопасного подхода. Секреты в показываемых строках никогда не выводятся.
Что проверяется
BLOCK (исправить до выпуска)
- W01: запросы $wpdb (query, get_results, get_row, get_var, get_col или строка запроса, переданная в prepare), собранные из данных запроса, которые не были приведены к числу или переданы как плейсхолдер
- W02: REST-маршруты с методами POST, PUT, PATCH или DELETE без permission_callback (если callback сам проверяет current_user_can(), это W12)
- W03: обработчики wp_ajax_, admin_post_, страниц админки и admin_init, которые изменяют данные по запросу без проверки nonce, включая игнорируемые результаты wp_verify_nonce() и проверки, срабатывающие только при наличии поля nonce (обработчики, также зарегистрированные для wp_ajax_nopriv_, публичны намеренно и относятся к W11)
- W04: данные запроса, выводимые через echo, print, короткие теги echo, printf, _e или wp_die без экранирования, включая $_SERVER['PHP_SELF'], REQUEST_URI и заголовки запроса
- W05: данные запроса в unserialize(), maybe_unserialize(), extract(), include или require, eval(), call_user_func(), в имени функции из переменной или в команде оболочки
- W06: имена опций и ключи метаданных пользователя, взятые из запроса (update_option, delete_option, update_user_meta и подобные), или целый массив $_POST, переданный в wp_update_user()
REVIEW (проверить перед релизом)
- W11: обработчики, изменяющие данные без current_user_can() (wp_ajax_ и admin_post_ для любого вошедшего пользователя; wp_ajax_nopriv_, admin_init и init для настроек, пользователей, плагинов и файлов), включая is_admin(), используемый как проверка прав
- W12: GET-маршруты без permission_callback, маршруты записи, у которых permission_callback равен __return_true, всегда возвращает true или равен is_user_logged_in, а также маршруты записи без него, чей callback сам проверяет current_user_can()
- W13: данные запроса, сохраняемые через update_option, update_post_meta, update_user_meta или set_theme_mod без функции очистки, и register_setting() без sanitize_callback
- W14: неэкранированный вывод get_option, get_post_meta, get_user_meta, get_theme_mod, get_transient, add_query_arg(), remove_query_arg(), get_query_var(), параметров REST и данных запроса, которые были только очищены
- W15: запросы $wpdb, склеенные из параметров REST или из данных запроса, экранированных через esc_sql()/esc_like(), вместо prepare()
- W16: файловые вызовы (unlink, readfile, file_get_contents, fopen, file_put_contents, copy, rename, $wp_filesystem) с путями из запроса, move_uploaded_file() без проверки типа файла и wp_handle_upload() с 'test_type' => false
- W17: отключённые проверки TLS: 'sslverify' => false, выключенные CURLOPT_SSL_VERIFYPEER или CURLOPT_SSL_VERIFYHOST, 'verify_peer' => false, фильтр https_ssl_verify, возвращающий false (loopback-запросы к самому сайту не сообщаются)
- W18: PHP-файлы плагина, выполняющие код до какой-либо проверки ABSPATH, и uninstall.php без проверки WP_UNINSTALL_PLUGIN (защиты вроде if ( ! defined( 'ABSPATH' ) ) { header( ... ); exit; } и проверка Akismet ! function_exists( 'add_action' ) засчитываются)
- W19: проблемы заголовка readme.txt: нет строки === Plugin Name ===, отсутствуют Contributors, Tested up to, Stable tag или License, Stable tag: trunk, Stable tag, отличающийся от Version в главном файле плагина, Tested up to старше трёх последних мажорных релизов WordPress, более 5 тегов, краткое описание длиннее 150 символов, текст шаблона по умолчанию
Что входит в комплект
- Сканер (Python 3.9+, только стандартная библиотека)
- Руководство по правилам с причиной, более безопасным подходом и официальным источником WordPress или PHP для каждого правила
- Рискованный и безопасный примеры плагина (главный файл, обработчики AJAX и REST, readme.txt), а также реальный отчёт сканера по рискованному примеру
Ограничения
Каждый файл читается в том виде, в каком он написан. Данные запроса отслеживаются внутри одной функции; значения, передаваемые между функциями, сохраняемые в свойствах класса другим методом или проходящие через фильтры, не отслеживаются, а вывод неизвестных сканеру функций считается безопасным. Хуки с именами или callback-функциями, формируемыми во время выполнения, а также проверки nonce или прав, отстоящие от обработчика более чем на один вызов, не видны. JavaScript, block.json, папки vendor и tests не читаются. От файлов, которые только определяют классы или функции, защита ABSPATH не требуется (Plugin Check здесь строже), а файлы тем на неё не проверяются. Tested up to сравнивается с датированной границей: 6.9, самый старый из трёх последних мажорных релизов на ноябрь 2026 года. NOT FLAGGED не является гарантией.
Состав
Один ZIP-файл с 17 файлами: SKILL.md, сканер в scripts/ (8 файлов Python), references/rules.md (все правила с причиной и более безопасным подходом) и examples/ (6 файлов примеров плюс report.md, реальный вывод сканера для рискованного примера).
Как использовать: Это навык для агента: папка с файлом SKILL.md и скриптами Python, которые может запускать ИИ-агент для программирования, например Claude Code, Cursor или Codex CLI. Распакуйте архив в папку навыков вашего агента (для Claude Code: ~/.claude/skills/), затем попросите агента проверить ваш проект. Скрипты также работают самостоятельно на Python 3.9 или новее, ничего устанавливать не нужно. Они только читают ваши файлы: никакого доступа к сети, ничего никуда не отправляется.
Что вы получите
1 файл · 62.78 KB
- wordpress-plugin-safety-check-1.0.0.zipZIP · 62.78 KB
ИИ-инструменты и скрипты
Проверка безопасности плагинов WordPress
Проверяйте плагины и темы WordPress перед релизом: запросы $wpdb, собранные из $_GET, обработчики AJAX и admin-post без nonce и проверки прав, открытые REST-маршруты, неэкранированный вывод, unserialize данных запроса и проблемы в readme.txt.
Getly открыл загруженные файлы и не нашёл ничего, что помешало бы их открыть. Это не проверка на вирусы и не оценка качества.
Теги
Частые вопросы
Доступ открывается сразу?
Да. Это цифровой товар - скачать его можно сразу после оплаты, прямо из своей библиотеки.
Можно ли использовать в коммерческих проектах?
Да. Коммерческое использование разрешено: в своём бизнесе и в том, что вы продаёте. Перепродавать и распространять сам файл нельзя.
Какие условия возврата?
Запросить возврат можно в течение 30 дней. Если что-то не так, оформите заявку в своём заказе - её рассмотрит команда Getly.
Какие форматы и размеры файлов я получу?
Вы скачаете 1 файл - ZIP - всего 62.78 KB.
Обновления бесплатны?
Да - когда продавец выпускает новую версию, вы можете бесплатно скачать актуальные файлы из своей библиотеки. Последние изменения смотрите в истории версий.
Цена
$5.00



