Eliminación del meta tag generator a traves de un plugin de WordPress

@cmdearcos
Grupo TIECs

¿Qué es el meta tag “generator”?. En una sencilla explicación, es una etiqueta que indica con que programa se ha creado un documento, en este caso nuestro site realizado en WordPress. Si veis el código fuente de una pagína os podeis encontrar una línea como la siguiente:

  1. <meta name="generator" content="WordPress 4.2.1" />

Publicar esta infromación puede ser contraproducente, ya que permite de forma sencilla saber como está generado el site, haciendo más sencillo que puedan atacar nuestro site.

¿En que punto dice WordPress que saque esa etiqueta?. Para insertar esa etiqueta en el html, wordpress usa la función wp_generator. Esta función se incroporó en WordPress en la versión 2.5.0. La llamada a la función se hace de la siguiente forma en la línea 219 del fichero wp-includes/default-filters.php:

  1. <?php
  2.  
  3. add_action( 'wp_head', 'wp_generator');
  4.  
  5. ?>

La función add_action nos permite añadir nueva funcionalidad a wordpress. En este caso se llamará a la función wp_generator cuando se muestre el contenido entre las etiquetas <head></head> (hook wp_head).

Una primera solución sería eliminar la linea 219 del fichero wp-includes/default-filters.php, pero al actualizar las versión de wordpress los cambios en este fichero se perderían, por lo que no es una opción valida. Una opción muy recomenda es poner en el fichero functions.php la siguiente línea de código para que no se llame a la función wp_generator al cargar la cabecera:

  1. <?php
  2.  
  3. remove_action( 'wp_head', 'wp_generator' );
  4.  
  5. ?>

Si utilizas temas gratuitos que actualizas de forma automática, esta solución tiene el mismo problema que la anterior, ya que al actualizar se eliminan los cambios en functions.php. Si el tema no se va a tocar o no se va a hacer de forma autómatica esta puede ser una solución para muchos casos.

Para buscar una solución definitiva empezaremos viendo que hace la función wp_generator:

  1. <?php
  2.  
  3. function wp_generator() {
  4. /**
  5. * Filter the output of the XHTML generator tag.
  6. *
  7. * @since 2.5.0
  8. *
  9. * @param string $generator_type The XHTML generator.
  10. */
  11.    the_generator( apply_filters( 'wp_generator_type', 'xhtml' ) );
  12. }
  13.  
  14. ?>

Esta función solo llama a the_generator , crea el hook ‘wp_generator_type’ y le pasa el paramétro xhtml.

La función the_generator crea el hook ‘the_generator’ y llama a get_generator pasandole el parámetro $type (xhtml en nuestro caso):

  1. <?php
  2.  
  3. echo  apply_filters( 'the_generator', get_the_generator($type), $type ) . "\n";
  4.  
  5. ?>

Los posibles parametros que puede aceptar esta función son:

  • html
  • xhtml (la que utiliza WordPress para la cabecera).
  • atom
  • rss2
  • rdf
  • comment
  • export

Con estos parámetros se termina ejecutando este switch (en la función get_the_generator):

  1. <?php
  2.  
  3. switch ( $type ) {
  4.    case 'html':
  5.       $gen = '<meta name="generator" content="WordPress ' . get_bloginfo( 'version' ) . '">';
  6.       break;
  7.    case 'xhtml':
  8.       $gen = '<meta name="generator" content="WordPress ' . get_bloginfo( 'version' ) . '" />';
  9.       break;
  10.    case 'atom':
  11.       $gen = '<generator uri="http://wordpress.org/" version="' . get_bloginfo_rss( 'version' ) . '"&gt;WordPress&lt;/generator>';
  12.       break;
  13.    case 'rss2':
  14.       $gen = '<generator&gt;http://wordpress.org/?v=' . get_bloginfo_rss( 'version' ) . '&lt;/generator>';
  15.       break;
  16.    case 'rdf':
  17.       $gen = '<admin:generatorAgent rdf:resource="http://wordpress.org/?v=' . get_bloginfo_rss( 'version' ) . '" />';
  18.       break;
  19.    case 'comment':
  20.       $gen = '<!-- generator="WordPress/' . get_bloginfo( 'version' ) . '" -->';
  21.       break;
  22.    case 'export':
  23.       $gen = '<!-- generator="WordPress/' . get_bloginfo_rss('version') . '" created="'. date('Y-m-d H:i') . '" -->';
  24.       break;
  25. }
  26.  
  27. ?>

Con esta información la mejor opción es realizar un pequeño plugin que cambie el funcionamiento del hook the_generator de la función the_generator, de tal forma que imposibilite llamar a la función wp_generator desde otro hook diferente a wp_head. El plugin tendría el siguiente código:

  1. <?php
  2.  
  3. function eliminar_version() {
  4.    return;
  5. }
  6.  
  7. add_filter('the_generator', 'eliminar_version');
  8.  
  9. ?>

Aquí os dejo el plugin para que lo podais instalar en vuestro wordpress.

@cmdearcos
Grupo TIECs

Deja un comentario

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