Cuando pensamos en seguridad en WordPress comúnmente verificamos: Autoridad e Intensión, la autoridad la puedes evaluar a través de los roles y capacidades del usuario, sin embargo para la intensión tienes que hacer uso de los Nonces.
Generalidades
El término “nonce” es la abreviación en inglés de “number used once”, o número usado una vez. En WordPress los nonces son cadenas de texto que parecen ser cadenas aleatorias, pero en realidad no lo son ya que son generadas a través de funciones hash.
Nonces en WordPress
Si vemos el código de los enlaces o código de los formularios de WordPress podemos detectar alguna de estas cadenas de seguridad.
Nonces en URLs
Por ejemplo cuando queremos eliminar una entrada veremos una url como se muestra en la siguiente imagen:

Nonces en formularios
Por ejemplo al crear una nueva entrada, aparece el formulario con los diferentes campos para llenar, pero también aparecen campos ocultos, lo podemos ver con el Inspector de Código, tal como se muestra en la siguiente imagen:

Proteger a los usuarios de ellos mismos
Anteriormente te había hablado de la intensión, pues bien, ¿que quiero decir con esto?, imagínate que un usuario tiene permisos de administrador y esta logueado en su WordPress, él no tiene pensado borrará ninguna entrada, sin embargo, ¿que sucede si le envío por correo un enlace con la url para eliminar una entrada?, si el usuario pulsa mi enlace lo estaré forzando a realizar el borrado de alguna entrada.
Sin embargo gracias a que WordPress usa Nonces, entonces nuestro ataque no tendrá efecto porque será difícil saber el nonce generado para usarlo como parte de la url a enviar.
Si el usuario ejecuta alguna acción forzada sin tener un nonce válido, WordPress mostrará la siguiente pantalla por defecto y sin opción a nada.

Creando Nonces en el desarrollo de Plugins
Por todo lo anteriormente expuesto, cuando desarrollas plugins tienes que tener presente el uso de Nonces, a continuación veremos algunos escenarios más comunes:
Nonces en URL
Para agregar un nonce en la url usamos la función wp_nonce_url(), por ejemplo:
$url = wp_nonce_url( $url, 'ejemplo-nonce', 'nonce');
En el código anterior:
- Nuestro nonce se generará a partir del texto “ejemplo-nonce”.
- tendrá como nombre “nonce” (en lugar del nombre por defecto _wpnonce).
Nonces en Formulario
En este caso usaremos la función wp_nonce_field() que creará el campo oculto con el valor del nonce.
wp_nonce_field( 'ejemplo-nonce', 'nonce' );
En el código anterior:
- Nuestro nonce se generará a partir del texto “ejemplo-nonce”.
- tendrá como nombre de campo “nonce” (en lugar del nombre por defecto _wpnonce).
Nonces usando Ajax
Anteriormente vimos un artículo de cómo usar Ajax en WordPress, pues bien, para usar nonces con Ajax tenemos que crear el nonce y pasarlo al archivo javascript a través de la función wp_localize_script(), para la creación del nonce usaremos wp_create_nonce().
wp_localize_script('dcms_miscript','dcms_vars',[ 'ajaxurl' => admin_url('admin-ajax.php'),
'nonce' => wp_create_nonce('ejemplo-nonce') ]);
Comprobando validez de Nonces en el desarrollo de plugins
Si quieres personalizar el mensaje que se muestra cuando hay un error de Nonce puedes usar la función wp_verify_nonce(), el código sería similar al siguiente:
if ( ! wp_verify_nonce( $_REQUEST['nonce'], 'ejemplo-nonce' ) ) {
wp_die("Error - Verificación nonce no válida ✋");
}
Plugin de ejemplo
Si quieres aprender detalladamente cómo usar nonces en tus plugins, te dejo este plugin de ejemplo que sólo tiene funcionalidad de Nonces.
Descargar Plugin ejemplo Nonces en GitHub

¡Buen artículo Jhon! Uno de esos detalles de WordPress que si no te fijas, pasan desapercibidos, pero que está muy bien entender. ¡Nonces power! 🙂
Gracias Joan!, si, !Nonces’ power!, es bueno saber de qué va 🙂
Hola amigo John.
Me ha gustado tu post, para entender que son wp_nonce como medio de seguridad para proteger, urls o links del propio wp, o tema. Pero tengo un problema y nadie lo explica.
Cuando cerraba mi WP, hacia redirección a wp-login.php, y efectivamente se queda en la ruta de logeado. Pero un dia me dio ese error, de: ¿Seguro que quiere hacer esto?, le dije que si, parece que hubo algun error. Y ahora a cerrar sesión, me lleva directamente a mi pagina del tema STOREFRONT…
¿podrias hacer un post, de como rectificar en WP o BBDD, que redirecione bien a WP-Login.php? O como modificar el wp_nonce que se ha quedado, truchin 😀 mil gracias. Saludos.
Hola, dudo que tenga que ver con la funcionalidad de nonces.
¿Has probado en otro navegador?, en modo incógnito?, más parece ser un tema de cookies.
Excelente información, estaba teniendo un problema con el plugin de cache LSCache, y el login de un theme, al buscar en su código encontré el nombre del Nonce para poder excluirlo. De paso queria saber que es eso y con tu explicación me quedo claro.
Saludos.
Gracias Jesús. Saludos 🙂
Hola buenas tardes al intentar hacer un comentario como este visítanos somos indisect me aparece el error, que podria ser? Gracias de antemano
Hola, para este tipo de problemas mejor detalla tu caso en el formulario de contacto: https://decodecms.com/contacto/
Amigo tengo problemas al procesar un pedido en woocommer al llenar el formulario sale un error y el me sabe no se valido el Nonce , como corregir esto
Hola, no creo que sea un problema de WooCommerce, lo que puede pasar posiblemente este relacionado con algún plugin que usas o incluso con tu propio tema, tendrías que ir probando desactivando plugins.