Desarrolla en WordPress Plugins más seguros

Introducción

Plugin Check Plugin es la nueva herramienta disponible para todo el mundo y que permite hacer revisiones automáticas de tu plugin, darte indicaciones de tu código que no es seguro, además de indicar buenas prácticas. Mejora tu desarrollo con este plugin haciéndolo parte de tu flujo de trabajo. ¿Qué es Plugin Check Plugin? Es una solución que te permite realizar revisiones automáticas de tu plugin, analizando tu código en busca de posibles vulnerabilidades y errores de seguridad, y además, te ofrece sugerencias sobre buenas prácticas y estándares de codificación.

Con ella, podrás:

  • Detectar problemas de seguridad: Recibe alertas sobre secciones de tu código que podrían ser inseguras o vulnerables.
  • Asegurar la calidad del código: Obtén recomendaciones para mejorar y optimizar tu código, garantizando que sigue las mejores prácticas de la comunidad WordPress.
  • Ahorro de tiempo: Automatiza las revisiones, lo que te permite concentrarte en lo que realmente importa, desarrollar y mejorar tus plugins.
  • Integración en tu flujo de trabajo: Incorpora fácilmente la herramienta en tus procesos de desarrollo, para que cada versión de tu plugin cumpla con los estándares de calidad y seguridad.

Mejora tu desarrollo haciendo de Plugin Check Plugin una parte esencial de tu flujo de trabajo y descubre cómo mantener tus plugins a la vanguardia de la seguridad y eficiencia.

Charla

Resumen

Hola, soy David Pérez, desarrollador apasionado por WordPress desde 2010 y cofundador de la Agencia Close de Marketing y Desarrollo, donde lidero el área técnica y desarrollo plugins, sobre todo enfocados en Gutenberg. También formo parte del equipo de revisión de plugins de WordPress.org, gracias al patrocinio de Hostinger, donde trabajo para mejorar la seguridad y la calidad del ecosistema.

En esta charla quise presentar una herramienta que estamos impulsando desde la comunidad: Plugin Check Plugin (PCP). Es una herramienta gratuita que permite revisar automáticamente el código de nuestros plugins para detectar vulnerabilidades y malas prácticas. Lo interesante es que podéis integrarla fácilmente en vuestro flujo de trabajo y usarla antes de enviar un plugin al repositorio oficial o lanzarlo de forma comercial.

Este proyecto empezó en el equipo de Performance de WordPress, pero ahora también estamos muy involucrados desde el Plugin Review Team y el equipo Meta. De hecho, desde septiembre pasado, todos los plugins que se suben al repositorio se revisan automáticamente usando esta herramienta, y en el futuro, también lo harán las actualizaciones de plugins.

El número de plugins que recibimos ha aumentado mucho: de unos 120 a más de 250 por semana. Y aunque no fue una charla sobre IA, también usamos inteligencia artificial para comprobar, por ejemplo, si el nombre de un nuevo plugin entra en conflicto con los 60.000 ya existentes.

Durante la sesión hice una pequeña demo de cómo funciona Plugin Check Plugin: simplemente instalándolo en nuestro entorno local de WordPress, seleccionamos el plugin que queremos revisar y el sistema nos muestra errores, advertencias y sugerencias, organizadas en categorías como seguridad, rendimiento o buenas prácticas de codificación.

Nos centramos en dos medidas básicas de seguridad que todo desarrollador debería aplicar: sanitizar la información que recibimos y escapar cualquier dato antes de mostrarlo. Usando solo estas dos prácticas se puede evitar un gran porcentaje de las vulnerabilidades más comunes.

Finalmente, compartí ejemplos reales de plugins conocidos que sufrieron vulnerabilidades graves que se podrían haber evitado simplemente pasando el código por esta herramienta. También respondí preguntas sobre cómo usar Plugin Check Plugin, cómo mejora la seguridad y algunas recomendaciones para seguir desarrollando de forma segura.

Muchísimas gracias a todos los que asististeis. Espero que esta herramienta os sea tan útil como lo está siendo para nosotros en el equipo de revisión.

Fotos Gracias a Paco Marchante

Transcripción

Toda la charla

Presentador
Ahora vamos con un ciclo de mini charlas. El primer turno es para David Pérez, que es desarrollador apasionado por WordPress desde 2010 y cofundador de la agencia Close, donde lidera el área técnica y desarrolla plugins, con especial foco en Gutenberg. Ha tenido un papel muy activo en la comunidad WordPress, participando en WordCamp, colaborando con WordPress TV España y desde 2023 forma parte del equipo de revisión de plugins, contribuyendo a mejorar su seguridad y calidad. Y además, en el plano personal, organiza una carrera solidaria en Granada en honor a su padre. En su charla, que se titula Desarrolla en WordPress, plugins más seguros, David nos va a presentar el Plugin Check Plugin. ¿Se llama así? Sí, sí,

David
plugin, check plugin. Una

Presentador
herramienta gratuita que realiza revisiones automáticas del código de tus plugins para detectar vulnerabilidades y sugerir buenas prácticas. Esta solución permite mejorar la seguridad y calidad del código mientras que se integra fácilmente en tu flujo de trabajo, ahorrando tiempo y facilitando el cumplimiento de los estándares de desarrollo en WordPress. Así que, vamos allá.

David
Muchas gracias. Bueno, buenas tardes a todos. voy a contar un poquito sobre todo una herramienta que hemos desarrollado desde la comunidad que fue un proyecto que inició el equipo de Performance que como sabéis están haciendo muchas cosas también en el core de WordPress hace poco en las 6-8 he sacado muchas cosillas de rendimiento y lo iniciaron ellos y junto con nosotros el equipo de Plugin Review Team hemos metido una serie de checks que le llamamos nosotros para detectar incidencias en vuestro código. Cuando vosotros hacéis un plugin, ya sea de manera comercial o sea para ponerlo en el repositorio oficial, si lo mandáis al repositorio oficial nosotros hacemos una revisión manual también con un T automatizado y sobre todo ese tipo de comprobaciones que hacemos en el código lo podéis vosotros hacer antes. Entonces, lo bueno de esta herramienta es que podéis usarla en todo momento y vamos a ir viendo. También voy a enseñaros cómo vulnerabilidades graves en ciertos plugins se hubieran solucionado muy fácilmente utilizando este plugin. Además, dándote unos consejos que quiero que os llevéis, por lo menos, si sois desarrolladores. Este equipo también ha participado en este plugin. Si vos buscáis en el repertor oficial, se llama Plugin Chef Plugin o PCP. Y también ha participado el equipo de meta que si no lo conocéis el equipo que hay detrás de wordpress.org pues también ahí estamos entonces bueno actualmente también este plugin conseguimos en septiembre del año pasado de que si sube un plugin al repositorio de wordpress automáticamente sea verificado por este plugin entonces está cobrando mucha importancia y hay un proyecto que va a tardar un poquito de que todas las actualizaciones de wordpress porque ahora mismo son somos un equipo reactivo, es decir, que cuando nos piden o nos mandan plugin, nosotros lo revisamos. Pues la idea es que seamos mucho más proactivos, de manera que cuando haya cualquier actualización del plugin, sea revisado por este plugin. Con lo cual, tenemos una herramienta bastante consistente y bastante fiable para usarla y que va a ser usada por toda la comunidad antes o después. Si no es voluntariamente como es ahora, será forzosa porque no saldrá en nuestro problema de actualización de plugins. Bueno, como veis no es una charla de IA, pero bueno, sí es verdad que nosotros cada vez estamos usando más la IA y simplemente queda un par de toquecillos de IA porque no estaba pensada totalmente, pero bueno, para que sepáis un poco que los plugins que nosotros revisamos a la hora de que se nos envían, estamos encontrando que del año pasado a este ha doblado la media de envío de plugin semanal. El año pasado estaba sobre unos 100, 120 y ahora están unos 250. De hecho, ayer fue de los récords de este año, unos 45 plugins enviados. Suele ser los jueves o los viernes, ayer o antes de ayer. Y nosotros lo que estamos usando mucho la guía es también para cuando te mandas un plugin, tiene un nombre muy genérico, comprobar con todos los 60.000 plugins que tenemos publicados en nuestro repositorio que no entre en conflicto de nombre. Entonces lo estamos usando bastante. ¿Cómo funciona este plugin? Vamos a hacer una pequeña demo y va a enseñar cómo funciona. Si nos da tiempo, que tenemos que ir muy rápido. Primero se instala en nuestro WordPress. Evidentemente esto para usarlo en nuestro entorno local. Cuando tenemos nuestro entorno local, instalamos el plugin plugin-check-plugin Y junto con nuestro desarrollo podemos analizar el código. Tiene diferentes categorías. Tenemos un montón de checks o de comprobaciones. Y esas comprobaciones están ocupadas por categorías que no son excluyentes. Es decir, que puede haber… Vosotros podéis comprobar la seguridad y a lo mejor en el repo del plugin, que es el que nosotros usamos y el que está activado por defecto, también tienen todos los checks de seguridad. No son excluyentes, pero sí están focalizados. Entonces, pues dicen, bueno, quiero meter la seguridad. Entonces, si tenéis algún plugin comercial o tenéis plugin para clientes y os interesa también, por ejemplo, auditar el lado de rendimiento, la accesibilidad no lo recomiendo porque está muy verde. No hay muchas comprobaciones de accesibilidad. Pues le podéis dar y os hará una serie de incidencias en vuestro plugin. ¿Vale? Vale, esas comprobaciones o checks que estamos avisando se realizan de forma dinámica o estática. o basada en los estilos de código de coding estándar. Estática quiere decir que según el código en el que está lee el PHP y automáticamente ya te va diciendo los problemas que encuentran en ese check y dinámico es que ejecuta código. Se ejecuta código y espera una variable y sobre eso te va diciendo si deberían ser correctas o no. Entonces, pues hay una cantidad. Nosotros actualmente y por aquí tengo a Fran Torres que es el principal involucrado en nuestro comprobador que tenemos, Internet Scanner, que nosotros le llamamos que cuando nos llega un plugin y nosotros lo revisamos, tenemos una herramienta, aproximadamente habrá unos 200, ¿no? Más o menos. Sí, tuvimos… ¿cuántos? 200 y pico ya, le perdemos el control, no está contado. Pues bueno, pues de esos 200 y pico y que aparte tiene un proceso manual que nosotros realizamos, nosotros hemos podido conseguir hasta ahora unos 83. Es decir, no tiene todos los que se realizan por parte del equipo, pero sí tiene una gran parte, 83 son bastantes. Y de ello, hay veces que no estamos muy seguros de lo que hace la máquina. Es decir, nos dice los non sobre todo, la comprobación de seguridad cuando son peticiones post, etc. Pues, como no estamos muy seguros, lo ponemos con un nivel un poquito menos exigente para que no, incluso, como estaba diciendo, puede bloquear la subida de un plugin para que no la bloquee. Entonces, hay unos 31 errores, 24 avistencias y reglas coding estándar. Quería de manera rápida repasarles, y si quiero entrar un poquito a cómo se utiliza, para que os llevéis un poco esta herramienta que funciona estupendamente, las principales herramientas. Estos son los checks que tenemos actualmente. Hacemos comprobaciones de traducción. Actualmente los plugins, si queremos que sean traducibles, hay una serie de funciones en las que después tenemos que poner el dominio de esa traducción. Todas esas comprobaciones. Luego también puede haber inyecciones de código a través de esas funciones, con lo cual también damos que se utilice la versión segura o escapada. Esto también, por lo que conozcáis, no se permite ofuscación de código en el repositorio de WordPress. Esto también ayuda mucho a la seguridad porque no tienes código que no sabes que se está ejecutando. Eso es fundamental para nosotros y de hecho lo editamos y lo damos como error si se utiliza cualquier tipo de base encode o cualquier tipo de archivo. Por ejemplo, ejecutables.bat. Diréis, bueno, ¿quién pone un.bat, un.exe o un.sh? Hay mucha gente que lo pone. Eso está bloqueado totalmente, además de las librerías que se utilizan de desarrollo. Por ejemplo, nosotros podemos poner en nuestro Composer librerías que se utilizan para auditar nuestro código, para hacer PHP unitario, etc. Pues todas esas librerías no deberían ir en un plugin ya final. Por eso damos estrategia y damos ayuda. Las cabeceras, la típica, si habéis publicado… ¿Quién de aquí tiene un plugin en repositorio de WordPress? ¿Quieres levantar la mano? Uno, dos. Bueno, animo a que publiquéis porque se aprende muchísimo. Y yo también tengo unos cuantos. Y sobre todo, el modelo que está funcionando muy bien es el freemium. Bueno, por un lado, gratuito entero o freemium. Y cuando subimos una versión nueva en la cabecera del Realme, hay que poner una versión y tiene que ser la misma que la cabecera del PHP. Es algo sencillo, pero esto ya te lo está avisando. Y aquí voy a entrar un poquito más de detalle en medidas de seguridad, que son, al final, el 80% de las medidas de seguridad está en cuando recibe información que lo sanitice y cuando tú ejecutas código hace un eco que se escape. Esa es de los principales principios de seguridad y en ese sentido vamos a ir viendo un poco. Esto aquí hay, gracias a la herramienta Coding Standard, que si no la conocéis, es un repositorio que analiza nuestro código. Incluso lo podemos implementar en nuestro editor de código y no hace como, por ejemplo, en el Word, que te pone una rayita roja si el código está mal. Yo lo uso mucho también para el estilo de código, cuando tenemos un equipo de trabajo, que no todos escriban de una forma u otra, el código se vea de manera uniforme, incluso podemos tener reglas personalizadas para el equipo, porque a lo mejor los arrays, a mí me gusta los arrays cerrados con las llavecitas, pues el código estándar te pone un error, entonces tú puedes personalizarlo. Son cositas así que tienen, en estilo de código y en muchas más comprobaciones. Por ejemplo, el tema de los SQL. Os voy a enseñar cómo informes de vulnerabilidades graves en plugins conocidos. Voy a juntar las preguntas con… Ah, vale, vale, perfecto. Más comprobaciones y entramos un poco a peticiones directas a base de datos. Tienen que ir siempre con el Prepare. Y bueno, aquí hay unas cuantas más de performance. Os las dejaré en la diapositiva, en la web de la WordCamp. Sobre todo quiero entrar al detalle de dos comprobaciones que tenéis que hacer siempre cuando trabajéis con vuestros plugins. Sobre todo el de Sanitize. Sanitize quiere decir que, por ejemplo, si tenemos un formulario, tenemos un input, cuando se ejecuta ese formulario, la información que te llegue tendría que ir sanitizada. Tiene que ir sanitizada. Hay distintas funciones a la hora de sanitizar y lo que hacen es que descomponen si hay un código que no sea ejecutable o que no se guarde un código malicioso. Lo descomponen. un poco así de forma resumida hay muchos tipos de funciones de sanitizado por ejemplo, si nos viene un email para sanitizar email, tienen ciertas reglas pero al final la principal es el SanityZtexField y si hay un Array, tendrás que recorrer todo el Array y hacer SanityZtexField en cada valor del Array pues este y la siguiente bueno, estas

David
tres,

David
perdón La siguiente es la de escapado, la de escapado, que es cuando nosotros hacemos un eco de un script, de un título, deberemos pasarlo por una función de WordPress que se llama HTML, esa es la básica y luego la podemos utilizar. Lo que hace es que no ejecuta código malicioso. Con esas dos funciones y las conozcáis bien y las uséis de manera masiva, el código va a ser mucho más seguro. Se puede utilizar con un WP-CLI, se puede utilizar como acción de Gijas. Esto lo recomiendo mucho porque podemos hacer T automatizado sobre nuestro plugin cuando hacemos una release o un pull request y que sea analizado por el plugin-check-plugin. Y para terminar, aquí pone muchas gracias, pero todavía no. Para terminar, quería enseñaros, porque muchas veces hablamos de seguridad y creemos que es algo complicado y debe ser algo muy sofisticado. y os quería enseñar primero cómo funciona el plugin check plugin que si se ve más o menos bien cuando lo instalamos nos da una opción en tools plugin check y nos da un select de los plugins que nosotros tenemos instalado en nuestra instalación como veis bueno pues es más o menos sencillo y yo elijo el plugin y le doy a check it el plugin repo es el que está señalado por defecto con ese para mí es más que suficiente y fijaros este es un planning bastante conocido tenía la cantidad de resultados que da que hay que arreglar aquí como veis tienen un error estos tienen que arreglarse te dice pero es que hay un burguer por abajo te dice el archivo la línea y bueno con la línea suficiente y te da el típico error de comprobación. Incluso lo podéis ver en el editor si queréis verlo y esto se hizo al tiempo. Os da una guía de cómo poder solucionarlo y tener más información de cómo solucionarlo. Pues como veis, aquí tenéis una cantidad. Y quería entrar al detalle, y esto ya para terminar. Aquí tenemos, hay varias empresas de seguridad, una de ellas es Patestack y hace unos informes sobre plugin. El equipo de plugin, que nosotros tenemos un pequeño subequipo que es de seguridad, que recibe esos informes y notifica a los autores. Esto es lo que hace Patestack, que nos notifica y con un tiempo prudencial le dice el autor, oye, arregla este parche. Lamentablemente no siempre lo arreglan, pero bueno, y no lo hacen público hasta que se ha arreglado. Aquí, por ejemplo, vemos que la versión 2.26, la menor de 2.26 tiene una vulnerabilidad bastante grave, que es cross-site scripting, la ejecución de código. Incluso fijaros que nos da un poquito más el detalle de la vulnerabilidad. Este plugin se llama vpSocialWidget. ¿Cómo lo hubiéramos solucionado? Si el autor hubiera utilizado esta herramienta, automáticamente le hubiera dicho que tenía que haber estado escapando. Ciertas funciones. Y fijaros que no se da una vez, se da muchas veces. Usando esta herramienta y dejándolo limpio, sobre todo los errores, los warning es para que vosotros digáis, ¿esto está bien o está mal? Porque como no hay un proceso manual que nosotros podamos recomendar, pues sí es verdad un poco el criterio de cómo podemos solucionarlo. Entonces, bueno, el informe es bastante grande, inquieta un poco esto. También nos puede servir incluso para auditar la seguridad que tenemos de ciertas instalaciones. Oye, nos interesa a lo mejor, voy a pasarle el plugin y si es un plugin conocido se lo mando al autor. oye los autores normalmente suelen estar implicados en que esto funcione entonces ellos les interesa que sea lo más seguro posible entonces pues sí también de ahí a conocer aquí por ejemplo el que decía de croissants scripting que sólo está asociado que no utiliza el escapado este por ejemplo es vulnerable con sql que es un plugin que se llama order splitter que aparentemente lo que hace es que según creo que los pedidos los divide. Y aquí en orden de splitter le damos y efectivamente veréis que si hubiera usado esta herramienta, aparte de tener escapado que aquí por ejemplo tiene traducción, también se hubiera encontrado con que hubiera hecho bueno ahora no me va a salir porque hay un montón de incidencias pero si lo buscamos aquí estáis viendo se ha usado una query y no se ha utilizado el pp que lo que hace es que las variables que nos traemos la sanitiza de alguna forma para que nos entre directamente en una consulta sql pues si hubiera utilizado nuestra herramienta no hubiera tenido este problema y finalmente de aposar widget he cogido tres más o menos que veía algunas ponen los priority otra high priority pues igual aquí si vemos que la de dashboard bueno la vez que es un ejemplo vaya tela yo es para no usarlo y salir corriendo vale aquí como veis pues igual este era de cross-site request forgery este no lo conozco yo este pues igual aquí escapado como veis casi toda la seguridad en un

Presentador
porcentaje muy

David
alta es sanitizado y escapado y los nonsense que no tenía el detalle de contarlo pero también ayudan mucho pues si tenéis alguna pregunta

Pregunta 1
¿El plugin este que nos has mostrado para comprobar la seguridad solo sirve para comprobar la seguridad de un plugin o sirve para comprobar la seguridad de un código que tú le

David
insertas? Solo para plugin

Pregunta 1
Primero conviertes tu código a un plugin

David
privado Acuerdas

Pregunta 1
de la conversación de antes y luego lo compruebas me ha llamado la atención que todos los que pones tienen muchísimos agujeros de seguridad es así con todos yo

David
espero que no o sea esto está buscado bueno pero no lo tenemos bien no lo sabemos exactamente nosotros lo que tenemos es que yo digo que nuestro equipo trabaja de forma reactiva cuando tenemos notificaciones de usuarios o nosotros analizamos el código y cerramos el plugin para digamos cortar la sangría

David
le

David
decimos el autor que arregle y a partir de que haga una actualización se hace como a una comunidad normalmente suele ser

Pregunta 1
vale y por último si

David
detectó

Presentador
errores

Pregunta 1
importantes en un plugin se los reportó al autor y no le sale

David
de los huevos utilizar otro plugin

Pregunta 1
utiliza otro sí sí justo

David
a

David
ti

Pregunta 2
Buenas, yo más que pregunta, recomendación yo sí he utilizado el plugin desde que lo anunciasteis me habéis tirado ya un plugin para atrás

David
vamos a salir corriendo

Pregunta 2
no, en realidad son tres tonterías pero no he tenido tiempo de corregirlos

David
publica

Pregunta 2
uno nuevo pero sí que os voy a dar una recomendación

David
Paco estaba por aquí también, haciendo fotos cuando

Pregunta 2
te sale una alerta de un error

David
es

Pregunta 2
verdad que bajo mi punto de vista a veces las recomendaciones que dais para solucionarlo

David
no son de todo no

Pregunta 2
son de todo claras y no va directamente al turrón es decir

David
lo

Pregunta 2
que estamos

David
hablando el

Pregunta 2
problema lo tiene el escaping coño pues llévame el escaping dímelo claro

David
porque te manda

Pregunta 2
lo mejor una documentación gigantesca

David
que

Pregunta 2
en realidad tampoco me termina de

David
resolverla

Pregunta 2
vamos

David
eso en el canal interno si lo tenemos hecho de hecho se hace con un ejemplo te enseñamos dónde podéis qué línea que en planche no lo tenemos pero bueno te cojo la sugerencia y trabajaremos en ello de hecho animo en hija si lo buscáis y hagáis vuestro propio issue y bueno hay gente de google de hago esos motifs de empresas muy grandes que le interesa muchísimo el tema

Pregunta 3
hola me gusta mucho la herramienta pero también

David
pienso

Pregunta 3
en un hacker también estáis dando la información de cómo hackear no

David
bueno no creas porque realmente ellos nos van a quiero decir que siempre vamos por delante en el sentido de buscar posibles agujeros es como hago un símil rápido es como en la oficina mi edificio oficina hubo un robo y dónde fueron los que fueron a robar pues en la oficina que no tenía alarma quiero decir que los planes que se preocupan por hacer nuevos parches de seguridad pues normalmente van a tener menos ataque ellos van a donde va a lo que lo tienen más fácil entonces

Pregunta 3
realmente no se puede

David
hacer si podría ver oye y en estos planes algún

Pregunta 3
playa y no así que vea lo busco y

David
claro efectivamente bueno no sé claro la audita dice mira este plan es un agujero sí sí ellos también tienen a su propia herramientas. Luego me cuentas. Listo, muchas gracias. Muchas gracias.

Deja un comentario

ÚLTIMOS ARTÍCULOS

Cierre Ventana

Desarrolla en WordPress Plugins más seguros

Introducción Plugin Check Plugin es la nueva herramienta disponible para todo el mundo y que permite hacer revisiones…

Cierre Ventana

Crea tu propio plugin para WordPress, desde cero o ya sabiendo algo

Ponentes: Francisco Torres, Paco Marchante y yo, David Pérez Tuvimos la oportunidad de estar en la WordCamp Madrid…

Cierre Ventana

State of the Word: Plugins

Foto realizada por wordpress.org Ayer se presentaron las novedades en las que se va a trabajar en WordPress…

Logo David
Resumen de privacidad

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.Para más información consulta nuestra <a href="/politica-privacidad/">Política de Privacidad</a>