• Saltar a la navegación principal
  • Saltar al contenido principal
  • Saltar a la barra lateral principal

DecodeCMS

Tu WordPress a otro Nivel ...

  • Acerca de
  • Contacto
  • Inicio
  • Tutoriales
    • Themes
    • Plugins
    • Core
    • Recursos
  • Cursos
  • Acceder
    • Mis cursos
    • Mi Cuenta
    • Acceder
Inicio / Tutoriales / Core / ¿Qué son los Nonces en WordPress?

¿Qué son los Nonces en WordPress?

Nonces en WordPress

[ 21 febrero 2018 ] [ Autor: Jhon Marreros Guzmán ][ Core - Avanzado] [ ]

funcionalidad seguridad

¿Me ayudas a llegar a más gente?

Twittear Compartir LinkedIn WhatsApp

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:

Nonce generado para una URL en WordPress

_wpnonce es el parámetro por defecto que usa WordPress para el nonce en la URL

 
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:

Nonce generado para un formulario en WordPress

Vemos que el nombre del input es _wpnonce que es el nombre por defecto que usa WordPress para el nonce

 

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.

Podemos ocultar la url real con servicios de reducción de urls como: goo.gl/
Este tipo de ataque es parte de los ataques conocidos como CSRF (Cross Site Request Forgery)

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.

El nonce se genera en base a diferentes parámetros como: usuario logueado, id a eliminar, etc, y tiene una validez por defecto de 24 horas

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.

Muestra un mensaje ¿Seguro que quieres hacer esto?

Tal vez el mensaje debería ser más informativo, como por ejemplo que hubo algún problema con la verificación, etc, veremos si lo cambian en futuras versiones.

 

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 ✋");
}

Este código funcionará en todos los casos, para nonces en url, formulario y Ajax
Existen otras funciones de verificación como check_admin_referer() para nonces en urls y formularios y check_ajax_referer() para comprobar nonces con Ajax

 

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

Pantalla principal plugin de ejemplo

 

 
¿Aún con dudas?, en el siguiente video se detallan los puntos anteriores

 

¿Me ayudas a llegar a más gente?

Twittear Compartir LinkedIn WhatsApp

Artículos Relacionados

  • Cómo eliminar todos los productos de WooCommerceCómo eliminar todos los productos de WooCommerce
  • Agrupar los resultados de búsqueda en WordPressAgrupar los resultados de búsqueda en WordPress
  • tipos de complementos de WordPress5 tipos de complementos de WordPress
  • Sincronizar WooCommerce y Google SheetsSincronizar WooCommerce y Google Sheets
Valora este artículo : 1 barra2 barras3 barras4 barras5 barras (5 votos, promedio: 4,20 de 5)
Cargando...

Interacciones con los lectores

Comentarios

  1. Joan

    28 febrero, 2018

    ¡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! 🙂

    • Jhon Marreros Guzmán

      28 febrero, 2018

      Gracias Joan!, si, !Nonces’ power!, es bueno saber de qué va 🙂

  2. Jesmar Martinez

    3 noviembre, 2020

    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.

    • Jhon Marreros Guzmán

      4 noviembre, 2020

      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.

  3. Jesús Velasco

    1 febrero, 2022

    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.

    • Jhon Marreros Guzmán

      1 febrero, 2022

      Gracias Jesús. Saludos 🙂

Para escribir código envolver con: <pre class="language-xxx"><code> </code></pre> ,reemplaza las xxx (php, css, html)

*

* Gravatar habilitado

Barra lateral principal

Presentación

Curso Decodifica WordPress

Únete a DecodeCMS

Recibirás como regalo:

Guia práctica con video:
¿Quieres agregar código a WordPress? Revisa las diferentes opciones que tienes.Ver más

Jooble
Alojamiento Wordpress

Niveles

Básico Intermedio Avanzado

Etiquetas

accesibilidad css dashboard editor error funcionalidad herramientas imagen js librería mejoras optimización seguridad social woocommerce

Populares

Agregar login y logout en un menú de WordPress

Personalizar el mantenimiento programado de WordPress

5 tipos de complementos de WordPress

Página de inicio y Página de entradas en WordPress

© logo decode pie
Política de Privacidad | Política de devoluciones
Copyrigth 2023 Todos los derechos reservados