Quelles sont les meilleures pratiques de sécurité pour les plugins et les thèmes WordPress? [fermé]

21

Comme suggéré dans cette question , j'ajoute ce sujet en tant que nouvelle question pour la discussion / le vote de la communauté. concernant les meilleures pratiques pour la sécurité des plugins / thèmes.

Voici la liste de contrôle de départ, basée sur la liste de contrôle de sécurité des paramètres / données actuelle (en cours de préparation) utilisée pour la révision des thèmes (les principes ne doivent pas être différents pour les plug-ins, mais pour les thèmes).

Si vous souhaitez consulter un thème avec une page de paramètres de thème sécurisée et codée de manière solide, consultez ce thème:
enlace

    
posée Chip Bennett 13.04.2017 - 14:37
la source

13 réponses

13

Utiliser des nonces (lorsque vous n'utilisez pas l'API de configuration)

Les plug-ins et les thèmes doivent explicitement fournir la vérification nonce de la page de configuration, si vous n'utilisez pas l'API de configuration:

réponse donnée Rarst 01.04.2011 - 14:45
la source
12

Désinfecter, valider et échapper des données

Désinfectez tout ce qui pourrait entrer et sortir de (!) la base de données à la fois en amont et en aval!

Les plug-ins et les thèmes doivent effectuer la validation des données appropriée:

  1. Validez et nettoyez toutes les données non fiables avant de les saisir. dans la base de données
  2. Échapper à toutes les données non fiables avant de les afficher dans le formulaire Paramètres. champs
  3. Échapper à toutes les données non fiables avant de les exporter dans le modèle de thème fichiers

Les plugins et les thèmes doivent utiliser esc_attr() pour les entrées de texte et esc_html() ou esc_textarea() pour les zones de texte.

Egalement disponible à partir de l'API WordPress: esc_url() , esc_url_raw() , esc_js() et wp_filter_kses() .

Mauvais exemple:

<?php $url = 'javascript:pwnd()'; ?>
<a href="<?php echo $url; ?>">anchor</a>

Bon exemple:

<a href="<?php echo esc_url($url); ?>">anchor</a>

Voici une superbe vidéo de Mark Jaquith expliquant l'utilisation des fonctions d'échappement:

réponse donnée Chris_O 31.03.2011 - 21:12
la source
9

Utilisez uniquement $ _GET / $ _POST / $ _REQUEST avec précaution lorsque de meilleures API ne sont pas disponibles

Les plug-ins et les thèmes doivent utiliser l'API des paramètres pour obtenir et enregistrer des données d'entrée de formulaire plutôt que de s'appuyer directement sur les données $_POST et $_REQUEST .

    
réponse donnée Rarst 31.03.2011 - 20:43
la source
9

Utilisez $wpdb->prepare

Lors de la création de requêtes personnalisées via l'objet $wpdb , utilisez toujours $wpdb->prepare pour remplir les espaces réservés avec des valeurs. au lieu d'écrire les requêtes avec des données mélangées avec du code SQL, comme les fonctions de la famille mysql_* l'ont mal enseigné à tout le monde.

    
réponse donnée Matteo Riva 17.08.2011 - 14:01
la source
8

Soyez prudent avec les fonctions PHP pouvant être utilisées pour exécuter du code malveillant

Une lecture intéressante pour toute personne écrivant en PHP: fonctions PHP exploitables sur StackOverflow.

Utilisez API de modification de thème .

Les

thèmes doivent utiliser set_theme_mod() et les fonctions connexes non comme un système de noms inventé par eux-mêmes.
L'API theme_mod est une couche spécialisée pour l'API de paramètres. il garantit des noms uniques, place toutes les options dans un tableau et est, d'après mon expérience, beaucoup plus facile à gérer. De plus, il propose des filtres standardisés pour les plugins, ce qui est bon pour l’interopérabilité.

Éviter l'activation de register_globals

Ne vous fiez pas à register_globals = on . C’est exactement ce que fait mon dernier client, un Thème Pro . Je pourrais pirater n'importe quel site utilisant ce thème en 5 minutes…
ThimbThumb a fait cela aussi (et le fait toujours?).

Ne créez pas de fichiers avec des autorisations d'accès étendues inutiles

Ne créez pas de fichiers avec des autorisations d'accès trop restrictives.

Utilisez SSL si disponible

Pointez vos liens Partager sur Twitter / Facebook / N'importe quoi vers l'URI HTTPS, le cas échéant. La sécurité de votre lecteur est également importante.

    
réponse donnée fuxia 31.03.2011 - 00:03
la source
7

Enregistrer les données dans un tableau unique

Les plug-ins et les thèmes doivent enregistrer les options dans un seul tableau, plutôt que de créer plusieurs options pour la page des paramètres. L’utilisation de l’API des paramètres s’occuperait de cela.

    
réponse donnée Chip Bennett 31.03.2011 - 22:26
la source
6

Vérifiez la fonctionnalité appropriée lors de l'ajout et de la sortie de pages de paramètres

Les plug-ins doivent utiliser une fonctionnalité appropriée (par exemple, manage_options ) pour pouvoir ajouter la page de paramètres.

Les

thèmes doivent utiliser edit_theme_options comme possibilité appropriée pour ajouter la page des paramètres.

réponse donnée Rarst 31.03.2011 - 20:56
la source
5

Utiliser des tutoriels et des informations à jour

Plugins & Les thèmes doivent à la fois implémenter les pages Options et Paramètres de manière volontaire et ne pas s'appuyer sur des didacticiels de copier-coller de sites Web obsolètes et ne comprenant pas une sécurité des données appropriée, telles que celles répertoriées ci-dessous.

Exemples de ce que ne pas faire :

réponse donnée t31os 31.03.2011 - 22:23
la source
4

Utiliser les paramètres de l'API

Les plug-ins et les thèmes doivent utiliser l'API Settings, qui est plus facile à utiliser, plus sécurisée et prend en charge une grande partie du travail acharné des pages de paramètres:

Pour un bon tutoriel sur l'utilisation de l'API de configuration, voir:

réponse donnée Chip Bennett 31.03.2011 - 20:54
la source
1

Pour les cases à cocher et les options sélectionnées, les plug-ins et les thèmes doivent utiliser les fonctions checked() et selected() pour la sortie de checked="checked" et selected="selected" , respectivement.

    
réponse donnée Chip Bennett 30.03.2011 - 23:09
la source
1

Fonction de préfixe et noms de variable

Les plugins doivent préfixer plugin-slug dans toutes les options, fonctions personnalisées, variables personnalisées et constantes personnalisées.

Les thèmes doivent préfixer theme-slug dans toutes les options, fonctions personnalisées, variables personnalisées et constantes personnalisées.

    
réponse donnée Chip Bennett 31.03.2011 - 22:29
la source
1

Utilisez wp_safe_redirect () au lieu d'appeler la fonction header () de php directement lorsque vous vous dirigez vers une page du même domaine.

    
réponse donnée mfields 18.04.2011 - 21:41
la source
0

Ajouter des pages de paramètres aux sections appropriées du menu administrateur

Les plug-ins doivent utiliser la fonction add_options_page() pour ajouter la page de paramètres du plug-in au menu Settings , plutôt que d'utiliser add_menu_page() pour ajouter un menu de niveau supérieur.

Les thèmes doivent utiliser la fonction add_theme_page() pour ajouter la page des paramètres de thème au menu Appearance , plutôt que d'utiliser add_menu_page() pour ajouter un menu de niveau supérieur.

    
réponse donnée Chip Bennett 31.03.2011 - 22:27
la source

Lire d'autres questions sur les étiquettes