Las 5 mejores maneras de resolver la vulnerabilidad de WordPress

Publicado: 2020-02-01

Actualmente, WordPress cubre el 33% de la web. Significa que una gran cantidad de usuarios lo están utilizando, lo que definitivamente atraerá a más atacantes y piratas informáticos. Debido a esto, hay más amenazas y ataques como el ataque de inyección SQL, el ataque de redirección, el ataque CSRF, el ataque XSS, etc., lo que provoca una vulnerabilidad en WordPress. Por esta razón, esto no significa que WordPress no sea seguro. Tenemos que centrarnos en el saneamiento de datos, la validación de datos, el escape de datos, el uso y la verificación de nonce, la redirección segura, las capacidades del usuario, etc. para que WordPress sea seguro. Sin embargo, las vulnerabilidades en WordPress lo hacen inseguro. Entonces, analicemos los problemas de seguridad de WordPress.

Las vulnerabilidades también llegan a WordPress. ¿Pero cómo?

Por un lado, existen amenazas y ataques importantes debido a la vulnerabilidad de WordPress . Por otro lado, debemos superar o prevenir estos ataques con nuestro código durante el desarrollo de WordPress.

Incluso si no eres un desarrollador de WordPress, te animamos a leer la publicación porque podrás conocer los principales ataques que atraen a los piratas informáticos para atacar tu sitio. Y también podrá comprender cómo reconocer complementos y temas de WordPress mal codificados . Si ejecuta una tienda en línea, es útil que decida los mejores complementos y temas de WooCommerce que son seguros.

Contenido
1 Vulnerabilidades de seguridad de WordPress
2 Amenazas y Ataques
2.1 Vulnerabilidad de WordPress: ataque de inyección SQL
2.2 Sanitización de datos
2.2.1 Ejemplo de desinfección de datos:
2.3 Vulnerabilidad de WordPress – Ataque XSS
2.3.1 Ejemplo de ataque XSS:
2.4 Validación de datos
2.4.1 Ejemplo de validación de datos:
2.5 Escape de datos
2.5.1 Ejemplo de escape de datos:
2.6 Vulnerabilidad de WordPress – Ataque CSRF
2.7 Usando Nonce
2.8 Verificando un Nonce
2.9 Vulnerabilidad de WordPress – Ataque de redirección
2.10 Redirección segura
2.11 Vulnerabilidad de las capacidades del usuario
2.12 Siempre regresar o salir en WordPress

Vulnerabilidades de seguridad de WordPress

¿De dónde vienen los códigos vulnerables?

Al principio, deberíamos tener una buena comprensión de dónde están los problemas de seguridad de WordPress . WordPress consiste en el código principal de WordPress, temas y complementos que incluyen Php, Html, javascript y otros códigos.

La comunidad de código abierto inspecciona el código principal de WordPress. Hay una gran cantidad de personas que informan el error y corrigen las vulnerabilidades y se atribuyen el mérito. La vulnerabilidad en WordPress puede ser explotada por ataque de inyección SQL, ataque CSRF, ataque XSS, ataque de redirección y otras técnicas similares. Entonces, la vulnerabilidad de WordPress del desarrollo central no es mucho.

Ni los temas suelen interactuar con las bases de datos de wp, ni los sitios cambian de tema a menudo. Como Gutenberg es el editor predeterminado de WordPress, debemos elegir temas de WordPress compatibles con Gutenberg para un mejor rendimiento y seguridad. Por lo tanto, se producen menos vulnerabilidades con él.

Por otro lado, los complementos de WordPress tienen características y comportamientos complejos. Además, la interacción es alta con los usuarios y las bases de datos. El sitio incluye una gran cantidad de complementos para tener funciones externas. Como resultado, pueden traer una gran cantidad de vulnerabilidades al sitio. Los complementos introducen vulnerabilidades importantes en WordPress.

Vulnerabilidad de WordPress - Amenazas y ataques
Vulnerabilidad de WordPress – WPscan.org

Según wpscan.org, el 11 % de las vulnerabilidades provienen de temas, mientras que el 37 % de las vulnerabilidades provienen del desarrollo de WordPress Core. Asimismo, el 52% restante proviene de Plugins. Supongo que ya sabes qué es un complemento de WordPress

Amenazas y Ataques

Si es un desarrollador de temas o complementos de WP, debe tener un buen conocimiento de las amenazas y los ataques para hacer que su código sea seguro y reducir la vulnerabilidad de WordPress.

Amenazas y ataques-Inyección SQL-XSS-CSRF-Redireccionamiento
Amenazas y Ataques

Hay muchos ataques como el ataque de inyección SQL, el ataque XSS, el ataque de redirección, el ataque CSRF que se pueden prevenir mediante el saneamiento de datos, la validación de datos, el escape de datos, el uso y la verificación de nonce, la redirección segura, las capacidades del usuario, etc.

Como desarrollador, su enemigo suele ser un usuario malicioso. Dichos usuarios dañan nuestro código. Cuando incorporamos Never Trust User Inputs en nuestro comportamiento diario de codificación, ya estamos a medio camino de escribir un código más seguro para reducir los problemas de seguridad en WordPress. Esto facilitará su trabajo como personalizador de WordPress.

Vulnerabilidad de WordPress: ataque de inyección SQL

En un intento de recuperar datos críticos y confidenciales, el ataque de inyección SQL inyecta un código SQL malicioso en la base de datos de WP. Se dirigen a sitios de WordPress que utilizan una base de datos SQL: MySQL, Oracle, SQL Server, etc.

Con esta intención, tienen acceso a la contraseña, la dirección de correo electrónico o cualquier dato confidencial, ya que pueden agregar, editar o leer fácilmente los datos.

Podemos tomar un ejemplo del cómic The Famous “Bobby Tables”.

Famoso Bobby Tables Comic- Amenaza y Ataque
El famoso Bobby Tables Cómic

En este cómic una dama mantiene el nombre de su hijo 'Robert'); DROP TABLE Estudiantes; –') '; con el comando SQL que, cuando ingresa a la base de datos, eliminará toda la tabla de estudiantes de la escuela si el nombre no se ha desinfectado.

Entonces, para evitar la inyección de SQL, debemos desinfectar los datos de entrada del usuario.

Analicemos la sanitización de datos en detalle.

Sanitización de datos

Desinfectar significa asegurar la entrada, limpiar la entrada del usuario. Este proceso elimina texto no válido, caracteres UTF-8 o código de la entrada para disminuir la vulnerabilidad en WordPress.

Convierte caracteres específicos de HTML en entidades, elimina todas las etiquetas. También elimina saltos de línea, tabulaciones y un espacio en blanco adicional, elimina octetos que son la razón de los principales problemas de seguridad en WordPress.

Hay muchas funciones integradas de WordPress para desinfectar los datos. Algunos de ellos están en la lista a continuación:

  1. sanitize_email(): elimina todos los caracteres que no deberían estar en el correo electrónico
  2. sanitize_text_field(): Desinfecta una cadena (de la entrada/base de datos del usuario)
  3. sanitize_file_name(): Elimina caracteres (de un nombre de archivo)
  4. sanitize_key(): Elimina las teclas excepto los caracteres alfanuméricos en minúsculas, guiones y guiones bajos.

Ejemplo de limpieza de datos:

 $title=sanitize_text_field($_POST['title']); update_post_meta($post->ID,'title',$title);

Aquí, al principio, estamos desinfectando el título. Después de la desinfección, estamos actualizando el valor del título en la base de datos de wp.

 $Name= ' Robert'); DROP TABLE Students; --') '; INSERT INTO Students VALUES ('$Name'); INSERT INTO Students VALUES ('Robert'); DROP TABLE Students; --')

Aquí, en el comando SQL anterior, el nombre tiene una cadena y caracteres especiales y entidades que se insertaron en la tabla de estudiantes, el nombre 'Robert'); Esto cierra el comando insert SQL y otro comando se ejecuta con la mitad del nombre DROP TABLE Students; –') '; y los estudiantes de esta tabla desplegable eliminan todos los registros de estudiantes de la base de datos.

Entonces, aquí, si se realizó la desinfección antes de ingresar el valor en la base de datos, entonces no habría perdido toda la tabla de la base de datos de estudiantes.

Veamos un ejemplo a continuación para hacer la desinfección.


 $Name=sanitize_text_field("' Robert'); DROP TABLE Students; --') ';"); $sql = $wpdb->prepare("INSERT INTO Students VALUES ($Name)"); /* this will only insert 'Robert DROP TABLE Students' */ $wpdb->query($sql);

Aquí, en el ejemplo anterior, la sanitización eliminó las entidades y caracteres adicionales del nombre y permite que solo se inserte la cadena en una base de datos. De esta manera, podemos insertar los datos de forma segura y estar a salvo de las inyecciones de SQL.

Siga este enlace para obtener más información sobre cómo asegurar la entrada .

Vulnerabilidad de WordPress – Ataque XSS

El ataque Cross-Site Scripting (XSS) inyecta código javascript de lenguaje de secuencias de comandos vulnerable para robar datos similares de otros usuarios, como cookies, tokens de sesión y otra información. Si tenemos información de cookies entonces podemos conectarnos automáticamente. Los problemas de seguridad en WordPress vienen con las cookies robadas, ya que podemos iniciar sesión fácilmente con otras identidades.
Se ejecuta en un navegador. Millones de personas que navegan por el sitio se verán afectadas por este ataque. Sin duda, este ataque es uno de los ataques más graves.

Ejemplo de ataque XSS:

 <script <script type=”text/javascript”>
var hacker ='../hacker.php? cookie_data=' +escape(document.cookie);
</script>
</script>

Aquí, en este ejemplo de ataque XSS, las cookies se escapan y se envían a la variable del script hacker.php 'cookie_data'

Si el atacante inyecta este script en el código del sitio web, se ejecutará en el navegador del usuario y se enviarán cookies al atacante, lo cual es un problema peligroso. Entonces, para evitar esto, necesitamos validar. Valide y desinfecte todos los datos de entrada del usuario y escape los datos de salida.

Vamos a discutir en detalles a continuación.

Validación de datos

Validar es verificar la entrada del usuario. Esto se hace para verificar si el usuario ingresa un valor válido o no.
Hay tres formas de validar los datos que son funciones PHP integradas, funciones básicas de WordPress y funciones personalizadas. Nunca escape de esto para evitar la vulnerabilidad de WordPress. Algunos de ellos están en la lista a continuación:

  1. isset()/empty(): comprobar si la variable existe o no
  2. is_email (): comprueba si los datos proporcionados están en formato de correo electrónico o no
  3. is_serialized(): comprueba si el valor es una cadena o no

Ejemplo de validación de datos:

 $number='12323'; if(intval(number)){ //do your things } else{ esc_html_e('Enter valid number','text-domain'); }

El ejemplo anterior verifica si los datos de entrada son un número o no, solo ejecutará el programa si es un número. Por lo tanto, la validación de datos ayuda a reducir los problemas de seguridad de WordPress.

Siga este enlace para obtener más información sobre la validación de datos

Escape de datos

Escapar es asegurar la salida. Es el proceso de eliminar datos no deseados, como etiquetas de secuencias de comandos o HTML mal formados. Escapar no solo convierte los caracteres HTML especiales en entidades HTML, sino que también muestra, en lugar de ejecutar. Esto se hace para evitar ataques XSS y también para asegurarse de que los datos se muestren de la forma en que el usuario espera que sean.
WordPress proporciona algunas funciones auxiliares. Se utilizan para la mayoría de los casos. Algunos de ellos son:

  1. esc_html (): escapa de caracteres específicos de HTML
  2. esc_attr(): Escapa el valor de los atributos de las etiquetas HTML
  3. esc_url(): escapa a los atributos de referencia de hipertexto

Ejemplo de escape de datos:

 $url = "javascript : alert ('Hello')";
<a href= "<?php echo esc_url ($url) ;?>"> Text </a> href= "<?php echo esc_url ($url) ;?>"> Text </a>

En el ejemplo anterior, el hacker ingresó el código del lenguaje de secuencias de comandos para desafiar los problemas de seguridad del sitio de WordPress. Entonces, para evitar esto, hemos usado esc_url para escapar del valor de la URL y luego solo estamos haciendo eco del valor en nuestro código. De esta forma hemos evitado el ataque XSS.

Vulnerabilidad de WordPress – Ataque CSRF

Discutiendo más en la vulnerabilidad de WordPress, el ataque de falsificación de solicitud entre sitios es amenazas y ataques de un clic o ataque de sesión.
El ataque CSRF permite que un atacante obligue a un usuario registrado a realizar una acción importante sin su consentimiento o conocimiento.
Aquí, un usuario autorizado transmite comandos no autorizados.
Se basa en la idea de que un usuario autorizado enviado a una determinada página o URL posiblemente pueda hacer cosas que no sabe que ha hecho. Además, se puede arreglar con el uso de nonce y verificar nonce.

Usando Nonce

WP genera un token de seguridad llamado nonce. Es un número único que no se repite solo para usted y que puede usar para una operación específica. El valor nonce es válido durante 24 horas, luego de lo cual caduca y wp generará uno nuevo. También puede establecer el tiempo de validación para nonce también.
Protege las URL y los formularios del uso indebido para reducir los problemas de seguridad existentes en WordPress.

Además, para asegurar el formulario con un nonce, cree un campo nonce que esté oculto usando la función wp_nonce_field():

 <form method="post"> <!-- some inputs here ... --> <?php wp_nonce_field( 'name_of_my_action', 'name_of_nonce_field' ); ?> </form>

A continuación se presentan algunas funciones para nonce:

  1. wp_nonce_url(): para agregar un nonce a una URL.
  2. wp_create_nonce(): para usar un nonce de forma personalizada para procesar solicitudes AJAX.

Verificando un Nonce

  1. check_ajax_referer(): comprueba el nonce (pero no el referente) y, si la comprobación falla, finaliza de forma predeterminada la ejecución del script.
  2. wp_verify_nonce() – Para verificar un nonce.
 if(isset($_POST['name_of_nonce_field']) && wp_verify_nonce($_POST['name_of_nonce_field'],'name_of_my_action')){ //do something } else{ esc_html_e('Sorry,your nonce did not verify.','text-domain'); }

Siga este enlace para obtener más información sobre nonce

Vulnerabilidad de WordPress: ataque de redirección

La vulnerabilidad de WordPress también hace que los visitantes del sitio sean redirigidos automáticamente a un sitio web malicioso.
Esto generalmente ocurre cuando un visitante redirige a cualquier otra página en lugar de la página o el sitio web que solicitó.
Si su sitio tiene mucho tráfico, este ataque puede generar menos tráfico en su sitio. Ni siquiera se dará cuenta de que el visitante de su sitio será redirigido a cualquier otra página. Sin embargo, se puede solucionar con la ayuda de Safe Redirect.

Redirección segura

Después de una acción o formulario, si está redirigiendo a un usuario a cualquier página, use wp_safe_redirect. wp_safe_redirect comprueba si hay un host permitido. Si el host no está permitido, se redirigirá a la URL del sitio. Por lo tanto, evitará el redireccionamiento malicioso a otro host. Pero esto no está comprobado por wp_redirect. Entonces, para reducir los problemas de seguridad de WordPress, usar wp_safe_redirect es una forma más segura de redirigir los enlaces.

 $redirect=admin_url('edit.php'); wp_safe_redirect($redirect);

Vulnerabilidad de las capacidades del usuario

Además del ataque de redirección, el ataque XSS, el ataque CSRF y el ataque de inyección SQL, WordPress también es vulnerable a las capacidades del usuario. Si está permitiendo que cualquier usuario ingrese a su sitio para enviar datos, verifique las capacidades del usuario. De lo contrario, serás víctima de amenazas y ataques.
Cuanto más alto sea el rol del usuario, más capacidades tendrá el usuario.
A veces, los desarrolladores simplemente se olvidan de asegurarse de que el usuario que está en una página enviando un formulario tenga los privilegios necesarios para realizar la acción o no. Traerá una fuente común de vulnerabilidad de WordPress.

 if ( current_user_can( 'edit_posts' ) ) { edit_post_link( esc_html__( 'Edit', 'wporg' ), '', ''); }

Tomemos un ejemplo de la vulnerabilidad Contact Form 7 (Tipo de vulnerabilidad de WordPress)

El número de activación de este complemento es de más de 5 millones de usuarios. Si hay un solo código vulnerable, afectará a más de 5 millones de personas.

Vulnerabilidad de privilegios-Formulario de contacto 7
Vulnerabilidad de privilegios del formulario de contacto 7

Había una vulnerabilidad de capacidad en 5.0.3 y versiones anteriores. Un usuario que haya iniciado sesión en el rol de Colaborador puede editar fácilmente los formularios de contacto. De forma predeterminada, solo era accesible para los usuarios con funciones de administrador y editor.
Entonces, había una mayor probabilidad de ser un hack. La nueva versión del complemento ha solucionado estos errores.

Siempre regresar o salir en WordPress

Si se ha perdido, regrese o muera después de completar su código mientras escribe cualquier función o llamada ajax. Puede parecer simple, pero puede dar lugar a importantes problemas de seguridad.

Asegúrate de haber agregado siempre regresar y morir en el lugar que deseas. Puede tomar un ejemplo del error #gotofail de Apple.

 defined( 'ABSPATH' ) defined( 'ABSPATH' ) or die ( "No script kiddies please!" );
function function adls_view() { global $wpdb; { global $wpdb;
            include( 'inc/frontend/smls-detail/smls-grid-inline.php' );
           exit(); }
function function adls_generate_random_string ( $length ){
           $string = '1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
            $random_string = '';
            for ( $i = 1; $i <= $length; $i ++ ) { { $random_string .= $string[ rand( 0, 61 ) ];
            }
            return $random_string;
       }
 }

Terminando

Esta fue una publicación importante para los profesionales de WordPress que se preocupan por la seguridad. A partir de esta publicación, ha aprendido sobre las diversas amenazas y ataques que traen vulnerabilidad a WordPress. Incluye una breve introducción sobre el ataque de inyección SQL, el ataque XSS, el ataque CSRF, el ataque de redirección y muchos más.

Validación-Sanitización-Escape-Nonce
Puntos para recordar

También se discutieron las diversas técnicas como el saneamiento de datos, la validación de datos, el escape de datos, el uso y la verificación de nonce, la redirección segura y las capacidades del usuario. Debido a esto, hay problemas de seguridad en WordPress.

En conclusión ,

  1. Nunca confíe en la entrada del usuario para evitar la vulnerabilidad de WordPress.
  2. Validar, desinfectar todas las entradas y escapar de todos los datos de salida
  3. ¡Confiemos en WordPress!

Si se ha enfrentado a algún problema relacionado con las amenazas y ataques mencionados anteriormente, háganoslo saber. Nuestros expertos le darán una solución adecuada en función de su problema.