En un artículo previo explicamos cómo deshabilitar REST API por completo en WordPress. Sin embargo, en algunos casos, puede ser más útil bloquear solo ciertos endpoints, como los de usuarios.
¿Qué es la REST API de WordPress y por qué deberías deshabilitarla en ciertos casos?
La REST API es una funcionalidad de WordPress que permite la comunicación entre el sitio web y aplicaciones externas, facilitando la gestión de contenido, la integración con otros servicios y el desarrollo de aplicaciones personalizadas. Sin embargo, esta apertura también puede representar un riesgo de seguridad, ya que ciertos endpoints exponen información sensible sobre los usuarios del sitio.
Uno de los endpoints más problemáticos es el de usuarios, que permite a cualquier persona obtener información parcial de los perfiles registrados. Aunque en muchos casos esto no parece un problema grave, en realidad puede ser utilizado por atacantes para ejecutar ataques de fuerza bruta, recopilando nombres de usuario y probando combinaciones de contraseñas para acceder al sitio.
¿Cómo comprobar si el endpoint de usuarios está accesible en tu sitio?
Si quieres verificar si tu sitio WordPress expone información de usuarios a través de la REST API, simplemente ingresa la siguiente URL en tu navegador, reemplazando tusitio.com
por la dirección real de tu web:
https://tusitio.com/wp-json/wp/v2/users
Si la API está habilitada sin restricciones, aparecerá un listado con los nombres de usuario registrados en el sitio. Esto constituye un posible punto de entrada para ataques, lo que pone en riesgo la seguridad de tu página. Realizar este análisis es fundamental para decidir si es necesario deshabilitar REST API en WordPress.
En la siguiente imagen se muestra un ejemplo del resultado que podrías obtener al acceder a este endpoint sin restricciones.
¿Por qué deshabilitar el endpoint de usuarios en la REST API de WordPress?
Deshabilitar la REST API en su totalidad no siempre es la mejor opción, ya que algunas funcionalidades y plugins dependen de ella para operar correctamente. Sin embargo, bloquear el acceso a ciertos endpoints, como el de usuarios, es una medida recomendada para reducir el riesgo de ataques sin afectar el funcionamiento normal del sitio.
En los siguientes apartados, te explicaremos cómo puedes deshabilitar REST API de forma selectiva, asegurando que los datos sensibles no sean accesibles por usuarios no autorizados.
En este listado se revela el nombre de usuario, lo que podría ser utilizado por un atacante para llevar a cabo un ataque de fuerza bruta, intentando adivinar la contraseña y acceder al sitio.
Código PHP para deshabilitar REST API de WorPress:
La forma más sencilla de bloquear el endpoint de usuarios en la REST API de WordPress es eliminándolo directamente. Para ello, puedes agregar el siguiente código en el archivo functions.php de tu tema hijo o utilizar un plugin de Snippets:
function deshabilitar_rest_api_usuarios($endpoints) {
if (isset($endpoints['/wp/v2/users'])) {
unset($endpoints['/wp/v2/users']);
}
if (isset($endpoints['/wp/v2/users/(?P<id>[\d]+)'])) {
unset($endpoints['/wp/v2/users/(?P<id>[\d]+)']);
}
return $endpoints;
}
add_filter('rest_endpoints', 'deshabilitar_rest_api_usuarios');
Este código elimina el acceso al listado de usuarios y a los detalles de cada usuario a través de la REST API, reduciendo así el riesgo de exposición de datos.
En el código anterior:
- Se utiliza el hook
rest_endpoints
para modificar los endpoints disponibles en la REST API de WordPress. - Dentro de la función, se verifica si el endpoint corresponde a usuarios, tanto el listado general como el acceso a usuarios individuales. Para esto último, se emplean expresiones regulares.
- Si se detecta alguno de estos endpoints, se eliminan del array utilizando
unset()
. - Finalmente, la función devuelve la lista de endpoints restantes, asegurando que los de usuarios ya no estén disponibles.
Después de aplicar este código, al intentar acceder a la URL del endpoint de usuarios, obtendremos un mensaje de error similar al siguiente:
Restricción del endpoint de usuarios en la REST API mediante .htaccess
Otra forma de bloquear el acceso al endpoint de usuarios es utilizando reglas en el archivo .htaccess. Para ello, agrega el siguiente código:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/wp-json/wp/v2/users [NC]
RewriteRule ^(.*)$ - [F,L]
</IfModule>
Explicación del código:
- Se asegura que el módulo
mod_rewrite
esté habilitado. - Se activa
RewriteEngine
para gestionar redirecciones y bloqueos. - La condición
RewriteCond
verifica si la URL solicitada coincide con el endpoint de usuarios (/wp-json/wp/v2/users
). - Si se cumple la condición, la regla
RewriteRule
devuelve un error 403 Forbidden, impidiendo el acceso.
Al aplicar esta restricción, cualquier intento de acceder al endpoint desde un navegador o una herramienta externa será bloqueado.
Resumen (deshabilitar REST API parcialmente)
Como has visto, es posible deshabilitar REST API parcialmente en WordPress para mejorar la seguridad sin afectar su funcionamiento completo. En este artículo, exploramos dos métodos para bloquear el endpoint de usuarios:
- Mediante código PHP, eliminándolo con el hook
rest_endpoints
. - A través del archivo .htaccess, restringiendo el acceso con reglas de reescritura.
Si estás profundizando tus conocimientos en WordPress y necesitas un servicio de hosting que se adapte a tus necesidades, te invitamos a conocer los planes de WordPress Hosting que DonWeb tiene para ofrecerte.