Icono del sitio Imacreste

Desarrollo con seguridad en WordPress

A la hora de desarrollar un plugin o un tema, es importante garantizar la seguridad ante un posible ataque. El core de WordPress nos ofrece herramientas para desarrollar con seguridad nuestros temas y plugins.

Posibles problemas

Los formularios y URLS son los recursos más usados por los hackers para colarse en nuestra web.

Controlar él envió de formularios y las URLS mediante NONCE

WordPress añade los NONCE para proteger las urls y él envió de formularios.  Lo que hacen es impedir el acceso no autorizado mediante la generación de una clave secreta antes de enviarse la solicitud. Y comprueba antes de procesar la información sea la misma.

Para comprobar que una URL ésta correctamente enviada usamos en la creación:

wp_nonce_url

wp_nonce_url( $mi_url, 'borrar-_'.$post->ID );
//genera una url con el nonce
<a href="<?php echo wp_nonce_url( $mi_url, 'borrar-_'.$post->ID );?>">

Este código genera una cadena _wpnonce en la url. Y para comprobar su envió antes de la acción usamos:

check_admin_referer('borrar-_'.$post->ID);

Y para añadir un nonce en un formulario usamos dentro del formulario:

wp_nonce_field

<form>
<input name=”nombre”>
<?php wp_nonce_field('mi_nonce_action','mi_nonce_field'); ?>
</form>
//oculta el nonce como input

Y en la página de recepción del formulario podemos comprobar que se ha enviado correctamente:

check_admin_referer(‘mi_nonce_action’, 'mi_nonce_field');
//comprueba el envió de la url

Controlar el guardado en la base de datos

Por otro lado, otro ataque típico, es usar los propios cajones de entrada de datos, para introducir códigos que puedan alterar nuestra base de datos, o provocar errores en nuestra plataforma. Imagina si alguien en vez de poner su nombre pone código de programación, que puede suceder? y eso es lo que hay que controlar, para lo que dependiendo del tipo de dato hay una función de WordPress:

Antes de guardar debemos pasar los datos por las funciones:

$nombre= sanitize_text_field( $_POST['nombre'] );
//luego guardamos en BD

Y para mostrar la información por pantalla:

$html = esc_html( '<a href="https://imacreste.com/">Enlace</a>' );
//se visualizaría asi: &lt;a href=&quot;https://imacreste.com/&quot;&gt;Enlace&lt;/a&gt;

Otras medidas para asegurar él envió de información

Salir de la versión móvil