Qué son los nonces de WordPress y para qué sirven

No lo dudes, WordPress es una plataforma increíblemente segura. Ahora bien, su nivel de seguridad es directamente proporcional al código que incluyan en tu web temas, plugins o tus propias funciones personalizadas.

Ahora bien, no importa lo cuidadoso que seas eligiendo todo lo que añades a tu web, ya sea leyendo reseñas, comprando solo plugins y temas premium, o contratando servicios de seguridad y mantenimiento, tu sitio siempre es susceptible ser hackeado. En esto siempre vamos detrás, no en WordPress, en cualquier plataforma.

Pero hay un modo realmente bueno, y sencillo, de hecho de los mejores, de proteger tu sitio WordPress de posibles amenazas: el uso de nonces.

Así que vamos a ver qué son los nonces de WordPress, cómo usarlos y verificar que funcionan.

Espero que aprendas algo, incluso que te sorprendas…

¿Qué son los nonces de WordPress?

En pocas palabras, un nonce es un número que se usa una sola vez para ayudar a proteger URLs y formularios para que no se puedan utilizar inadecuadamente o con malas intenciones.

WordPress incorpora los nonces como valores aleatorios creados de combinaciones de números y letras. Para mejorar aún más la seguridad WordPress asigna a cada nonce un tiempo de duración. Una vez expira el tiempo de duración del nonce ya no puede usarse.

Los nonces de WordPress se usan principalmente para evitar que los hackers ataquen tu web con la vulnerabilidad conocida como Cross-site request forgery. Este tipo de ataques envían peticiones a los servidores sin tu conocimiento y te pueden hacer polvo la web.

ataque-cross-site-request-forgery

Imagen: We Live Security

Los ataques más comunes de este tipo a sitios WordPress suelen incluir:

  • Atiborrar de spam la base de datos
  • Crear cuentas de usuario sin que se entere el administrador
  • Borrar cuentas de usuario
  • Borrar información de tu web
  • Crear transacciones (sí, de compra) si tienes una tienda online
  • Rellenar formularios de contacto y de comentarios con información falsa o spam

Los nonces los usa el núcleo de WordPress por defecto y tienen algunas características que rigen su comportamiento. Por ejemplo, ya he mencionado que tienen un tipo de duración, que por defecto es de 24  horas. No obstante, un administrador puede cambiar el tiempo de duración a voluntad, así:

Bueno, pues ahora que tenemos una primera idea fundamental de lo que son los nonces de WordPress y porqué es importante utilizarlos, echemos un vistazo a cómo podemos añadirlos para mejorar la seguridad de nuestra web.

Añadiendo nonces WordPress correctamente

Vamos a ver, a continuación, como usar los nonces de WordPress en tu web para evitar ataques CSRF (Cross Site Request Forgery) que hemos comentado antes.

El proceso en realidad es bastante sencillo, simplemente vamos a ver cómo añadir nonces tanto a las URLs como a los formularios, y luego veremos como verificar si funcionan.

Una vez hecho esto habremos añadido una capa extra de seguridad a nuestro sitio, quedando mucho más protegido que antes.

Cómo se añade un nonce a una URL

Si alguna vez te has encontrado con alguna URL que lanza un proceso de fondo en tu sitio WordPress entonces añadir un nonce a esa URL es absolutamente necesario para evitar cualquier ataque, ya sea accidental o intencionado.

Lo que haremos será usar la función wp_nonce_url(), que requiere que añadamos dos argumentos: la URL y una cadena que represente la acción del usuario.

Lo mejor es que el argumento de acción del usuario que añadas sea semántico, que signifique algo. Por ejemplo, si añadimos un nonce para borrar una entrada lo suyo sería nombrarlo como borrar-entrada. Sería algo así:

El código crea una URL y la almacena en la variable $la_url_completa:

¡Ya está! ¡Lo lograste!

Cómo verificar los nonces de una URL

Una vez hemos añadido el nonce a la URL es importante verificarlo especificando la cadena aplicada como argumento. Para ello usaremos la llamada a la función wp_verify_nonce() así:

 

Si queremos verificar que se añadió el nonce ejecutaremos, para el ejemplo anterior, la siguiente línea de código:

 

Si el nonce no es válido la función devolverá FALSE. Si el nonce es válido entonces devolverá o 1 (el nonce se creó hace menos de 12 horas) o 2 (el nonce se creó en algún momento entre las últimas 12 a 24 horas).

Cómo añadir un nonce a un formulario

Al añadir un nonce a un formulario de tu web se crea un campo oculto. El propósito de este campo es asegurar que los contenidos del formulario provengan del sitio activo y no de cualquier otra parte. ¿Ves la utilidad?

Para añadir un nonce a un formulario usaremos la función wp_nonce_field(). Los argumentos de esta función son opcionales (funciona perfectamente sin argumentos) pero se recomienda usar al menos el primero para asegurar que un hacker no se cuele usando los argumentos por defecto:

 

  • accion_de_usuario muestra el nombre de la acción del usuario para la que se creó el nonce
  • nombre_del_nonce muestra el nombre definido por ti para el nonce. Por defecto es _wpnonce

Por ejemplo, si quisiera añadir un nonce a un formulario para que borre un comentario sería algo así:

 

En este ejemplo he añadido un nonce al formulario para que borre un comentario (motivo por el que he llamado a la acción de usuario borrar-comentario, y he llamado nonce_de_mi_formulario al nonce).  Al ser una llamada a una función PHP mostrará algo como lo siguiente:

Cómo verificar los nonces de un formulario

Para verificar nonces de formulario usaremos la función check_admin_referer():

 

El código para verificar el nonce del formulario del ejemplo anterior sería así:

 

Si el nonce del formulario no es válido se generará una respuesta de 403 Forbidden junto a un mensaje de error. Y si el nonce es válido el usuario podrá seguir adelante sin ninguna interrupción.

¡Te toca!

¡Ya está! Como te adelanté, los nonces de WordPress son un modo estupendo de minimizar de modo significativo el riesgo de un ataque de Cross-Site Request Forgery (CSRF) a tu web.

Espero que al menos hayas comprendo algo mejor que son los nonces de WordPress y cómo pueden ayudarte a mejorar la seguridad de tu web.


Para aprender más:

Valora este artículo para mejorar la calidad del blog ...

Al hacer una valoración se recoge una cookie con la IP de tu dispositivo

FlojitoNo está malEstá bienMe ha servidoFantástico (11 votos, promedio: 13,27 de 5)
Cargando…

Autor: Fernando Tellado

Fernando Tellado, apasionado de WordPress, profesor, consultor y ponente. Maquero cansino, padre de tres hijos y de una perrita Beagle, Bilbaíno de nacimiento, Español de corazón y ciudadano de donde me quieran. Autor del libro WordPress - La tela de la araña. Mi blog personal es Navegando con red, donde he crecido como escritor en la red y ofrezco mis visiones acerca de la Web 2.0 y la blogosfera.

Comparte esta entrada en
468 ad

Pin It on Pinterest