5 meilleures façons de résoudre la vulnérabilité de WordPress

Publié: 2020-02-01

Actuellement, WordPress couvre 33% du Web. Cela signifie qu'un grand nombre d'utilisateurs l'utilisent, ce qui attirera certainement plus d'attaquants et de pirates. Pour cette raison, il existe davantage de menaces et d'attaques telles que l'attaque par injection SQL, l'attaque par redirection, l'attaque CSRF, l'attaque XSS, etc., ce qui provoque une vulnérabilité dans WordPress. Pour cette raison, cela ne signifie pas que WordPress n'est pas sécurisé. Nous devons nous concentrer sur la désinfection des données, la validation des données, la fuite des données, l'utilisation et la vérification de nonce, la redirection sécurisée, les capacités des utilisateurs, etc. pour sécuriser WordPress. Cependant, les vulnérabilités de WordPress le rendent peu sûr. Alors, discutons des problèmes de sécurité de WordPress.

Les vulnérabilités viennent également de WordPress. Mais comment?

D'une part, il existe des menaces et des attaques majeures dues à la vulnérabilité de WordPress . D'autre part, nous devons surmonter ou empêcher ces attaques avec notre code lors du développement de WordPress.

Même si vous n'êtes pas un développeur WordPress, nous vous encourageons à lire le post car vous pourrez connaître les principales attaques qui attirent les pirates pour attaquer votre site. Et vous pourrez également comprendre comment connaître les plugins et les thèmes mal codés de WordPress. Si vous gérez une boutique en ligne, il est utile pour vous de choisir les meilleurs plugins et thèmes WooCommerce qui sont sécurisés.

Contenu
1 Vulnérabilités de sécurité de WordPress
2 Menaces et Attaques
2.1 Vulnérabilité WordPress – Attaque par injection SQL
2.2 Assainissement des données
2.2.1 Exemple de nettoyage des données :
2.3 Vulnérabilité WordPress – Attaque XSS
2.3.1 Exemple d'attaque XSS :
2.4 Validation des données
2.4.1 Exemple de validation de données :
2.5 Échappement des données
2.5.1 Exemple d'échappement de données :
2.6 Vulnérabilité WordPress – Attaque CSRF
2.7 Utiliser Nonce
2.8 Vérification d'un nonce
2.9 Vulnérabilité WordPress – Attaque de redirection
2.10 Redirection sécurisée
2.11 Vulnérabilité des capacités de l'utilisateur
2.12 Toujours revenir ou quitter dans WordPress

Vulnérabilités de sécurité de WordPress

D'où viennent les codes vulnérables ?

Au début, nous devrions avoir une bonne compréhension des problèmes de sécurité de WordPress . WordPress se compose du code principal de WordPress, des thèmes et des plugins qui incluent Php, Html, javascript et d'autres codes.

La communauté open-source inspecte le WordPress Core Code. Il y a un grand nombre de personnes qui signalent le bogue et corrigent les vulnérabilités et s'en attribuent le mérite. La vulnérabilité de WordPress peut être exploitée par une attaque par injection SQL, une attaque CSRF, une attaque XSS, une attaque par redirection et d'autres techniques similaires. Ainsi, WordPress Vulnérabilité du développement de base n'est pas beaucoup.

Ni les thèmes n'interagissent généralement avec les bases de données wp, ni les sites ne changent souvent de thèmes. Comme Gutenberg est l'éditeur par défaut de WordPress, nous devons choisir des thèmes WordPress compatibles avec Gutenberg pour de meilleures performances et une meilleure sécurité. Ainsi, moins de vulnérabilités se produisent avec lui.

D'autre part, les plugins WordPress ont des fonctionnalités et un comportement complexes. En outre, l'interaction est élevée avec les utilisateurs et les bases de données. Le site comprend un grand nombre de plugins pour avoir des fonctionnalités externes. En conséquence, ils peuvent apporter un grand nombre de vulnérabilités au site. Les plugins introduisent des vulnérabilités majeures dans WordPress.

Vulnérabilité WordPress - Menaces et attaques
Vulnérabilité WordPress – WPscan.org

Selon wpscan.org, 11% des vulnérabilités proviennent des thèmes tandis que 37% des vulnérabilités proviennent du développement de WordPress Core. De la même manière, les 52% restants proviennent de plugins. Je suppose que vous savez déjà ce qu'est un plugin WordPress

Menaces et attaques

Si vous êtes un développeur de thèmes ou de plugins WP, vous devez avoir une bonne connaissance des menaces et des attaques pour sécuriser votre code et réduire la vulnérabilité de WordPress.

Menaces et attaques-Injection SQL-XSS-CSRF-Redirection
Menaces et attaques

Il existe de nombreuses attaques telles que l'attaque par injection SQL, l'attaque XSS, l'attaque par redirection, l'attaque CSRF qui peuvent être évitées par la désinfection des données, la validation des données, l'échappement des données, l'utilisation et la vérification de nonce, la redirection sécurisée, les capacités de l'utilisateur, etc.

En tant que développeur, votre ennemi est généralement un utilisateur malveillant. Ces utilisateurs nuisent à notre code. Lorsque nous intégrons Never Trust User Inputs dans notre comportement de codage quotidien, nous sommes déjà à mi-chemin de l'écriture de code plus sécurisé pour réduire les problèmes de sécurité dans WordPress. Cela facilitera votre travail en tant que personnalisateur WordPress.

Vulnérabilité WordPress – Attaque par injection SQL

Pour tenter de récupérer des données critiques et sensibles, l'attaque par injection SQL injecte un code SQL malveillant dans la base de données WP. Ils ciblent les sites WordPress qui utilisent une base de données SQL – MySQL, Oracle, SQL Server, etc.

Pour ce faire, ils ont accès au mot de passe, à l'adresse e-mail ou à toute donnée sensible car ils peuvent facilement ajouter, modifier ou lire les données.

Nous pouvons prendre un exemple de la célèbre bande dessinée "Bobby Tables".

Tables de bobby célèbres Comic - Threat and Attack
Tables de bobby célèbres

Dans cette bande dessinée une dame garde le nom de son fils 'Robert'); DROP TABLE Étudiants; –') '; avec la commande SQL qui, une fois entrée dans la base de données, supprimera toute la table des élèves de l'école si le nom n'a pas été nettoyé.

Donc, pour éviter l'injection SQL, nous devons nettoyer les données d'entrée de l'utilisateur.

Discutons en détail de la désinfection des données.

Assainissement des données

Désinfecter signifie sécuriser l'entrée, nettoyer l'entrée de l'utilisateur. Ce processus supprime le texte, les caractères UTF-8 ou le code non valides de l'entrée pour réduire la vulnérabilité de WordPress.

Il convertit les caractères spécifiques HTML en entités, supprime toutes les balises. Il supprime également les sauts de ligne, les onglets et un espace blanc supplémentaire, les octets de suppression qui sont une raison des problèmes de sécurité majeurs dans WordPress.

Il existe de nombreuses fonctions intégrées à WordPress pour assainir les données. Peu d'entre eux sont dans la liste ci-dessous:

  1. sanitize_email() : Supprime tous les caractères qui ne devraient pas figurer dans l'e-mail
  2. sanitize_text_field() : nettoie une chaîne (à partir de l'entrée/de la base de données de l'utilisateur)
  3. sanitize_file_name() : Supprime les caractères (d'un nom de fichier)
  4. sanitize_key() : supprime les clés à l'exception des caractères alphanumériques minuscules, des tirets et des traits de soulignement.

Exemple de nettoyage des données :

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

Ici, dans un premier temps, nous assainissons le titre. Après la désinfection, nous mettons à jour la valeur du titre dans la base de données wp.

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

Ici, dans la commande SQL ci-dessus, le nom contient une chaîne et des caractères spéciaux et des entités insérées dans la table des étudiants, le nom 'Robert'); Cela ferme la commande d'insertion SQL et une autre commande s'exécute avec la moitié du nom DROP TABLE Students ; –') '; et cette table déroulante, les étudiants suppriment tous les enregistrements d'étudiants de la base de données.

Donc, ici, si la désinfection a été effectuée avant d'entrer la valeur dans la base de données, vous n'auriez pas perdu toute la table de la base de données des étudiants.

Voyons un exemple ci-dessous pour faire la désinfection.


 $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);

Ici, dans l'exemple ci-dessus, le nettoyage a supprimé les entités et les caractères supplémentaires du nom et n'autorise que l'insertion de la chaîne dans une base de données. De cette façon, nous pouvons insérer les données en toute sécurité et être à l'abri des injections SQL.

Suivez ce lien pour en savoir plus sur la sécurisation des entrées .

Vulnérabilité WordPress – Attaque XSS

L'attaque Cross-Site Scripting (XSS) injecte un code javascript de langage de script vulnérable pour voler des données similaires de l'autre utilisateur comme des cookies, des jetons de session et d'autres informations. Si nous avons des informations sur les cookies, nous pouvons nous connecter automatiquement. Les problèmes de sécurité dans WordPress viennent avec des cookies volés, car nous pouvons facilement nous connecter avec d'autres identités.
Il fonctionne sur un navigateur. Des millions de personnes qui naviguent sur le site seront affectées par cette attaque. Sans aucun doute, cette attaque est l'une des attaques les plus graves.

Exemple d'attaque XSS :

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

Ici, dans cet exemple d'attaque XSS, les cookies s'échappent et sont envoyés à la variable 'cookie_data' du script hacker.php

Si l'attaquant injecte ce script dans le code du site Web, il sera exécuté dans le navigateur de l'utilisateur et des cookies seront envoyés à l'attaquant, ce qui est un problème dangereux. Donc, pour éviter cela, nous devons valider. Validez et nettoyez toutes les données d'entrée de l'utilisateur et les données de sortie d'échappement.

Discutons en détails ci-dessous.

La validation des données

La validation consiste à vérifier l'entrée de l'utilisateur. Ceci est fait pour vérifier si l'utilisateur entre une valeur valide ou non.
Il existe trois façons de valider les données qui sont les fonctions PHP intégrées, les fonctions principales de WordPress et les fonctions personnalisées. N'y échappez jamais pour éviter la vulnérabilité de WordPress. Peu d'entre eux sont dans la liste ci-dessous:

  1. isset()/empty() : vérifie si la variable existe ou non
  2. is_email() : vérifie si les données fournies sont au format e-mail ou non
  3. is_serialized() : vérifie si la valeur est une chaîne ou non

Exemple de validation de données :

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

L'exemple ci-dessus vérifie si les données d'entrée sont un nombre ou non, il n'exécutera le programme que si c'est un nombre. Ainsi, la validation des données aide à réduire les problèmes de sécurité de WordPress.

Suivez ce lien pour en savoir plus sur la validation des données

Échappement des données

S'échapper, c'est sécuriser la sortie. Il s'agit du processus de suppression des données indésirables, telles que les balises HTML ou de script mal formées. L'échappement convertit non seulement les caractères HTML spéciaux en entités HTML, mais il les affiche également au lieu de les exécuter. Ceci est fait pour empêcher les attaques XSS et également pour s'assurer que les données s'affichent comme l'utilisateur s'y attend.
WordPress fournit quelques fonctions d'assistance. Ils sont utilisés dans la plupart des cas. Certains d'entre eux sont:

  1. esc_html() : échappe les caractères spécifiques au HTML
  2. esc_attr() : échappe la valeur des attributs des balises HTML
  3. esc_url() : échappe les attributs de référence hypertexte

Exemple d'échappement de données :

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

Dans l'exemple ci-dessus, le pirate a saisi le code du langage de script pour contester les problèmes de sécurité du site WordPress. Donc, pour éviter cela, nous avons utilisé esc_url pour échapper à la valeur de l'URL et après cela, nous renvoyons la valeur dans notre code. De cette façon, nous avons empêché l'attaque XSS.

Vulnérabilité WordPress – Attaque CSRF

En discutant plus en détail dans WordPress Vulnerability, l'attaque Cross-Site Request Forgery est une menace et une attaque en un clic ou une attaque de chevauchement de session.
L'attaque CSRF permet à un attaquant de forcer un utilisateur connecté à effectuer une action importante à son insu ou sans son consentement.
Ici, un utilisateur autorisé transmet des commandes non autorisées.
Il repose sur l'idée qu'un utilisateur autorisé envoyé à une certaine page ou URL peut éventuellement faire des choses qu'il ne réalise pas qu'il a faites. De plus, il peut être corrigé avec l'utilisation de nonce et vérifier nonce.

Utiliser Nonce

WP génère un jeton de sécurité appelé nonce. Il s'agit d'un numéro unique non répétitif qui vous est réservé et que vous pouvez utiliser pour une opération spécifique. La valeur nonce est valide pendant 24 heures, après quoi elle expire et la nouvelle sera générée par wp. Vous pouvez également définir le temps de validation pour nonce aussi.
Il protège les URL et les formulaires contre les abus afin de réduire les problèmes de sécurité existants dans WordPress.

De plus, afin de sécuriser le formulaire avec un nonce, créez un champ nonce masqué à l'aide de la fonction wp_nonce_field() :

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

Voici quelques fonctions pour nonce :

  1. wp_nonce_url() – Pour ajouter un nonce à une URL.
  2. wp_create_nonce() - Pour utiliser un nonce de manière personnalisée pour traiter les requêtes AJAX.

Vérifier un nonce

  1. check_ajax_referer() - Vérifie le nonce (mais pas le référent), et si la vérification échoue, par défaut, il met fin à l'exécution du script.
  2. wp_verify_nonce() – Pour vérifier 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'); }

Suivez ce lien pour en savoir plus sur nonce

Vulnérabilité WordPress – Attaque de redirection

WordPress Vulnerability entraîne également les visiteurs du site avec une redirection automatique vers un site Web malveillant.
Cela se produit généralement lorsqu'un visiteur redirige vers une autre page au lieu de la page ou du site Web qu'il a demandé.
Si votre site a un trafic élevé, cette attaque peut entraîner une baisse du trafic sur votre site. Vous ne réaliserez même pas que le visiteur de votre site sera redirigé vers une autre page. Cependant, il peut être corrigé à l'aide de Safe Redirect.

Redirection sécurisée

Après une action ou un formulaire, si vous redirigez un utilisateur vers n'importe quelle page, utilisez wp_safe_redirect. wp_safe_redirect recherche un hôte autorisé. Si l'hôte n'est pas autorisé, il redirigera vers l'URL du site. Ainsi, cela empêchera la redirection malveillante vers un autre hôte. Mais cela n'est pas vérifié par wp_redirect. Donc, pour réduire les problèmes de sécurité de WordPress, utiliser wp_safe_redirect est un moyen plus sûr de rediriger les liens.

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

Vulnérabilité des capacités utilisateur

Outre l'attaque de redirection, l'attaque XSS, l'attaque CSRF et l'attaque par injection SQL, WordPress est également vulnérable aux capacités de l'utilisateur. Si vous autorisez n'importe quel utilisateur à venir sur votre site pour soumettre des données, vérifiez les capacités de l'utilisateur. Sinon, vous serez victime de menaces et d'attaques.
Plus le rôle de l'utilisateur est élevé, plus l'utilisateur dispose de capacités.
Parfois, les développeurs oublient simplement de s'assurer que l'utilisateur qui se trouve sur une page soumettant un formulaire dispose des privilèges nécessaires pour effectuer ou non l'action. Cela apportera une source commune de vulnérabilité WordPress.

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

Prenons un exemple de vulnérabilité Contact Form 7 (Type of WordPress Vulnerability)

Le numéro d'activation de ce plugin est de plus de 5 millions d'utilisateurs. S'il existe un seul code vulnérable, il affectera plus de 5 millions de personnes.

Vulnérabilité des privilèges - Formulaire de contact 7
Privilège Vulnérabilité du formulaire de contact 7

Il y avait une vulnérabilité de capacité dans les versions 5.0.3 et antérieures. Un utilisateur connecté dans le rôle Contributeur peut facilement modifier les formulaires de contact. Par défaut, il n'était accessible qu'aux utilisateurs ayant les rôles d'administrateur et d'éditeur.
Donc, il y avait plus de chance d'être un hack. La nouvelle version du plugin a résolu ces erreurs.

Toujours revenir ou quitter dans WordPress

Si vous avez manqué le retour ou mourez après l'achèvement de votre code lors de l'écriture d'une fonction ou d'un appel ajax. Cela peut sembler simple, mais cela peut entraîner des problèmes de sécurité importants.

Assurez-vous d'avoir toujours ajouté le retour et la mort à l'endroit souhaité. Vous pouvez prendre un exemple du bogue #gotofail d'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;
       }
 }

Emballer

C'était un article important pour les professionnels de WordPress qui se soucient de la sécurité. À partir de cet article, vous avez découvert les diverses menaces et attaques qui apportent une vulnérabilité à WordPress. Il comprend une brève introduction sur l'attaque par injection SQL, l'attaque XSS, l'attaque CSRF, l'attaque de redirection et bien d'autres.

Validation-Assainissement-Échappement-Nonce
Points à retenir

Les différentes techniques telles que la désinfection des données, la validation des données, l'échappement des données, l'utilisation et la vérification de nonce, la redirection sécurisée et les capacités des utilisateurs ont également été abordées. Pour cette raison, il existe des problèmes de sécurité dans WordPress.

En conclusion ,

  1. Ne faites jamais confiance à l'entrée de l'utilisateur pour éviter la vulnérabilité de WordPress.
  2. Valider, assainir toutes les entrées et échapper toutes les données de sortie
  3. Faisons confiance à WordPress !

Si vous avez rencontré des problèmes concernant les menaces et attaques mentionnées ci-dessus, faites-le nous savoir. Nos experts vous donneront une solution adaptée en fonction de votre problème.