ШІ-інструменти та скрипти
Перевірка безпеки плагінів 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 з їхніми обробниками за іменем у всіх файлах, включно із завантажувачем хуків шаблонного плагіна (boilerplate) і допоміжними функціями для 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; } і перевірка ! function_exists( 'add_action' ) з Akismet зараховуються)
- 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



