Saltar al contenido principal

Menú de comandos

Ve a una página o busca en el catálogo

Herramientas y scripts de IA

Revisión de seguridad de plugins de WordPress

Revisa plugins y temas de WordPress antes de publicarlos: consultas $wpdb construidas a partir de $_GET, manejadores AJAX y admin-post sin nonces ni comprobaciones de capacidades, rutas REST abiertas, salida sin escapar, unserialize de datos de la petición y problemas en readme.txt.

$5.00

Qué recibes: 1 archivo · 62.78 KB · ZIP

Ver opciones de compra

Descripción del producto

Un solo manejador wp_ajax_ que guarda ajustes sin check_ajax_referer() permite que otro sitio haga que un administrador con sesión iniciada los cambie, y cualquier suscriptor puede llamarlo si falta current_user_can(). Un register_rest_route() con DELETE y sin permission_callback está abierto a todo Internet, y "WHERE id = " . $_GET['id'] en una consulta $wpdb es una inyección SQL incluso después de sanitize_text_field(). Estos son los errores que hay detrás de la mayoría de los avisos de seguridad de plugins. Esta skill los encuentra, junto con los demás errores de plugins de WordPress que se indican abajo, antes de que publiques o envíes a WordPress.org, y te dice cómo corregir cada uno.

Tu agente ejecuta un escáner sobre la carpeta del plugin o del tema: todos los archivos .php y el readme.txt del plugin. Sigue los datos de la petición ($_GET, $_POST, $_REQUEST, $_COOKIE, $_FILES, cabeceras de la petición, filter_input(), parámetros de peticiones REST) a través de asignaciones, bucles foreach, operadores ternarios, wp_unslash() y construcción de cadenas dentro de cada función, y sabe qué funciones de WordPress sanean (sanitize_text_field, absint, sanitize_key), escapan (esc_html, esc_attr, esc_url, wp_kses_post) o preparan (marcadores de $wpdb->prepare) un valor. Asocia los hooks add_action(), las páginas de administración y las rutas REST con sus manejadores por nombre en todos los archivos, incluido el cargador de hooks del boilerplate de plugins y los helpers de nonce o de permisos a los que llama el manejador. Los ejemplos del manual de plugins (AJAX con check_ajax_referer, la página de ajustes, endpoints REST con __return_true en rutas GET, el controlador REST) no se notifican como BLOCK. Nunca ejecuta PHP ni WordPress. Devuelve BLOCK, REVIEW o NOT FLAGGED, con el archivo, la línea, el motivo y una alternativa más segura. Los secretos de las líneas mostradas nunca se imprimen.

Qué comprueba

BLOCK (corrígelo antes de publicar)

  • W01: consultas $wpdb (query, get_results, get_row, get_var, get_col, o la cadena de consulta pasada a prepare) construidas con datos de la petición que no se convirtieron a número ni se pasaron como marcador de posición
  • W02: rutas REST con métodos POST, PUT, PATCH o DELETE y sin permission_callback (cuando el callback comprueba current_user_can() por sí mismo, es W12)
  • W03: manejadores wp_ajax_, admin_post_, de páginas de administración y de admin_init que modifican datos en función de la petición sin comprobar un nonce, incluidos los resultados de wp_verify_nonce() que se ignoran y las comprobaciones que solo se ejecutan cuando ese campo nonce está presente (los manejadores registrados también para wp_ajax_nopriv_ son públicos por diseño y se dejan para W11)
  • W04: datos de la petición mostrados con echo, print, etiquetas echo cortas, printf, _e o wp_die sin escapar, incluidos $_SERVER['PHP_SELF'], REQUEST_URI y las cabeceras de la petición
  • W05: datos de la petición en unserialize(), maybe_unserialize(), extract(), include o require, eval(), call_user_func(), un nombre de función variable o un comando de shell
  • W06: nombres de opciones y claves de metadatos de usuario tomados de la petición (update_option, delete_option, update_user_meta y similares), o un array $_POST completo pasado a wp_update_user()

REVIEW (revísalo antes del lanzamiento)

  • W11: manejadores que modifican datos sin current_user_can() (wp_ajax_ y admin_post_ para cualquier usuario con sesión iniciada; wp_ajax_nopriv_, admin_init e init para ajustes, usuarios, plugins y archivos), incluido is_admin() usado como comprobación de permisos
  • W12: rutas GET sin permission_callback, rutas de escritura cuyo permission_callback es __return_true, siempre devuelve true o es is_user_logged_in, y rutas de escritura sin él cuyo callback comprueba current_user_can() por sí mismo
  • W13: datos de la petición guardados con update_option, update_post_meta, update_user_meta o set_theme_mod sin una función de saneamiento, y register_setting() sin sanitize_callback
  • W14: salida sin escapar de get_option, get_post_meta, get_user_meta, get_theme_mod, get_transient, add_query_arg(), remove_query_arg(), get_query_var(), parámetros REST y datos de la petición que solo se sanearon
  • W15: consultas $wpdb concatenadas a partir de parámetros REST o de datos de la petición escapados con esc_sql()/esc_like() en lugar de prepare()
  • W16: llamadas a archivos (unlink, readfile, file_get_contents, fopen, file_put_contents, copy, rename, $wp_filesystem) con rutas procedentes de la petición, move_uploaded_file() sin comprobar el tipo de archivo y wp_handle_upload() con 'test_type' => false
  • W17: comprobaciones TLS desactivadas: 'sslverify' => false, CURLOPT_SSL_VERIFYPEER o CURLOPT_SSL_VERIFYHOST desactivados, 'verify_peer' => false, el filtro https_ssl_verify devolviendo false (las peticiones loopback al propio sitio no se notifican)
  • W18: archivos PHP del plugin que ejecutan código antes de cualquier comprobación de ABSPATH, y uninstall.php sin comprobación de WP_UNINSTALL_PLUGIN (cuentan protecciones como if ( ! defined( 'ABSPATH' ) ) { header( ... ); exit; } y la comprobación ! function_exists( 'add_action' ) de Akismet)
  • W19: problemas en la cabecera de readme.txt: falta la línea === Plugin Name ===, faltan Contributors, Tested up to, Stable tag o License, Stable tag: trunk, un Stable tag distinto de Version en el archivo principal del plugin, un Tested up to anterior a las tres últimas versiones principales de WordPress, más de 5 etiquetas, una descripción corta de más de 150 caracteres, el texto predeterminado de la plantilla

Qué incluye

  • El escáner (Python 3.9+, solo biblioteca estándar)
  • Una guía de reglas con el motivo, la alternativa más segura y la fuente oficial de WordPress o PHP para cada regla
  • Un plugin de ejemplo arriesgado y otro seguro (archivo principal, manejadores AJAX y REST, readme.txt), y el informe real que el escáner genera sobre el arriesgado

Limitaciones

Lee cada archivo tal como está escrito. Los datos de la petición se siguen dentro de una sola función; los valores que se pasan entre funciones, que otro método guarda en propiedades de clase o que pasan por filtros no se siguen, y la salida de funciones que no conoce se considera segura. No ve los hooks cuyos nombres o callbacks se construyen en tiempo de ejecución, ni las comprobaciones de nonce o de capacidades que están a más de una llamada del manejador. No lee JavaScript, block.json ni las carpetas vendor y tests. A los archivos que solo definen clases o funciones no se les exige una protección ABSPATH (Plugin Check es más estricto en eso), y en los archivos de temas no se comprueba. Tested up to se compara con un límite fechado: 6.9, la más antigua de las tres últimas versiones principales en noviembre de 2026. NOT FLAGGED no es una garantía.

Contenido

Un archivo ZIP con 17 archivos: SKILL.md, el escáner en scripts/ (8 archivos Python), references/rules.md (cada regla con su motivo y su alternativa más segura) y examples/ (6 archivos de ejemplo más report.md, la salida real del escáner sobre el ejemplo arriesgado).

Cómo usarlo: Esto es una skill de agente: una carpeta con un archivo SKILL.md y scripts de Python que un agente de programación con IA como Claude Code, Cursor o Codex CLI puede ejecutar. Descomprímela en la carpeta de skills de tu agente (para Claude Code: ~/.claude/skills/) y pide a tu agente que revise tu proyecto. Los scripts también funcionan por sí solos con Python 3.9 o posterior, sin instalar nada. Solo leen tus archivos: sin acceso a la red y sin enviar nada a ningún sitio.

Qué recibes

1 archivo · 62.78 KB

  • wordpress-plugin-safety-check-1.0.0.zipZIP · 62.78 KB
LicenciaUso comercial permitido
Revisión del paqueteSuperada

Getly abrió los archivos subidos y no encontró nada que impida abrirlos. No es un análisis antivirus ni una valoración de calidad.

Publicado12 nov 2026
Tamaño del archivo62.78 KB
Formato de archivoZIP
Versiónv1.0

Etiquetas

wordpressphppluginssecuritywordpress-orgai agent skill
R
RR HH

Preguntas frecuentes

¿Tengo acceso al instante?

Sí. Es un producto digital: puedes descargarlo justo después del pago, directamente desde tu biblioteca.

¿Puedo usarlo en proyectos comerciales?

Sí. Se permite el uso comercial: úsalo en tu propio negocio y en cosas que vendas. No puedes revender ni redistribuir el archivo en sí.

¿Cuál es vuestra política de reembolso?

Puedes pedir un reembolso dentro de 30 días. Si algo no va bien, solicítalo desde tu pedido y el equipo de Getly lo revisa.

¿Qué formatos y tamaños de archivo recibiré?

Descargarás 1 archivo - ZIP - 62.78 KB en total.

¿Recibo actualizaciones gratis?

Sí: cuando el vendedor publica una versión nueva, puedes volver a descargar los archivos más recientes desde tu biblioteca sin coste extra. Mira el registro de cambios para ver las últimas actualizaciones.

Precio

$5.00