Lista de hacks en WordPress

Reading time aprox: 8 minutes, 45 seconds

Lista de hacks en WordPress.

Ahora que está de moda usar el palabro «hackear» para todo, vamos a proporcionar unos cuantos hacks (truquillos) para WordPress.

La intención por supuesto, es solamente informativa; no es necesario usar todos los trucos disponibles, pero al menos ahora sabes que existen 😊

Lista de hacks en WordPress

Estos «hacks» puedes añadirlos en tu archivo functions.php.

Asegurate de que son necesarios, y ten en cuenta que cualquier fallo en la correcta codificación, puede deshabilitar completamente tu sitio web.

SoloWordPress no se puede hacer responsable por el uso de esta información, este listado se hace a título informativo y educacional. Se recomienda no implementar ninguno de estos parches, si no sabes exactamente lo que estás haciendo.

Desactivar la carga de Google Fonts

Si usas fuentes locales en tu servidor, y no quieres que los Temas accedan al repositorio de fuentes de Google, este parche es para ti.

  function slwp_remove_google_fonts ($href) {
    if(strpos($href, "//fonts.googleapis.com/") === false) {
      return $href;
    }
  }
  add_filter( 'style_loader_src', 'slwp_remove_google_fonts', 15, 1 );

Este código es útil para Temas «multipurpose» sobrecargados.

Cargar Google fonts en asíncrono

Durante la carga asíncrona se cargan los estilos (CSS) y los scripts en paralelo. Por el contrario, durante la carga síncrona se cargan de forma secuencial.

Este script debes insertarlo en la cabecera del sitio web, entre las etiquetas <head></head> del Tema activo, o mediante algún plugin para meter scripts en la cabecera:

  function mi_codigo_slwp() {
    <script type="text/javascript">
      WebFontConfig = {
        google: { families: [ 'Noto+Serif:400,400italic,700,700italic' ] } // Ejemplo
      };
      (function() {
        var wf = document.createElement('script');
        wf.src = 'https://ajax.googleapis.com/ajax/libs/webfont/1/webfont.js';
        wf.type = 'text/javascript';
        wf.async = 'true';
        var s = document.getElementsByTagName('script')[0];
        s.parentNode.insertBefore(wf, s);
      })();
    </script>
  }
  add_action( 'wp_head', 'mi_codigo_slwp', 10 );

Recuerda que debes personalizarlo con las fuentes que tú utilices (la línea número 4, con el comentario: // Ejemplo).

Ten en cuenta que al realizar la carga en paralelo, si por cualquier motivo tu servidor no conecta con el servidor de Google Fonts, la carga de las fuentes puede no producirse, lo que afectará a cómo se presenta la pagina.

Lista de Hacks en WordPress

Eliminar y desactivar los query strings

Si usas un sistema de cache o de CDN en tu sitio web, puede interesarte este parche.

Se trata de eliminar la identificación de versión de los recursos (los query string) que aparecen al final de la URI1 de los mismos.

Por ejemplo: https://misitio.xxx/javascript/jquery.js?ver=1.12.4

  function slwp_remove_script_version( $src ) {
      $parts = explode( '?ver', $src );
      return $parts[0];
    }
  add_filter( 'script_loader_src', 'slwp_remove_script_version', 15, 1 );
  add_filter( 'style_loader_src', 'slwp_remove_script_version', 15, 1 );

Eliminar el enlace de respuesta a comentarios (comentarios anidados)

El javascript comment-reply.min.js que carga WordPress, es el encargado de que, cuando respondemos a un comentario, podamos contestar al que nosotros queramos.

Esto es, en parte, con lo que se hacen los comentarios anidados en los blogs creados con WordPress.

Podemos desactivar el comment-reply.min.js (si no lo utilizamos) con el siguiente código en el functions.php del Tema activo o, mejor, de tu tema hijo:

  function slwp_com_clean_header_hook(){
    wp_deregister_script( 'comment-reply' );
           }
  add_action('init','slwp_com_clean_header_hook');

Recuerda que esto no va a afectar a la posibilidad de que tus lectores dejen comentarios en WordPress, pero sí a que puedan responder a los comentarios que previamente han dejado otros lectores.

Eliminar jQuery Migrate en WordPress

«jQuery Migrate» es una librería dependiente de «jQuery» que sirve como transición para versiones antiguas (jQuery 1.9 y anteriores).

Si no la utilizas, ya que tienes la certeza de que todos los plugins que tienes utilizan las últimas versiones de jQuery, puedes desactivarlo con el siguiente código en el archivo functions.php:

  function slwp_isa_remove_jquery_migrate( &$scripts ) {
   if( !is_admin() ) {
     $scripts->remove( 'jquery' );
     $scripts->add( 'jquery', false, array( 'jquery-core' ), '1.12.4' );
   }
  }
  add_filter( 'wp_default_scripts', 'slwp_isa_remove_jquery_migrate' );

Cargar jQuery desde el CDN de Google

Este «hack no lo verás usualmente en el archivo functions.php, sino como parte de algun plugin, pero también es válido aquí.

«Google y «CloudFlare ponen a disposición de los administradores de sitios web un CDN2 para ciertas librerías, entre ellas «jQuery», la librería Javascript más utilizada.

Puedes cargar jQuery desde el CDN de Google con este código en el functions.php:

  
  function slwp_jquery_google () {
    if (is_admin()) {
      return;
    }
   
    global $wp_scripts;
    if (isset($wp_scripts->registered['jquery']->ver)) {
      $ver = $wp_scripts->registered['jquery']->ver;
                  $ver = str_replace("-wp", "", $ver);
    } else {
      $ver = '1.12.4';
    }
   
    wp_deregister_script('jquery');
    wp_register_script('jquery', "//ajax.googleapis.com/ajax/libs/jquery/$ver/jquery.min.js", false, $ver);
  }

  add_action('init', 'slwp_jquery_google');

Y si quieres cargarlo desde el CDN de CloudFlare puedes hacerlo con este código:

  function slwp_jquery_cloudflare () {
    if (is_admin()) {
      return;
    }
   
    global $wp_scripts;
    if (isset($wp_scripts->registered['jquery']->ver)) {
      $ver = $wp_scripts->registered['jquery']->ver;
                  $ver = str_replace("-wp", "", $ver);
    } else {
      $ver = '1.12.4';
    }
   
    wp_deregister_script('jquery');
    wp_register_script('jquery', "//cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.min.js", false, $ver);
  }
  add_action('init', 'slwp_jquery_cloudflare');

Como ves, aparte del nombre de la función, el único cambio es la URL3 invocada:

"//ajax.googleapis.com/ajax/libs/jquery/$ver/jquery.min.js"

para Google o,

"//cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.min.js"

para Cloudflare.

Evidentemente, en ambos casos puedes modificarlo para personalizar la versión de jQuery que quieres cargar desde el CDN.

Lista de Hacks en WordPress

Desactivar el REST API de WordPress

En la gran mayoría de los casos, no necesitamos el «REST API» de WordPress para nada y podemos desactivarla para evitar que sea el foco de ataques indeseados.

Si queremos desactivar el REST API, podemos hacerlo con el siguiente código en el archivo functions.php:

  function slwp_disable_rest_api( $access ) {
    return new WP_Error( 'rest_disabled', 'El REST API esta desactivado', array( 'status' => rest_authorization_required_code() ) );
  }
  add_filter( 'rest_authentication_errors', 'slwp_disable_rest_api' );

Es necesario asegurarse de que no va a interferir con ningún plugin o funcionalidad que vayamos a utilizar.

El REST API puede ser objeto de ataques de fuerza bruta que pueden resultar no sólo en una drástica disminución del rendimiento.

Desactivar el REST API para usuarios NO autentificados

Desactivar el acceso al «REST API» para usuarios que NO estén autentificados, es una opción para los sitios web que, por algún plugin, no puedan desactivarlo por completo.

Con este código en el archivo functions.php, podemos hacer que el REST API no funcione para usuarios NO autentificados:

  function slwp_disable_rest_api_no_logged($result) {
    if ( ! empty( $result ) ) {
      return $result;
    }
    if ( ! is_user_logged_in() ) {
      return new WP_Error( 'rest_not_logged_in', 'No está conectado.', array( 'status' => 401 ) );
    }
    return $result;
  }
  add_filter( 'rest_authentication_errors', 'slwp_disable_rest_api_no_logged' );

Los plugins podrán seguir accediendo y los bots externos no tendrán acceso.

Lista de Hacks en WordPress

Desactivar widgets de sidebar y footer en WordPress

WordPress, de forma predeterminada, trae una serie de widgets nativos que podemos utilizar en ciertas zonas como el sidebar o en el footer.

Lista de Hacks en WordPress - Pagina de Widgetstweaks wordpress
Lista de Hacks en WordPress – Pagina de Widgets

Este código es el que tienes que utilizar para desactivar los widgets. Simplemente debes añadir esto a tu archivo functions.php:

  function slwp_remove_widgets() {
    //ON  unregister_widget('WP_Widget_Pages');
      unregister_widget('WP_Widget_Calendar');
      unregister_widget('WP_Widget_Archives');
      unregister_widget('WP_Widget_Links');
      unregister_widget('WP_Widget_Media_Audio');
    //ON  unregister_widget('WP_Widget_Media_Image');
      unregister_widget('WP_Widget_Media_Video');
      unregister_widget('WP_Widget_Media_Gallery');
      unregister_widget('WP_Widget_Meta');
      unregister_widget('WP_Widget_Search');
      unregister_widget('WP_Widget_Text');
      unregister_widget('WP_Widget_Categories');
      unregister_widget('WP_Widget_Recent_Posts');
      unregister_widget('WP_Widget_Recent_Comments');
      unregister_widget('WP_Widget_RSS');
      unregister_widget('WP_Widget_Tag_Cloud');
      unregister_widget('WP_Nav_Menu_Widget');
      unregister_widget('WP_Widget_Custom_HTML');
  }
  add_action( 'widgets_init', 'slwp_remove_widgets');

Como puedes ver, solo con comentar «//ON » en la línea correspondiente al widget que NO quieres desactivar, puedes seleccionar los que no utilizas y así dejarlos inactivos.

Desactivar los comentarios en WordPress

Los comentarios en WordPress, pueden ser desactivados y no sólo usando un plugin. Con el siguiente fragmento de código en el archivo functions.php, puedes desactivar por completo los comentarios en todo el sitio web (ten en cuenta que esto no ocultará los ya existentes).

  function slwp_disable_post_comments() {
    $post_types = get_post_types();
    foreach ($post_types as $post_type) {
      if(post_type_supports($post_type, 'comments')) {
        remove_post_type_support($post_type, 'comments');
        remove_post_type_support($post_type, 'trackbacks');
      }
    }
  }

  add_action('admin_init', 'slwp_disable_post_comments');

Y si quieres ocultar y cerrar los comentarios actuales que ya están publicados, puedes usar este código en el archivo functions.php:

  function slwp_close_open_comments() {
    return false;
  }
  function slwp_hide_comments($comments) {
     $comments = array();
     return $comments;
  }
  add_filter('comments_array', 'slwp_hide_comments', 10, 2);
  add_filter('comments_open', 'slwp_close_open_comments', 20, 2);
  add_filter('pings_open', 'slwp_close_open_comments', 20, 2);

Si utilizas un sistema de comentarios externo como «Disqus», no desactives los comentarios, ya que para que funcione, tiene que cargar el template por defecto. Si los desactivamos, no lo carga.

Desactivar los feeds RSS en WordPress

Los «feeds RSS» pueden ser un arma de doble filo, mientras son una buena herramienta para la sindicación de contenido, también pueden tener un lado oscuro, ya que los «bots» pueden «arañar» contenido a través del «feed».

Salvo que sea requerido, es prudente desactivarlos, sobre todo en webs corporativas o proyectos nicho.

Puedes desactivar los «feeds RSS» con este código PHP en el archivo functions.php:

  function slwp_disable_rss() {
    wp_die( 'RSS off' );
  }
  add_action('do_feed', 'slwp_disable_rss', 1);
  add_action('do_feed_rdf', 'slwp_disable_rss', 1);
  add_action('do_feed_rss', 'slwp_disable_rss', 1);
  add_action('do_feed_rss2', 'slwp_disable_rss', 1);
  add_action('do_feed_atom', 'slwp_disable_rss', 1);
  add_action('do_feed_rss2_comments', 'slwp_disable_rss', 1);
  add_action('do_feed_atom_comments', 'slwp_disable_rss', 1);

Ten en cuenta que algunos servicios externos pueden necesitar el «feed RSS» para funcionar, ten cuidado.

Lista de Hacks en WordPress

Desactivar los «emojis» en WordPress

En muchos sitios web relativamente informales, es muy común el uso de «emojis» (nosotros los usamos y no por eso somos menos serios en los temas que tratamos).

Sin embargo, hay quienes los consideran poco serios o innecesarios, por lo que puedes querer desactivarlos.

Podemos desactivar los «emojis» en WordPress (tanto en contenido como en comentarios) usando el siguiente código PHP en el archivo functions.php:

  function slwp_disable_emojis() {
    remove_action( 'wp_head', 'print_emoji_detection_script', 7 );
    remove_action( 'admin_print_scripts', 'print_emoji_detection_script' );
    remove_action( 'wp_print_styles', 'print_emoji_styles' );
    remove_action( 'admin_print_styles', 'print_emoji_styles' );
    remove_filter( 'the_content_feed', 'wp_staticize_emoji' );
    remove_filter( 'comment_text_rss', 'wp_staticize_emoji' );
    remove_filter( 'wp_mail', 'wp_staticize_emoji_for_email' );
    add_filter( 'tiny_mce_plugins', 'disable_emojis_tinymce' );
    add_filter( 'wp_resource_hints', 'disable_emojis_remove_dns_prefetch', 10, 2 );
  }
  add_action( 'init', 'slwp_disable_emojis' );

Desactivar los «shortlinks» o enlaces cortos de WordPress

Los «shortlinks» son nativos en WordPress, eso significa que forman parte de su construcción.

Para crear los «shortlinks», se usa un algoritmo creado por la propia Automattic (empresa creadora de WordPress).

Aunque estos enlaces redireccionan, pueden ser bastante molestos e incluso llegar a causar ciertos conflictos.

Lo ideal es desactivarlos, a no ser que realmente los necesites. Podemos hacerlo con el siguiente código PHP en el archivo functions.php:

remove_action( 'wp_head', 'wp_shortlink_wp_head');

Si, así de fácil, una simple línea de PHP4.

Desactivar la versión de WordPress en el código

Una de las cosas que WordPress hace de forma nativa, es incluir en el código (y en los query strings) la versión de WordPress que se está ejecutando en el sitio web.

Esto puede ser un problema para la seguridad del sitio web en caso de no estar actualizado.

Con el siguiente código PHP en el archivo functions.php, podemos desactivar esta función nativa:

  function slwp_remove_version() {
    return '';
  }
  add_filter('the_generator', 'slwp_remove_version');

De todas formas, aunque desactivemos esta función, un hacker de WordPress experimentado puede llegar a conocer la versión de WordPress mediante el análisis de la estructura de archivos descargado al navegador.

Lista de Hacks en WordPress

Desactivar el enlace «RSD» en WordPress

La funcionalidad «RSD»5 es un enlace que aparece en la cabecera de las páginas generadas, que les indica a ciertos clientes donde se encuentra el «XMLRPC».

Para evitar problemas de seguridad, es muy recomendable deshabilitar esta funcionalidad.

Con el siguiente código PHP en el archivo functions.php, podemos desactivar el enlace «RSD»:

remove_action ('wp_head', 'rsd_link');

Sencillo ¿verdad? y, MUY recomendable para mejorar la seguridad del sitio web.

Desactivar el «XML-RPC.PHP» de WordPress

Antes hablaba del servicio «RSD», pero no menos importante es desactivar el «XML-RPC.PHP» porque puede ser objeto de ataques de fuerza bruta.

Ya que no hay plugins que realicen esta tarea, salvo el «Jetpack» (que yo conozca), es interesante hacerlo por ti mismo.

En este caso, no debemos tocar el archivo functions.php, sino que deberemos editar el archivo wp-config.php, añadiendo AL FINAL, el siguiente código:

add_filter('xmlrpc_enabled', '__return_false');

El archivo wp-config.php es, como sabes, el que suministra a WordPress la información necesaria para su funcionamiento.

En un próximo artículo hablaremos sobre este archivo y lo que lo compone.

Este código de desactivación es complementario a la acción recomendada de deshabilitar el «XML-RPC.PHP» en el archivo .htaccess; de esta forma, conseguiremos hacer desaparecer por completo la brecha de seguridad.

Lista de Hacks en WordPress

Desactivar el enlace a «WLW» en WordPress

Una de las cosas extrañas de WordPress, es la cantidad de servicios con los que quiere ser compatible, en este caso, se trata de «WLW»6, una aplicación que ya está en desuso y que se utilizaba para publicar en blogs.

Hace tiempo, la aplicación «WLW» estaba en el paquete de «Messenger», aunque ya no se actualiza.

Para desactivar esta compatibilidad, inserta este código en el archivo functions.php:

remove_action( 'wp_head', 'wlwmanifest_link');

Un paso más en la limpieza de la cabecera de WordPress, que nos ahorrará disgustos. 😊

Desactivar «pingbacks» en WordPress

A día de hoy, es uso de los «pingbacks» y los «trackbacks», es casi anecdótico.

Puedes desactivar por completo los «pingbacks», con este código en el archivo functions.php:

  function slwp_disable_pingback( &$links ) {
   foreach ( $links as $l => $link )
    if ( 0 === strpos( $link, get_option( 'home' ) ) )
      unset($links[$l]);
  }
  add_action( 'pre_ping', 'slwp_disable_pingback' );

Conclusión

Espero que te resulten útiles estos trozos de código, los llames «hacks», «snippets», «trucos» o de cualquier otra forma.

Recuerda que siempre puedes confiar en los plugin externos para realizar alguna de estas tareas que te permiten mejorar las prestaciones de tu sitio con WordPress.

Puedes encontrar muchos plugin que te permiten añadir código, en el repositorio oficial de WordPress.

Recuerda, #QuédateEnCasa, #UsaMascarilla, #LavateLasManos, juega, experimenta y, sobre todo, ¡divertirte!


¡Gracias por leernos!


¡Tus comentarios y preguntas nos ayudan a mejorar, por favor comenta!


  1. Uniform Resource Identifier – identificador de recursos uniforme, es una cadena de caracteres que identifica los recursos de una red de forma unívoca. 

  2. Content Distribution Network – Red de Distribución de Contenidos, es una red superpuesta de computadoras que contienen copias de datos, con el fin de maximizar el ancho de banda para el acceso a los datos de clientes por la red. 

  3. Uniform Resource Locator – Localizador de Recursos Uniforme es un identificador de recursos uniforme (URI) cuyos recursos referidos pueden cambiar, esto es, la dirección puede apuntar a recursos variables en el tiempo. Están formados por una secuencia de caracteres de acuerdo con un formato modélico y estándar que designa recursos en una red como, por ejemplo, Internet. 

  4. Personal Home Page (nombre original del lenguaje de programación de servidores)  

  5. Really Simple Discovery – Descubrimiento Realmente Simple 

  6. Windows Live Writer 

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

cinco × 3 =

Para ofrecer las mejores experiencias, utilizamos tecnologías como las cookies para almacenar y/o acceder a la información del dispositivo. El consentimiento de estas tecnologías nos permitirá procesar datos como el comportamiento de navegación o las identificaciones únicas en este sitio. No consentir o retirar el consentimiento, puede afectar negativamente a ciertas características y funciones.    Más información
Privacidad