1 – Empêcher l’accès direct à vos fichiers
La plupart des hébergeurs permettent l’accès direct aux fichiers sur votre serveur.
Lorsqu’on accède directement aux fichiers PHP d’un plugin, cela va surement afficher une erreur mais risque de divulguer malgré tous des informations aux hackers.
Pour éviter l’affichage des erreurs, vous pouvez ajouter le contrôle d’une constante au début du fichier PHP.
[php]
if ( ! defined( ‘ABSPATH’ ) ) {
exit; // don’t access directly
};
[/php]
2. Sanitize toutes les variables GET, POST, REQUEST
Ne jamais faire confiance à une variable entrée par l’utilisateur ou le navigateur et même envoyé depuis l’administration.
Sinon vous serez vulnérable ou attaques XSS. Des scripts Javascript seront injectés dans votre code et exécuteront du code malveillant (popup, modification des liens etc..)
Il faut toujours utiliser les fonctions « sanitize » de WordPress pour nettoyer les variables de possibles codes dangereux. Exemple de fonction : sanitize_text_field
De plus, il est recommandé de vérifier et valider que les valeurs reçues sont des valeurs conformes avant de les utiliser dans votre code. Des fonctions sont également disponibles sur WordPress.
3. Échapper (Escape en anglais) quand vous diffusez des données provenant de vos tables
Lorsque vous affichez des données provenant de vos tables (BDD MySQL par exmeple), il est aussi résonnable de nettoyer vos données, car les utilisateurs ont très bien pu écrire du code malveillant dans un champs texte. Worpdress fournies également quelques fonctions pour nous aider :
wp_kses
et wp_kses_post
which strip out untrusted HTML.
esc_js
which escapes and correctly encodes characters in text strings which you intend to echo for JavaScript.
esc_textarea
which encodes text for use inside textarea elements.
esc_url
which correctly encodes URLs and rejects invalid URLs.
esc_html
which encodes < > & " '
when outputting HTML.
esc_attr
which encodes text like esc_html for use in HTML attributes.
Par exemple si votre plugin génére et affiche du code HTML il est recommandé d’échapper les liens comme ceci :
[php]<a href=”<?php echo esc_url( $url ); ?>”><?php echo esc_html( $text ); ?></a>[/php]
C’est très simple à coder mais il faut penser à le faire partout.