Seguridad en formularios WordPress: usando nonce
Cuando usamos WordPress como un CMS o incluso como una API y desarrollamos para él, no serán pocas las veces que tengamos que hacer operaciones de inserción y edición de datos mediante formularios.
Tener un formulario en una aplicación web, es un punto de entrada a nuestro sistema y un sitio complicado en lo que a seguridad se refiere. Si no cuidamos este aspecto también en WordPress, lo que es un CMS seguro, puede convertirse en un problema.
Para resolver este tema, la API de WordPress nos proporciona un mecanismo muy sencillo llamado nonce, que viene del inglés: número usado sólo una vez, number used once.
Se usan en todo tipo de peticiones: salvando opciones en el administrador, haciendo peticiones AJAX o llevando a cabo cualquier acción susceptible de un problema de seguridad intercambiando información.
La idea se basa en crear una clave secreta, que se comprobará en cada paso en el que el código se va a ejecutar.
Nonces en WordPress
¿Cómo funcionan? El funcionamiento lo podemos resumir en pocos pasos:
- Generamos un nonce con un identificador único
- Pasamos el nonce a través de la petición de datos (enlace o formulario) al script en cuestión que va a recibirlo
- En el script, verificamos el nonce antes de hacer cualquier otra cosa
Este es el funcionamiento con palabras, con código es el siguiente, primero creamos el nonce (ten en cuenta que la frase que uses al crearlo, va a ser la que uses siempre en tu código):
$nonce= wp_create_nonce ('mi-nonce');
Lo siguiente será pasar el valor al script que va a hacer la manipulación de datos:
<a href="miscript.php?_wpnonce=<?php echo $nonce ?>">
Dentro de dicho script, verificamos que es correcto y en caso de que no lo sea, cortamos la ejecución:
$nonce=$_REQUEST['_wpnonce']; if (! wp_verify_nonce($nonce, 'mi-nonce') ) die("Alerta de seguridad");
Y con esto tenemos asegurada nuestra manipulación de datos en WordPress.