Seguridad en las cookies de WordPress

Última revisión: 2 de octubre de 2021

Almacenar la información segura para saber quién está navegando por tu WordPress es importante y por eso lo es también saber dónde y cómo se guarda la información (y que esté segurizada). Para ello, en una instalación simple de WordPress, definiremos concretamente dónde se almacenarán las galletas (cookies) para que no sean tan fácilmente accesibles.

Configuración

Hash (COOKIEHASH)

Esta constante indica de forma única tu sitio. Habitualmente se ejecuta la función siguiente si no está configurada en el [wp-config.php].

if ( !defined( 'COOKIEHASH' ) ) {
  $siteurl = get_site_option( 'siteurl' );
  if ( $siteurl )
    define( 'COOKIEHASH', md5( $siteurl ) );
  else
    define( 'COOKIEHASH', '' );
}

Esto significa que por norma general nos encontraremos un MD5 de nuestra URL. Si queremos hacerla más segura, lo más recomendable es complicar el identificador.

define( 'COOKIEHASH', 'qLk9K5wdF4SwcwbMRNWP3kwscBJqcWtYmTvA' );

NOTA: Cambia el código extraño por uno generado en este sitio.

Estas cookies se generan en base a la cookie anterior, por lo que en principio no hay que configurarla nada. Su formato es el siguiente:

if ( !defined('USER_COOKIE') )
  define('USER_COOKIE', 'wordpressuser_' . COOKIEHASH);
if ( !defined('PASS_COOKIE') )
  define('PASS_COOKIE', 'wordpresspass_' . COOKIEHASH);
if ( !defined('AUTH_COOKIE') )
  define('AUTH_COOKIE', 'wordpress_' . COOKIEHASH);
if ( !defined('SECURE_AUTH_COOKIE') )
  define('SECURE_AUTH_COOKIE', 'wordpress_sec_' . COOKIEHASH);
if ( !defined('LOGGED_IN_COOKIE') )
  define('LOGGED_IN_COOKIE', 'wordpress_logged_in_' . COOKIEHASH);

Esta cookie, como su nombre indica, es una cookie de pruebas, para verificar que hay WordPress. Es otra de las cookies que no requieren configuración, ya que se generan automáticamente.

if ( !defined('TEST_COOKIE') )
  define('TEST_COOKIE', 'wordpress_test_cookie');

Path

Path (COOKIEPATH)

En esta cookie indicaremos el «path» a partir de cuál se aplican las cookies. Si por ejemplo tienes tu sitio alojado en la carpeta raíz del dominio (https://www.wpdanger.com/) el path sería «/», pero si está en una carpeta (https://www.wpdanger.com/blog/), sería el de la carpeta, «/blog/»;

if ( !defined('COOKIEPATH') )
  define('COOKIEPATH', preg_replace('|https?://[^/]+|i', '', get_option('home') . '/' ) );

De esta forma, si lo quieres aplicar tú manualmente, puedes hacerlo con la siguiente constante:

define('COOKIEPATH', '/inicio/');

Site Path (SITECOOKIEPATH)

Este caso es similar al anterior, aunque más concreto a dónde se encuentra la carpeta del [/wp-admin/]. De esta forma, pondríamos la URL delante del panel de administración.

if ( !defined('SITECOOKIEPATH') )
  define('SITECOOKIEPATH', preg_replace('|https?://[^/]+|i', '', get_option('siteurl') . '/' ) );

De esta forma, si lo quieres aplicar tú manualmente, puedes hacerlo con la siguiente constante:

define('SITECOOKIEPATH', '/');

Partiendo del punto anterior, tendremos en qué dirección se guarda el panel de administración. De esta forma si cambias tu dirección del panel debes cambiarlo aquí también.

if ( !defined('ADMIN_COOKIE_PATH') )
  define( 'ADMIN_COOKIE_PATH', SITECOOKIEPATH . 'wp-admin' );

Por defecto, sería esto:

define( 'ADMIN_COOKIE_PATH', '/wp-admin' );

Al igual que el caso anterior, si cambias la carpeta donde alojar las cookies, también deberás cambiar la de tus plugins…

if ( !defined('PLUGINS_COOKIE_PATH') )
   define( 'PLUGINS_COOKIE_PATH', preg_replace('|https?://[^/]+|i', '', WP_PLUGIN_URL)  );

Por defecto, sería esto:

define( 'PLUGINS_COOKIE_PATH', '/wp-content/plugins' );

Hostname

Esta cookie por defecto va en blanco, aunque la puedes forzar. Básicamente es sobre qué dominio (o mejor dicho, hostname) quiere cargar las cookies.

if ( !defined('COOKIE_DOMAIN') )
   define('COOKIE_DOMAIN', false);

Por defecto la puedes omitir o por ejemplo poner tu dominio:

define('COOKIE_DOMAIN', 'www.wpsysadmin.com');

Con esto las cookies se establecerán en el dominio principal que corresponda y posteriormente se irán guardando por carpetas según quién las necesite. Los usuarios del panel de administración solo tendrán disponibles sus cookies cuando estén en el panel. Los plugins solo tendrán acceso a sus cookies…

Un caso especial es de aquellas instalaciones con WordPress MultiSite que, en ese caso, por la posibilidad de tener varios hostname, es mejor que el sistema configure todo de forma automática; lo mejor es no incluir ninguna de estas líneas de código o dejar sus contenidos vacíos y que lo gestione automáticamente el sistema.

En WordPress Multisite solo encontrarás las constantes COOKIEPATH, SITECOOKIEPATH, ADMIN_COOKIE_PATH y COOKIE_DOMAIN.


Seguir con Seguridad para WordPress


Sobre este documento

Este documento está regulado por la licencia EUPL v1.2, publicado en WP SysAdmin y creado por Javier Casares. Por favor, si utilizas este contenido en tu sitio web, tu presentación o cualquier material que distribuyas, recuerda hacer una mención a este sitio o a su autor, y teniendo que poner el material que crees bajo licencia EUPL.