Blog sobre desarrollo WordPress en Español Desarrollo WordPress en Español
Seguridad WordPress

Evitar la enumeración de usuarios en WordPress: bola extra

Hace unos meses escribí en dos entradas cómo evitar la enumeración de usuarios o user enumeration (parte 1 y parte 2). Ahora viene la bola extra: Evitar la enumeración de usuarios en WordPress a través de la REST API.

Como probablemente sabrás, WordPress integró en su core la REST API. El desarrollo de la REST API va a ser uno de los pilares fundamentales de evolución de WordPress, junto con el editor y el personalizador. No lo digo yo, lo dijo el propio Matt Mullenweg en el pasado State of the Word.

 

¿Cómo puedes listar los usuarios de un sitio WordPress a través de la REST API?

Pues es muy sencillo, basta con añadir /wp-json/wp/v2/users a un dominio de una web hecha en WordPress. Por ejemplo: http://eldominioquesea.com/wp-json/wp/v2/users y te mostrará algo tipo esto:

Simplemente con esta acción ya has obtenido el username de un sitio, o lo que es lo mismo: el 50% de lo que necesitas para acceder al escritorio de WordPress de una web.

 

¿Cómo evitamos listar usuarios con la REST API?

Pues por poder hacerlo podemos hacerlo, pero la pregunta es: ¿debemos hacerlo? Quizá hoy en día aún se puede decir que la REST API está dando sus primeros pasos, pero parece evidente que de aquí en adelante muchos desarrolladores de temas y plugins empezarán a hacer mucho uso de ella, por no hablar del core del propio WordPress.

Por lo tanto, antes de evitar listar los usuarios comprueba que ni tú, ni tu tema, ni tus plugins hagan uso de ella. Puestos ahora a deshabilitar la REST API tienes 2 opciones: hacerlo total o parcialmente. Y dentro de estas 2 opciones tienes 2 alternativas: añadiendo un pequeño código a tu functions.php o a través de plugins.

Para deshabilitar la REST API totalmente a partir de la versión 4.7 de WordPress bastaría con añadir este código al functions.php de tu tema:

Para deshabilitar la REST API parcialmente, es decir, en este caso deshabilitaremos los endpoints de users, el código que debemos añadir es el siguiente:

En cualquiera de estos dos casos podríamos enfocar esta restricción por ejemplo para usuarios no logueados, bastaría con añadir la condición if ( ! is_user_logged_in() ). O permitir el acceso a una determinada IP, o lo que se nos pueda ocurrir. Al hacerlo mediante código tenemos más control y podemos personalizarlo según nuestras necesidades.

Si te decantas por la opción vía plugins, para deshabilitar la REST API totalmente dispones en el repositorio de plugins de WordPress de uno llamado Disable REST API. Para el supuesto de querer deshabilitar sólamente los endpoints de users, dispones de un plugin llamado SMNTCS Disable REST API User Endpoints.

Puede que también te interese

Eliminar código innecesario del wp_head
Eliminar código innecesario del wp_head
Por defecto WordPress incluye una serie de meta-tags en la cabecera de nuestro sitio a través de la función wp_head(). La mayoría de estas etiquetas…
Cómo evitar la actualización de plugins concretos en WordPress
Cómo evitar la actualización de plugins concretos en WordPress
Si has hecho desarrollos a medida en WordPress seguramente te has encontrado en alguna ocasión con la siguiente situación: Te han pedido un desarrollo en…
Establecer la primera imagen de un post como destacada
Establecer la primera imagen de un post como destacada
Cuando escribimos una entrada o página en WordPress, por defecto nos deja establecer una imagen destacada o thumbnail: Esta imagen destacada suele usarse por ejemplo…
Mejora la puntuación de Google PageSpeed Insights: Eliminar el JavaScript que bloquea la visualización del contenido de la mitad superior de la página
Mejora la puntuación de Google PageSpeed Insights: Eliminar el JavaScript que bloquea la visualización del contenido de la mitad superior de la página
1. Optimizar imágenes 2. Minificar CSS y JS 3. Especificar caché de navegador 4. Habilita la compresión 5. Reducir el tiempo de respuesta del servidor…