Por si no lo sabías, tanto WordPress como muchos plugins, e incluso posiblemente tu tema activo, realizan constantemente peticiones HTTP externas, a sus servidores, para múltiples y diversos objetivos.
Por ejemplo, WordPress comprueba con frecuencia si hay actualizaciones de WordPress, plugins, temas o traducciones, conectando con https://api.wordpress.org. Los plugins de seguridad realizan comprobaciones de tu sitio frente a sus bases de datos de listas negras y contraseñas inseguras, otros plugins comprueban qué tipo de licencia tienes, qué versión estás usando, o incluso recopilan información de tu instalación, y también los temas en ocasiones hacen este tipo de consultas.
¿Sabes lo peor de todo?, que casi nunca te piden permiso, lo hacen en segundo plano, sin avisarte, ni darte la opción de decidir si quieres que suceda ese tipo de telemetría, sin control alguno por tu parte.
¿Qué problema hay con las peticiones HTTP externas?
Estas peticiones HTTP externas tienen todo tipo de posibles implicaciones para ti y tu web, incluso para tus visitantes…
- Si estás haciendo desarrollo local ralentizan tu trabajo con peticiones que no se van a poder completar, si estás desconectado.
- Ralentizan la gestión administrativa de tu web, al estar produciéndose consultas en segundo plano, que consumen recursos.
- En consecuencia, consumen recursos adicionales de tu servidor, que en gran parte no aportan nada a tu web.
- Ralentizan la carga de tus páginas.
- Recopilan datos en servidores externos, que no puedes gestionar y, en consecuencia, no puedes garantizar la privacidad de tus usuarios, impidiéndote cumplir el RGPD y regulaciones de privacidad.
- Casi nunca informan de esta recopilación de datos, ni de su uso, almacenamiento, etc., en sus políticas de privacidad, ni te avisan al instalar el plugin, tema, etc.
Cómo impedir la telemetría de consultas HTTP externas en WordPress
Si tienes claro que no quieres que este tipo de peticiones ocurran en tu web sin tu consentimiento, o al menos sin tu conocimiento, hay varias maneras de controlarlas.
Vigila las peticiones HTTP externas
El primer paso es saber qué está pasando, qué tipo de telemetría ocurre en segundo plano en nuestra web, qué peticiones HTTP externas se están realizando en nuestro WordPress.
Para ello nos podemos ayudar del plugin Log HTTP Requests.
Este plugin tiene una sola utilidad, y es registrar todas las peticiones HTTP externas que suceden en tu web, así como las solicitudes de admin AJAX, y mostrártelas en la página Herramientas → Log HTTP Requests. No ofrece ningún método para impedir estas peticiones pero sí te da el conocimiento que necesitas para poder actuar en consecuencia.
Vigilar y bloquear archivos y servidores que realicen peticiones HTTP externas en WordPress
Para dar un paso más, para no solo monitorizar las conexiones salientes, sino también poder bloquear a voluntad aquellas que no queramos, tenemos Snitch.
Este plugin, aunque hace tiempo que no se actualiza, permite vigilar y regular todo el tráfico de datos saliente de tu web, y funciona perfectamente.
Desde su menú (Snitch) puedes ver todas las conexiones salientes que ocurren en WordPress, pero con el plus de que al pasar el cursor sobre cualquier de ellas, se mostrarán unos enlaces desde los que podrás bloquear:
- El archivo que realiza la conexión saliente.
- El servidor a dónde va dirigida la petición.
Lo único que no me gusta de este plugin es que también registra, por defecto, todas las llamadas del cron de WordPress, pero puedes evitar que lo haga añadiendo al archivo wp-config.php la siguiente constante:
define('SNITCH_IGNORE_INTERNAL_REQUESTS', true);
Guarda los cambios y Snitch dejará de vigilar todas las peticiones internas, no solo el cron, y se centrará únicamente en mostrar las externas.
Bloquear todas las peticiones HTTP externas (telemetría) de WordPress
Para finalizar, si no tienes tiempo, ganas ni conocimiento como para andar revisando registros de telemetría, ni para decidir qué sale y qué no, puedes sacar la artillería pesada y bloquear todas las peticiones HTTP externas, todas las consultas salientes de tu WordPress.
Hay 3 maneras de conseguirlo…
Con un plugin
Si eres de plugins (yo también) tienes el veterano Disable Telemetry, cuya única funcionalidad, que no es poco, es desactivar cualquier tipo de petición HTTP externa a la API de WordPress, usando la función siguiente:
add_action( 'pre_http_request', __NAMESPACE__ . '\\disable_telemetry_init', 1, 3 );
function disable_telemetry_init( $short, $args, $url ) {
return ( false !== stripos( $url, 'api.wordpress.org' ) );
}
¿Funciona?, perfectamente, ¿es suficiente?, tampoco.
Tiene 2 grandes defectos, y el primero es ese, que solo sirve para la telemetría de WordPress, la que revisa actualizaciones y otras funcionalidades. El segundo defecto es que no se actualiza hace mucho, y para algo tan relevante, y el poco código que requiere, pues ¿qué quieres que te diga?, que mejor no depender de él.
Si quieres algo más completo, el mismo desarrollador tiene otro plugin en GitHub, Airplane Mode, que además de la telemetría de WordPress también impide otras peticiones HTTP de plugins tan populares como Jetpack, BuddyPress y otros, además de impedir la comprobación de actualizaciones.
Con una función
Como te decía antes, ya puestos, nosotros mismos podemos añadir una función que impida la telemetría, añadiendo estas líneas a nuestro archivo functions.php del tema activo, o con cualquier otro método de nuestra elección:
add_filter( 'pre_http_request', '__return_true', 100 );
Es solo una línea y hace el trabajo, aunque …
La verdad es que lo hace demasiado bien, y también impide que funcione el cron de WordPress, y no queremos eso ¿verdad?
La constante 007
El mejor método de impedir peticiones HTTP externas de WordPress, esos espías que trabajan sin que te enteres, que aúne eficacia y control es añadiendo unas líneas al archivo wp-config.php, como en este ejemplo:
/* Bloquear todas las solicitudes HTTP externas */ define( 'WP_HTTP_BLOCK_EXTERNAL', TRUE ); /* Dominios no bloqueados por la constante anterior */ define( 'WP_ACCESSIBLE_HOSTS', 'dominio1.com, dominio2.com' );
Con la primera línea se bloquean todas las peticiones HTTP externas, y solo las externas, sin impedir el funcionamiento normal del cron de WordPress, y en la segunda podemos añadir una serie de servidores a los que sí permitiremos realizar telemetría, peticiones HTTP externas.
Espero que esta guía te haya sido de utilidad, tanto para conocer algo más sobre tu web WordPress y todo lo que pasa en la sala de máquinas, como para aprender a tener el control total de lo que se mueve en nuestra instalación.
¿Te gustó este artículo? ¡Ni te imaginas lo que te estás perdiendo en YouTube!









Buenas Fernando, como cada día aquí.
El articulo de hoy me hecho pensar y buscar más información sobre el tema de peticiones HTTP externas. Quizá no busque bien pero no no encuentro información detallada como la tuya.
Si que es cierto que el resultado puede merecer la pena, pero en el proceso que has descrito, utilizamos 3 Complementos. Personalmente soy reacio a añadir complementos y complementos a mi sitio, ¿ conoces más documentación sobre peticiones HTTP externas en WordPress donde pueda indagar?
tambien debo decir, que en mi sitio utilizo la API Res de WooCommerce para comunicar mi sitio con el almacén que recibe los pedidos que se hacen, lo cual me hace tambien que pensar en esto.
Si tienes un ratito libre, si no tampoco pasara nada, podrías decirme algo sobre esto o decirme donde buscar información? Tu experiencia te hara buscar recursos de manera más efectiva.
felicidades y gracias por este nuevo articulo informativo
Hola Miguel, pues mira…
Los plugins son código, hecho por programadores, que puedes leer, y ver lo que hacen y llevan, así que no le veo una ventaja competitiva al código, de hecho hay ciertas desventajas, como que te tengas que ocupar tú de estar pendiente de compatibilidades, en vez del autor del plugin.
Dicho esto, de un plugin cuento el código y hay una función que viene a hacer lo mismo, y todo son funciones y variables estándar de WordPress que están en la documentación, igual que las constantes para wp-config.php, yo todo lo he encontrado en la documentación, y buscando plugins, para quien prefiere esta opción.
En cualquier caso, en mi opinión, el mejor método es el último, donde puedes bloquear todo, excepto las excepciones que tú definas (analítica, woocommerce, lo que sea)
Gracias por la explicación, y me has hecho de pensar con tu buena lógica. Sin duda es buen razonamiento que tendré en cuenta a la hora de añadir mi próxima funcionalidad.
¡Hasta el Post de mañana…!
Hola Fernando
Oye, este método me ha traído recuerdos de aquellos tiempos cuando nos tocaba configurar IPTABLES.
Era como ir a lo seguro: primero bloqueábamos todo a cal y canto y luego íbamos abriendo los puertos que necesitábamos, uno por uno. ¡Era un método que no fallaba! Me parece que es una buena táctica a tener en mente.
¡Un abrazo!
Salu2…
De hecho debería ser lo habitual, empezar de cero e ir dando permisos. Vivimos en un mundo de superadmins con todo activo por defecto, y así pasa
Del planteamiento que haces al principio del artículo deduzco que bloquear esas peticiones externas impedirá la comprobación de la existencia de actualizaciones en plugins, temas y el mismo wordpress.
¿Es esa una buena idea? Contradice todo lo que creía hasta ahora
Si tienes la rutina de comprobar actualizaciones no tiene porqué pasar nada.
Buenas tardes Fernando y saludos para tí y tu equipo.
Sobre el artículo, que me parece magnífico, tengo una duda.
Instalar el Airplane en WP, puede afectar a la lectura de Google Analytics y a la API de Facebook, para la analítica de la web y todo lo que conlleva el análisis, tanto de los visitantes como el acceso de las respectivas APIs?
Muchas gracias por adelantado y felicidades siempre por tu gran ayuda sobre WP.
Un saludo.
Decidí utilizar el mejor método de impedir peticiones HTTP externas de WordPress, esos espías que trabajan sin que te enteres, que aúne eficacia y control, añadiendo unas líneas al archivo wp-config.php
Parecía que todo estaba bien, hasta que unos días después intenté añadir un nuevo plugin, y se produjo un error:
«Ha ocurrido un error inesperado. Puede que algo vaya mal con WordPress.org o la configuración de este servidor. Si sigues teniendo problemas, por favor, prueba en los foros de soporte».
Tampoco me permitía reinstalar WP.
Con la ayuda del soporte del hosing comprobamos que no se trata del servidor… y también probé desactivando todos los plugins… Ya me disponía a buscar tutoriales para trasladar todo el contenido a una instalación nueva… y recordé que recientemente había añadido este código:
/* Bloquear todas las solicitudes HTTP externas */
define( ‘WP_HTTP_BLOCK_EXTERNAL’, TRUE );
Por algún motivo, a mí no me funciona…
SaLuz
Otro detalle que puedo aportar es que también fallaba «Super Page Cache for Cloudflare», pues con la sesión abierta, al final de las url dejó de aparecer «?swcfpc=1»
el codifgo completo que estoy usando y funciona todo bien es
define(‘WP_HTTP_BLOCK_EXTERNAL’, true);
define(‘WP_ACCESSIBLE_HOSTS’, ‘api.wordpress.org, *.wordpress.org’);
Ademas de esto e desactivado el cron y e colocado para que ya no lo ejecute wordpress sino linux para que no afecte a le velocidad de mi web. y lo hace cada 15 min, yo tengo un wordpress multisite y necesito que mi sitio base sea lo mas rapido y potente y seguri posible, gracias por el post amigo mi web es dogshort spot com
Gracias frank me alegro que hayas dado con la configuración adecuada a tu sitio 😉