Prácticas recomendadas de seguridad para desarrolladores de complementos y temas de WordPress
Publicado: 2020-12-09Como desarrollador de WordPress, hay muchas decisiones que debe tomar sobre en qué trabajar. Su principal interés y prioridad es crear un tema o complemento increíble, y las medidas de seguridad a menudo pasan a un segundo plano cuando se sienta en el asiento del conductor para trabajar en el código. ¿Cuándo fue la última vez que se sentó y revisó su propio código en busca de problemas de seguridad? no, no lo creo
Estos consejos se basan en mi experiencia tanto en el desarrollo de complementos en CleverPlugins como en ayudar a innumerables clientes a volver a tener sus sitios web en línea después de ser pirateados. Desarrollar un complemento de seguridad como WP Security Ninja no me ha hecho menos paranoico sobre el código de otras personas.
La razón más común para los sitios web pirateados sigue siendo una pésima administración de contraseñas, pero eso no debería ser una excusa para usar algunas de las formas simples en que puede proteger su código.
Cuando desarrolla un complemento o un tema, quiere que se vuelva popular y que esté instalado en tantos sitios web como sea posible. Cuanto mayor sea su éxito, mayor será la posibilidad de que las personas intenten abusar de su trabajo para piratear los sitios web de sus usuarios.
Debido a la popularidad de WordPress, se ha convertido en uno de los objetivos más comunes de los piratas informáticos. Si se detecta una vulnerabilidad en un complemento o un tema, puede significar que miles, si no cientos de miles de sitios web están abiertos para el abuso.
Desafortunadamente, sucede regularmente que aparece una vulnerabilidad en un producto conocido, por lo que vale la pena tomar algunas medidas básicas de seguridad para proteger su código para sus usuarios.
¿Qué pasa con el equipo de revisión de WordPress.org?
Puede pensar que el equipo que revisa los complementos y los temas antes de publicarlos en el repositorio oficial verifica todo tipo de problemas de seguridad, pero el equipo es pequeño y está formado solo por unas pocas personas. La cola de complementos y temas para verificar crece continuamente, por lo que el tiempo que tienen para revisar cada uno es limitado.
Sin embargo, si encuentran algo, pueden cerrar automáticamente su complemento hasta que lo arregle o enviarle un correo electrónico con una advertencia de que debe corregir una vulnerabilidad antes de un período de tiempo determinado.
El punto es que una vez que su complemento o tema se incluye en el repositorio, puede enviar actualizaciones a través del repositorio sin una revisión adicional, por lo que una vulnerabilidad puede colarse fácilmente en cualquier momento y pasar desapercibida durante casi cualquier período de tiempo.
Básicamente, el endurecimiento de las medidas de seguridad de su complemento depende de usted, así que veamos algunas formas en que puede proteger su producto de WordPress y evitar muchos dolores de cabeza y un impacto potencialmente negativo en su marca.
Esto es lo que puede hacer para desarrollar de forma segura su complemento o tema de WordPress.
1. ¡Piense en la seguridad desde todas las perspectivas!
Nunca se sabe quién podría estar usando su complemento o tema y qué nivel de comprensión tienen sobre la seguridad, si es que tienen alguno.
Nunca se sabe quién podría estar usando su complemento o tema y qué nivel de comprensión tienen sobre la seguridad, si es que tienen alguno.Tweet
Es posible que los administradores, editores o usuarios regulares de cualquier sitio web de un cliente no usen contraseñas seguras y sus cuentas podrían ser pirateadas. Si su producto no está protegido, se podría abusar de estas cuentas para obtener más acceso e instalar código malicioso en el sitio web de su cliente.
No debe esperar que los administradores del servidor que han configurado el servidor en el que se ejecuta el sitio web sepan lo suficiente sobre cómo proteger su sitio web de otros sitios en el mismo servidor. Si el sitio web está alojado por un gran proveedor, puede esperar que el sitio web esté correctamente "separado", pero no sabe dónde se instalará su producto.
¿Suena paranoico? Quizás. Pero, si su complemento o tema se vuelve súper popular, se alegrará de haber adoptado un enfoque paranoico de la seguridad.
Siempre y cuando su complemento o tema se vuelva súper popular, se alegrará de haber adoptado un enfoque paranoico de la seguridad.Tweet
2. Prevenir XSS: ataques de secuencias de comandos entre sitios
Este se está volviendo cada vez más importante a medida que WordPress se está convirtiendo en un proyecto más impulsado por la interfaz con Gutenberg y ReactJS.
Uno de los errores más comunes de los desarrolladores de WordPress es olvidarse de validar y desinfectar su código, dejándolo abierto a ataques XSS. Hay un par de variaciones de XSS, pero en general, un ataque XSS ocurre cuando se le permite a un pirata informático inyectar código en el servidor y luego hacer que se ejecute en el navegador de un visitante.
Imagina que tienes un campo de entrada. Para simplificar, digamos que es un campo de comentarios donde los usuarios o visitantes pueden enviar un comentario a una publicación.
Un hacker intentará enviar un comentario con "<script>alert('XSS');</script>"
.
Ahora, este es solo un ejemplo básico que muestra una alerta en la pantalla del usuario y nada más. Un hacker real usará el campo de comentario para inyectar código que carga código de su sitio que puede robar información del navegador del visitante y mucho más.
Podemos evitar que esto suceda validando, desinfectando y escapando.
Validar es verificar los datos enviados antes de hacer nada, como almacenarlos en la base de datos. Cada vez que se envían datos, puede verificarlos y asegurarse de que sean aceptables. Si es un campo de cantidad, espera un número. Si no es un número, puede devolver un mensaje de error al usuario.
Desinfectar los datos es procesar la información enviada y asegurarse de que no contenga nada que no queramos almacenar, como eliminar caracteres no deseados. WordPress tiene varias funciones integradas para ayudar con esto. Más sobre la desinfección en un momento.
Escapar es evitar que cualquier código malicioso se ejecute realmente en su navegador. Supongamos que ya tiene un código malicioso inyectado en su sitio web, u otro complemento o tema permite que los piratas informáticos inserten código en los datos que está utilizando; escapar los datos a la pantalla antes de mostrarlos evitará que sea un problema.
Veamos el mismo ejemplo simple que usamos antes "<script>alert('XSS');</script>"
Si no hacemos nada con este código, el navegador pensará que es código HTML. El detalle importante aquí son los caracteres < > que se utilizan para definir etiquetas HTML. Al escapar de estos, convertimos <
en <
y >
en >
El navegador ahora entiende que este no es un código HTML real, y en su lugar debería mostrar un signo menor que y mayor que.
Al validar, desinfectar y escapar todos los datos que entran y salen de su aplicación, está protegiendo a sus usuarios de uno de los métodos de ataque más comunes.
3. Tenga cuidado con las inyecciones de SQL
Como su nombre lo indica, un atacante puede usar inyecciones SQL para hacer que su sitio web procese una consulta SQL modificada y usarla para obtener acceso a su base de datos.
Dependiendo de los datos que almacene en su sitio web, la filtración de datos de su sitio web por un ataque de inyección SQL podría pasar de ser vergonzoso a destruir por completo su reputación y su negocio.
La inyección de SQL es una forma antigua de atacar un sitio web, pero sigue siendo muy eficaz y hay muchas personas que buscan formas de utilizar esta forma de ataque. En octubre de 2020, el popular complemento de WordPress Loginizer anunció que tenía una vulnerabilidad de inyección SQL que dejaba en riesgo a más de un millón de sitios web.
En 2019, piratas informáticos desconocidos robaron millones de datos fiscales de búlgaros mediante un ataque de inyección SQL y, en 2016, un grupo de piratas informáticos rusos extrajo información de votantes de unas 500 000 personas en Ohio. Este tipo de ataques siguen siendo muy efectivos y puedes encontrar mucha información sobre ellos.
Fuente: https://xkcd.com/327/
El lugar más común donde ocurre una inyección SQL es en un campo de formulario que acepta la entrada del usuario, por ejemplo, un nombre. El ataque ocurre al ingresar partes del código SQL en los campos de entrada, creando una consulta personalizada que arroja un resultado diferente al esperado.
Supongamos que tiene un formulario que permite a las personas buscar un nombre en particular.
SELECT * FROM wp_postmeta WHERE meta_value = 'Henry' AND meta_key = 'celebrity_name';
Este ejemplo simple recogería todas las filas de la metatabla de publicación con todas las filas que tienen el nombre Henry
y una clave específica, celebrity_name
; de esta manera, no devolvemos la base de datos completa y solo las filas particulares que necesitamos.
Un atacante intentaría analizar un valor diferente, por ejemplo 'Henry' OR 1=1--
La consulta ahora devolverá todas las filas con nuestro valor específico, o cualquier otra cosa, ya que OR 1=1
en SQL siempre es verdadero.
Sin embargo, se pone peor. Nuestra consulta SQL solo solicitó resultados en los que meta_key
coincida con el valor particular que estamos buscando, por lo que no devolveríamos todo. Esto debería limitar el impacto que tiene el ataque de inyección SQL, ¿verdad?
Bueno, no es así. En SQL, el guión doble es un indicador de comentario, por lo que todo lo que viene después de esto se comenta.
SELECT * FROM wp_postmeta WHERE meta_value = 'Henry' OR 1=1--' AND meta_key = 'celebrity_name';
Esto significa que la consulta se ve así:
SELECT * FROM wp_postmeta WHERE meta_value = 'Henry' OR 1=1
La consulta ahora esencialmente devuelve todo en esa tabla de base de datos.
Este fue solo un ejemplo simple. Hay muchas formas más complicadas de acceder a la mayoría, si no a toda, la información de una base de datos. Un atacante podría intentar ataques de inyección SQL a ciegas, lo que significa ejecutar código en su base de datos: agregar un nuevo administrador, eliminar todos sus datos, etc.
La mayoría de los ataques tendrían la forma de cadenas de consulta aleatorias que contienen partes de SQL enviadas a los formularios de su sitio web. Los scripts automatizados detectarían cualquier cambio en la salida de su sitio web y luego detectarían la posibilidad de un ataque.
Una forma simple y efectiva es enviar un apóstrofo '
como entrada y ver si cambia algo, se produce un error o se devuelven más resultados.
WordPress al rescate
En lugar de interactuar directamente con la base de datos, cualquier desarrollador debería usar la clase de abstracción de base de datos incorporada en WordPress, $wpdb
.
La clase $wpdb
en WordPress tiene toda la funcionalidad CRUD que necesita para interactuar con la base de datos de manera segura, e incluso puede usar la clase para interactuar con sus propias tablas de base de datos si su complemento o tema lo necesita.
Puede resolver el problema anticipando qué tipo de datos deben ingresarse razonablemente en cada formulario de entrada. En nuestro ejemplo anterior, buscamos un nombre. Podríamos desinfectar la entrada para asegurarnos de que solo aceptamos cartas. Si tiene un cuadro de selección o un grupo de radio que solo contiene algunas opciones, puede verificar los datos para asegurarse de que sea solo una de las opciones que permite.
Lo más importante que puede hacer para resolver el problema es preparar sus datos con la $wpdb->prepare()
.
Esta función toma una cadena de consulta preparada y una matriz de los argumentos que desea agregar a la consulta SQL.
$meta_key = 'celebrity_name'; $meta_val = 'Henry' $allhenrys = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM $wpdb->postmeta WHERE meta_key = %s AND meta_value = %s", $meta_key, $meta_val ) );
Todo el trabajo tiene lugar dentro de la función prepare()
. El primer parámetro, la consulta preparada, contiene el marcador de posición %s
en lugar de los valores reales. Esto se reemplaza por las otras variables analizadas, $meta_key
y $meta_val
.
Nota: es importante no tener un apóstrofe en su consulta que rodee los marcadores de posición, ya que la función los agregará por usted.
Este es un ejemplo simplificado, pero se puede usar el mismo proceso para cualquier consulta de base de datos y puede usar %s
para cadenas, %d
para enteros y %f
para flotantes.
También hay funciones para situaciones específicas, como agregar una nueva fila a la base de datos. Para este propósito, puede usar $wpdb->insert()
.
$wpdb->insert( "{$wpdb->prefix}my_custom_table", array( 'name' => 'Henry', 'userid' => 123, 'score' => 10, ), array( '%s', '%d', '%d', ) );
El uso de la función de preparación puede ayudar a prevenir la mayoría de los intentos de inyección de código SQL contra su producto.
Recuerde consultar la documentación de $wpdb. Algunas funciones escaparán de la entrada para usted; otros esperan que usted mismo escape de la entrada antes de analizar los datos en la función.
4. Usa nonces para proteger tus solicitudes
Usar el sistema nonce en WordPress puede ayudarte a prevenir muchos ataques. Un nonce en términos de seguridad es un número que se usa solo una vez. La idea es agregar este número único a todas las solicitudes que realice desde su código a la instalación de WordPress como una forma de verificar que esta solicitud es legítima.
Es un poco como tener una contraseña secreta que debes darle al portero para ingresar a un club.
Sin embargo, los nonces en WordPress son un poco diferentes: no son un número ni se usan solo una vez.
Técnicamente, los nonces en WordPress pueden contener letras minúsculas y números, y en lugar de usarse solo una vez , se regenera después de un período de tiempo.
La forma en que usa un nonce es que el código PHP que registra sus archivos JavaScript genera una pequeña combinación única de números y letras y los analiza para que su código JS pueda leerlos.
Cada vez que el código JavaScript envía una solicitud a su sitio web, envía ese fragmento de código, y si el código no coincide, su código debe ignorar la solicitud por completo.
Siempre es un poco más fácil con un ejemplo, así que veamos una forma sencilla de cargar un archivo .js en tu complemento siguiendo estos pasos:
Usando nonces en un complemento de WordPress
add_action('wp_enqueue_scripts', 'load_my_plugin_script'); function load_my_plugin_script() { // Register the script with all details and ensures it is loaded after jQuery wp_register_script('secure-plugin', plugin_dir_url( __FILE__ ). 'js/secure-plugin.js', array( 'jquery' ) ); // Here happens the magic, we add some details to an object that we can later reference and read from in our JS code. wp_localize_script( 'secure-plugin', 'plugin_ajax_object', array( 'nonce' => wp_create_nonce('secure-plugin-nonce') ) ); // Once that is done, we can now enqueue the script wp_enqueue_script('secure-plugin'); }
En esta función, le decimos a WordPress que cargue un archivo JavaScript. Primero, registramos el archivo que queremos cargar con wp_register_script()
.
Luego usamos wp_localize_script()
para analizar una matriz de datos, en particular "nonce" que contiene el nonce único que queremos usar en nuestro código JS. Recuerde, también puede enviar todo tipo de información adicional en esa matriz, pero en este ejemplo lo mantendremos simple.
Cuando envía una solicitud desde su archivo JavaScript, debe incluir ese nonce único. Hacer eso es fácil:
Uso de nonce del complemento de WordPress en un archivo JavaScript
jQuery(document).ready(function($) { $.ajax({ url: ajaxurl, // WP variable, contains URL pointing to admin-ajax.php type: 'POST', data: { 'action': 'get_custom_data', '_ajax_nonce': plugin_ajax_object.nonce, 'user_data': 'Some input from a user' }, success: function( response ) { // Here we do what happens if all is good - update the interface with a success message!? }, error: function( response ) { // Whooops, something went wrong! // console.log(response); } }); });
Como usamos wp_localize_script()
, podemos usar la variable plugin_ajax_object en JavaScript. Enviamos el nonce como una variable, _ajax_nonce
.
Verifique y verifique un nonce en un complemento de WordPress desde el código JavaScript
add_action('wp_ajax_get_custom_data', 'get_custom_data'); function get_custom_data() { // Ready for the magic to protect your code? check_ajax_referer('secure-plugin-nonce'); /** * That's it - the check_ajax_referer function verifies the nonce is correct or it dies and stops code execution if it fails. * * If you want to customize the error handling and perhaps return an error to your JS code, you could change the code to something like: * if ( ! check_ajax_referer( 'secure-plugin-nonce', false, false ) ) { * wp_send_json_error( 'Invalid nonce' ); * } */ $sanitized_user_data = sanitize_text_field( $_POST['user_data'] ); // ... continue with the rest of your plugin's function code ... }
La magia ocurre con la función check_ajax_referer()
que verifica el nonce y simplemente falla y detiene cualquier ejecución de código adicional si el nonce no coincide con lo esperado.
Puede personalizar aún más el código para devolver información específica al usuario sobre lo que sucedió.
El uso de nonces en su código es una forma rápida, fácil y efectiva de evitar muchos tipos de intentos de piratería. Eso no significa que pueda omitir todas las demás medidas de seguridad, pero ayuda a reducir los peores problemas.
¿Recuerdas lo que dije sobre nunca confiar en nadie? Eso nos lleva a otra forma de proteger su código: desinfectar.
Suscríbete y obtén una copia gratuita de nuestro libro.
11 técnicas comprobadas para aumentar su tasa de éxito de disputas de tarjetas de crédito en un 740%
Comparte con un amigo
Introduce la dirección de correo electrónico de tu amigo. Solo les enviaremos este libro por correo electrónico, honor del explorador.

Gracias por compartir
Impresionante: se acaba de enviar una copia de '11 técnicas comprobadas para aumentar la tasa de éxito de sus disputas de tarjetas de crédito en un 740 %' a . ¿Quieres ayudarnos a correr la voz aún más? Adelante, comparte el libro con tus amigos y colegas.
¡Gracias por suscribirte!
- Acabamos de enviar su copia de '11 técnicas comprobadas para aumentar su tasa de éxito en disputas de tarjetas de crédito en un 740 %' a .
¿Tienes un error tipográfico en tu correo electrónico? haga clic aquí para editar la dirección de correo electrónico y enviar de nuevo.
5. Desinfecte la entrada del usuario
En el ejemplo anterior, incluimos un dato adicional enviado desde JS a PHP. Cada vez que ingrese datos en su código, debe esperar que no sea seguro.
'user_data':'Some input from a user'
En este ejemplo, es una cadena simple, pero dado que estamos enviando datos a PHP, debemos asegurarnos de que la entrada no contenga ningún código que pueda explotarse en nuestro entorno PHP o almacenarse en la base de datos, lo que permite un mayor abuso.
Viene la sanitización. WordPress tiene una gama de funciones que toma cualquier entrada que le des y limpia los datos antes de devolvértelos.
En este ejemplo, usamos la función sanitize_text_field()
, pero WordPress viene con muchas funciones de desinfección adecuadas para diferentes tipos de datos.
Hay muchas otras excelentes funciones y métodos integrados en WordPress que puede usar para mantener su código seguro y evitar el abuso.
Nunca, nunca, debe usar ningún dato enviado a su código sin desinfectarlo primero. Consulte este artículo sobre los errores comunes de los desarrolladores de WordPress con más detalles sobre la desinfección y otros excelentes consejos prácticos.
Y eso me lleva al siguiente consejo, que la mayoría de los desarrolladores de WordPress han experimentado:
6. Recuerda que is_admin()
no es lo que piensas
Cuando empiece a pensar en proteger su código del mal, probablemente se topará con la función is_admin()
, y por el nombre, parece ser todo lo que necesita, y todo lo que necesita hacer es envolver su código con eso, y todo estará bien.
No, desafortunadamente no. La función is_admin()
solo detecta si el código se está ejecutando en el lado de administración del sitio web. No hace nada para detectar si su código está siendo ejecutado por un usuario o administrador normal.
Nunca lo notará si solo ingresa el código en su complemento porque lo más probable es que esté ejecutando el código en la interfaz de administración, y eso significa que el código simplemente se evaluará como true
, y dejará de pensar en ello y pasará a algo. demás.
La forma correcta de verificar si un usuario es administrador es verificar la capacidad del usuario:
if ( current_user_can( 'activate_plugins' ) ) { // Do your code here }
Hay diferentes capacidades para diferentes roles de usuario, por lo que tiene un control mucho más granular. En la mayoría de los casos, 'activate_plugins'
es lo que necesita solo para los administradores.
Si desea una forma de permitir que tanto los administradores como los editores hagan algo, debe probar la capacidad 'edit_pages'
.
7. Agrega rel=”noopener” o rel=”noreferrer” a tus enlaces
La vinculación a recursos externos es bastante normal, y el método de la vieja escuela de agregar target="_blank"
a esos enlaces tiene sentido porque no desea que sus usuarios abandonen la página de su plugin/tema.
Sin embargo, esto lo abre para lo que se llama Tabnabbing. Este es un problema de seguridad en el que un código JavaScript malicioso puede robar información de sus usuarios al abusar de la función window.opener
de JavaScript.
Prevenir esto puede ser tan simple como agregar rel="noopener"
a sus enlaces. La página a la que se vincula hoy podría estar bien, pero eso podría cambiar en el futuro.
rel=noopener
significa que la página a la que se vincula no puede acceder a la información ni obtener ningún control de su página.
rel=noreferrer
hace lo mismo y también le indica al navegador que no pase ninguna información de referencia a través del encabezado Remitente. Agregar rel="noreferrer"
significa que la página a la que se vincula no sabe dónde se origina su visitante.
Nota: estas dos propiedades no deben confundirse con rel=nofollow
, que está relacionado con el SEO.
8. Use HTTPS y tokens seguros con API de terceros
Como desarrollador, a menudo tendrá que integrar las API y es fundamental hacerlo de forma segura para proteger los datos que envía de un lado a otro.
Afortunadamente, ya existen estándares establecidos sobre cómo hacer esto de manera segura; uno de ellos es HTTPS. El uso de HTTPS introduce una capa de seguridad en la que se cifran todos los datos transmitidos.
Sin embargo, para garantizar que sus datos estén protegidos de los ojos espías, el uso de HTTPS no es suficiente.
Como explica este artículo de Ars Technica, "HTTPS no significa que sus datos estén seguros, solo significa que su conexión es segura".
Tokens seguros – JWT
Un estándar seguro para manejar la comunicación y las integraciones de API es usar JSON Web Tokens, JWT.
Un token seguro se crea al realizar una solicitud a un servidor que valida los detalles de inicio de sesión de un usuario y genera un token, una pequeña cadena que contiene datos, como nombre de usuario, ID, etc.
Cuando envía cualquier solicitud posterior al servidor, incluye ese token en la solicitud. Este token prueba que está autenticado y tiene acceso. Si el token es válido y no ha caducado, el servidor utilizará los detalles del usuario contenidos en el token y extraerá los datos solicitados.
El servidor puede procesar solicitudes rápidamente de esta manera, en comparación con el uso de una clave API, que requeriría buscar al usuario a través de esa clave antes de decidir procesar los datos. Con un token, puede incluir datos dentro del token sobre el usuario y guardar múltiples consultas de bases de datos.
Con la forma en que se genera y utiliza posteriormente un token seguro, no es posible crear tokens falsos ni manipular el contenido de un token. Solo es posible crear un token válido conociendo una clave secreta, que la empresa detrás de la plataforma mantendrá bien escondida.
Una nota muy importante para recordar es que los datos dentro de un token no están encriptados. Es imposible alterar el contenido del token sin invalidarlo, pero cualquier persona puede leer fácilmente los datos dentro de un token, por lo que no es un buen lugar para almacenar datos confidenciales.
Un buen recurso si desea profundizar más en los tokens y cómo funcionan es la Introducción a los tokens web JSON.
9. No utilice bibliotecas externas de CDN
Aunque puede ser tentador incluir cualquier biblioteca que pueda necesitar a través de cdnjs.com u otros CDN globales gratuitos, hay algunas desventajas.
En primer lugar, no tienes control sobre las bibliotecas y cualquier código malicioso que se cuela en los archivos que incluyes.
Aunque los CDN son generalmente estables y rápidos por definición, también están sujetos a más ataques. Si su código se basa en una biblioteca JS en un CDN bajo ataque, entonces su complemento y tema se cargarán muy lentamente o no se cargarán en absoluto.
Esto le sucedió a un sitio web de un cliente donde el CDN público que estaba usando un complemento en ese momento estaba agotando el tiempo de espera para los usuarios en algunas regiones, lo que hacía que la interfaz no se pudiera usar. Al final, tuve que cambiar el complemento para usar una copia local del script JS como una solución rápida.
El uso de una fuente externa de terceros también podría comprometer la privacidad. Será posible que la CDN registre todas sus IP de usuario; asegúrese de verificar la política de GDPR e informar a sus clientes.
En general, si utiliza proveedores de CDN de terceros de buena reputación, no enfrentará ningún problema, pero el enfoque más simple y confiable es distribuir la biblioteca JS incluida en su producto.
¿Sabías? WordPress viene con varias bibliotecas JS incluidas. Muchas de las bibliotecas JS más comunes que quizás desee usar vienen incluidas con WordPress. Estas bibliotecas cubrirán la mayoría de sus necesidades básicas.
Sugerencia para desarrolladores: solo cargue los archivos JS y CSS adicionales en las páginas específicas que necesita. Como desarrollador y usuario, no me gustan los complementos que ralentizan al administrador al cargar archivos JS y CSS innecesarios en cada página. No solo ralentiza otras páginas de administración, sino que también puede interferir con el diseño visual y hacer que algunas páginas de administración sean casi inutilizables. Por favor
También existen algunas herramientas que pueden ayudarlo a proteger su código, y una excelente herramienta que puede usar de forma gratuita es Coderisk.
10. Usa herramientas y servicios para analizar tu código
riesgo de código
Hay muchos servicios automatizados para ayudar a identificar problemas de código. Exakat, SonarSource y PHPStan, por nombrar algunos, y uno de mis favoritos, Coderisk.com, una manera fácil de encontrar algunos de los errores de seguridad más obvios en su código.
Esta empresa escanea todos los complementos de WordPress del repositorio público de WordPress.org. Su software puede escanear e identificar cientos de tipos diferentes de problemas de seguridad basados en diferentes estándares de codificación.
Según sus propias estadísticas, han escaneado más de 4 mil millones de líneas de código público hasta el momento, y hay bastantes problemas incluso con los mejores complementos.
Registrarse en su servicio gratuito es bastante simple: puede crear una cuenta gratuita y luego comenzar a reclamar sus complementos. Reclamar un complemento es tan simple como tomar una sola línea de código que coloca en su archivo readme.txt la próxima vez que implemente una nueva versión.
Esto le permite acceder a su último escaneo de su complemento y, en su interior, tienen información y detalles específicos sobre cada problema, con enlaces directos a su código.
Tenga en cuenta que este es un servicio gratuito, por lo que es posible que no actualicen el escaneo de su complemento con tanta frecuencia, pero una vez que reciba una notificación, vale la pena verificar su código, ya que es posible que haya introducido un error desde la última vez que revisó tu codigo.
La interfaz es bastante fácil de navegar una vez que aprendes a usarla, y el sistema es muy útil, ya que te brinda instrucciones muy fáciles de entender sobre lo que está mal que te ayuda a rastrear el error.
También hay muchas maneras de filtrar los errores, y puede marcar cada problema como solucionado o muchas otras opciones para ayudarlo a obtener rápidamente una descripción general de todos los problemas.
Nota: Si nunca ejecuta Coderisk (o cualquier otra herramienta en su categoría) en su código, no se preocupe por la cantidad de problemas sospechosos sobre los que recibirá advertencias. Estas herramientas pueden generar una buena cantidad de falsos positivos ya que solo analizan el código sin entender la lógica del negocio. Utilice el resultado de la herramienta como una sólida lista inicial de elementos para revisar.
PHP_CodeSniffer
Otra gran herramienta para verificar su código es PHP_CodeSniffer. PHPCS consta de dos scripts, PHPCS que verifica su código y le informa de los errores y PHPCBF que puede solucionar automáticamente una gran variedad de problemas que identifica PHPCS.
Usar PHPCS es muy fácil de usar desde la línea de comandos una vez que lo tienes instalado. Esta herramienta no evitará que aparezcan problemas de seguridad en su código, pero puede eliminar errores de codificación simples que hacen que sea mucho más difícil abusar de problemas mayores.
También es posible integrar PHPCS directamente en su editor, como Sublime Text y Visual Code. De esta manera, puede ver fácilmente cualquier error y corregirlo rápidamente en su IDE.
No importa si trabaja en equipo o como desarrollador único, vale la pena usar un sistema automatizado, ya que es una manera fácil de eliminar los problemas básicos de seguridad que de otro modo podría pasar por alto.
El uso de un sistema automatizado para escanear su código en busca de problemas de seguridad no es un método seguro para detectar todos los errores, pero puede ayudarlo a identificar los errores más obvios.
11. No copie y pegue el código de la web sin una revisión adecuada
Mantener su producto WP lo más seguro posible debe ser un proceso continuo, no solo de vez en cuando. Cuando introduce nuevas funciones o elimina código, también puede introducir nuevos problemas de seguridad.
Google no siempre es tu amigo. Como desarrollador, está acostumbrado a buscar ejemplos de código en Internet para inspirarse, o simplemente reescribir fragmentos aquí y allá si es perezoso.
La mayoría de las piezas de código que encuentra en Internet rara vez están listas para usar en un entorno de producción seguro y están pensadas como un ejemplo de cualquier problema de codificación que esté tratando de solucionar. El uso de estos fragmentos de código a ciegas y sin revisión puede generar problemas muy rápidamente.
Hay mucho que hacer como desarrollador de WordPress, y solucionar un problema de seguridad urgente en su complemento con miles de instalaciones no debería ser uno de ellos.
Ten en cuenta que tu reputación está en juego
Si no está prestando atención a la seguridad de su complemento o tema, está poniendo en juego a sus usuarios, sus negocios, su negocio y su reputación. ¡Eso es mucho tiempo y dinero potencialmente desperdiciados!
Las vulnerabilidades de seguridad pueden tener un impacto masivo en la confianza que los clientes depositan en su marca o productos. El ejemplo anterior de Loginizer demuestra que incluso las vulnerabilidades de seguridad más vergonzosas pueden ocurrirles a los mismos desarrolladores de complementos de seguridad. Y los otros ejemplos sobre el fraude electoral y los ataques del gobierno nos dicen que cualquiera es vulnerable.
Cuando descubra una vulnerabilidad, actúe rápidamente para resolverla y siga las mejores prácticas para anunciar el problema públicamente (si es necesario) junto con la publicación de una solución.
Si se mantiene a la vanguardia en lo que respecta a la comunicación y los problemas de "relaciones públicas" que pueden surgir de una vulnerabilidad, puede evitar algunos dolores de cabeza gigantes y aumentar su reputación en lugar de dañarla.
¡Gracias por leer!
Puede ser desalentador investigar todas las cosas que necesita hacer cuando no sabe qué buscar para empezar, y puede ser difícil encontrar la información correcta. Si no tiene ni idea de por dónde empezar, debería considerar que un experto en seguridad de WP revise su producto (también hago revisiones de seguridad).
Es tentador ahorrar dinero o tiempo para una revisión de seguridad, pero el costo de no asegurar su producto tanto como sea posible puede ser aún mayor a largo plazo.
Estas son solo algunas de las formas en que puede y debe proteger su producto de WordPress contra el abuso. Si tienes alguna duda, recuerda: no confíes en nadie.