Qué es Nonce en WordPress

Comprender los nonces en WordPress

Nonce significa «número utilizado una vez».
Es una cadena única de letras y números creada para cada sesión o acción.
Los Nonces ayudan a verificar que las acciones realizadas en tu sitio, como enviar un formulario o eliminar una entrada, son legítimas.
No son infalibles, pero contribuyen en gran medida a reforzar la seguridad.

¿Qué es nonce en WordPress?

Los Nonces en WordPress son tokens de seguridad cruciales que ayudan a proteger tu sitio web de ataques maliciosos como las Falsificaciones de Peticiones de Sitios Cruzados (CSRF).
Estos tokens son únicos y temporales, y desempeñan un papel fundamental para garantizar la seguridad de tu sitio. El enlace a la papelera de una entrada en WordPress muestra la cadena nonce al final de la URL.

El papel de los nonces en la seguridad

En WordPress, los nonces son esenciales para protegerse de los ataques CSRF.
Los ataques CSRF se producen cuando un atacante engaña a un usuario para que ejecute acciones no deseadas en una aplicación web en la que está autenticado.
Por ejemplo, sin un nonce, un atacante podría utilizar un enlace malicioso para borrar el contenido de tu sitio.
Los nonces ayudan a garantizar que la solicitud de una acción procede realmente de tu sitio y no de un tercero.

Ciclo de vida del Nonce

Los nonce en WordPress tienen una vida útil limitada, por lo que sólo son efectivos durante un periodo determinado.
WordPress suele establecer que cada nonce dure 24 horas, divididas en dos «ticks» de 12 horas.
Esta limitación ayuda a prevenir los ataques de repetición, en los que un nonce antiguo podría ser reutilizado maliciosamente.
Durante su ciclo de vida, el valor de un nonce permanece constante para el usuario y la acción a la que está asociado.

Métodos de verificación Nonce

Para crear un nonce en WordPress, se utilizan funciones específicas como wp_nonce_url() para las URL, wp_nonce_field() para formularios, y wp_create_nonce() para usos personalizados, como AJAX.
Las funciones para verificar un nonce son check_admin_referer() para pantallas de administración, check_ajax_referer() para peticiones AJAX y wp_verify_nonce() para casos generales.
Estas funciones garantizan que el nonce proporcionado en una solicitud coincide con un valor esperado, añadiendo una capa de protección a tus acciones en WordPress.

Implementar nonces en WordPress

En WordPress, los nonces son esenciales para proteger tu sitio de acciones no deseadas.
Puedes crear y validar nonces para varios usos, como formularios, URLs y peticiones Ajax.
Esta sección te guiará a través del proceso de implementación.

Crear nonces con funciones

Para crear un nonce en WordPress, normalmente añades código a tu functions.php archivo. Para las URL, utiliza la función wp_nonce_url().
Genera una URL con un nonce adjunto.
Aquí tienes un ejemplo:

$nonce_url = wp_nonce_url( $url, 'action_name' );

Para formularios, wp_nonce_field() crea campos ocultos con valores nonce.
Por ejemplo

wp_nonce_field( 'form_action' );

Para fines generales, utiliza wp_create_nonce():

$nonce = wp_create_nonce( 'action' );

Estos métodos ayudan a garantizar que las acciones específicas tengan un token único.

Validación de nonces para formularios y URL

La validación es crucial para garantizar que el nonce es correcto.
Utiliza wp_verify_nonce() para comprobar el nonce.
He aquí cómo hacerlo:

if ( ! wp_verify_nonce( $_REQUEST['nonce'], 'action' ) ) {
    die( 'Security check failed' );
}

Para las páginas de administración, utiliza check_admin_referer():

check_admin_referer( 'action' );

Esta función comprueba el nonce de un formulario enviado en el área de administración.
Detiene el script si el nonce no es válido.

Manejo de nonces en peticiones Ajax

Las peticiones Ajax también requieren la validación del nonce para evitar la ejecución no autorizada.
Primero, genera un nonce para la petición Ajax:

$nonce = wp_create_nonce( 'ajax_action' );

A continuación, envía este nonce con tu petición Ajax.
En el lado del servidor, valídalo utilizando check_ajax_referer():

check_ajax_referer( 'ajax_action' );

Si la validación falla, WordPress cancela automáticamente la solicitud, añadiendo una capa de seguridad adicional.

Prácticas recomendadas para WordPress nonce

Los nonces de WordPress ayudan a proteger tu sitio de actividades maliciosas.
Los puntos clave incluyen medidas de seguridad y la personalización eficaz de los campos nonce.

Medidas de seguridad para desarrolladores

Cuando utilices nonces, sanea y escapa siempre tus datos.
Esto garantiza que cualquier entrada se limpie antes de ser utilizada, evitando la inyección SQL y los ataques de scripting.
En tu archivo functions.php, utiliza sanitize_text_field() para los textos y esc_url_raw() para las URL. Comprueba correctamente los nonces utilizando la función wp_verify_nonce().
Esta función garantiza que el nonce es válido y no ha caducado, mejorando la seguridad de tu WordPress.
Recuerda que los nonces en WordPress son sensibles al tiempo de las sesiones de usuario, y suelen durar entre 12 y 24 horas.

Personalización del campo Nonce

Personalizar los campos nonce es crucial para un mejor control e integración con tus temas y plugins.
Cuando crees un nonce para formularios, utiliza la función wp_nonce_field().
Esta función crea dos campos ocultos: uno con el valor del nonce y otro para la acción del nonce.
Utiliza nombres de acción descriptivos para identificar lo que protege el nonce.
Por ejemplo, si estás creando un nonce para borrar una entrada, nómbralo _wpnonce_delete_post.
Esta especificidad facilita la depuración y la colaboración entre desarrolladores.
Añade estos campos nonce en tu archivo wp_config.php para mantener la coherencia.
Asegúrate de que tus campos estén ocultos para minimizar los riesgos de seguridad.
Este enfoque de personalización detallada ayuda a organizar los nonces y a mantener los estándares de seguridad de WordPress.
En resumen, comprender los nonces en WordPress es crucial para mejorar la seguridad de tu sitio.
Los nonces, o «números utilizados una vez», ayudan a prevenir actividades maliciosas como los ataques CSRF, garantizando que las acciones en tu sitio son legítimas.
Al incorporar y validar adecuadamente los nonces, puedes proteger significativamente tu sitio WordPress de acciones no autorizadas y mantener un entorno seguro.