En tant que wannabe WP développeur de plug-in, quels sont les principaux défauts/failles de sécurité que je devrais rechercher?
Je suis sur le point de créer un nouveau plugin avec un panneau de configuration (c.-à-d. Champs de saisie et autres). De quoi devrais-je m'inquiéter?
Par exemple, la désinfection des données représente-t-elle un gros problème puisqu'elle se trouve dans/wp-admin/area? Un utilisateur malveillant peut-il directement accéder à ma page de plug-in et envoyer POST demandes ou quelque chose du genre?
Je vous remercie!
Voici une liste de contrôle modifiée, basée sur ma liste de contrôle de sécurité des paramètres/données en cours utilisée pour la révision des thèmes (les principes ne doivent pas être différents pour les plugins par rapport à ceux utilisés pour les thèmes):
Les plugins doivent préfixer plugin-slug dans toutes les options, fonctions personnalisées, variables personnalisées et constantes personnalisées.
Les plugins doivent implémenter délibérément les pages Options de plug-in et Paramètres de plug-in, plutôt que de s'appuyer sur des scripts copier-coller de didacticiels de sites Web, tels que ceux ci-dessous, qui sont obsolètes et n'incluent pas une sécurité des données appropriée:
Les plug-in doivent utiliser la fonction add_options_page()
pour ajouter la page des 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 plugins doivent utiliser une capacité appropriée (par exemple, manage_options
) pour pouvoir ajouter la page des paramètres.
Les plugins doivent enregistrer les options dans un seul tableau, plutôt que de créer plusieurs options pour la page de paramètres. L'utilisation de l'API de configuration (voir ci-dessous) permettrait de gérer cela.
Les plugins doivent utiliser l'API Settings (voir ci-dessous) pour obtenir et enregistrer des données de saisie de formulaire plutôt que de s'appuyer directement sur les données $_POST
et $_REQUEST
.
Pour les cases à cocher et les options de sélection, les plug-ins doivent utiliser les fonctions checked()
et selected()
pour générer checked="checked"
et selected="selected"
, respectivement.
Les plugins doivent valider et assainir toutes les données non fiables avant de les entrer dans la base de données. Ils doivent également échapper à toutes les données non fiables avant d'être affichés dans les champs du formulaire Paramètres et avant d'être affichés dans les fichiers de modèle de thème:
Les plugins doivent utiliser esc_attr()
pour les entrées de texte et esc_html()
(ou esc_textarea()
dans WP 3.1) pour textareas.
Les plugins doivent explicitement fournir la vérification de la nonce de la page de configuration, si vous n'utilisez pas l'API de configuration:
Il est également fortement recommandé aux plug-ins d'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 paramètres, voir:
http://www.chipbennett.net/2011/02/17/incorporating-the-settings-api-in-wordpress-themes/
http://planetozh.com/blog/2009/05/handling-plugins-options-in-wordpress-28-with-register_setting/
Si vous souhaitez consulter un thème avec une page de paramètres de thème sécurisée et solidement codée, consultez ce thème:
http://wordpress.org/extend/themes/coraline
Il y a deux aspects à cela:
Principes de base.
Détails.
defined('ABSPATH') or die('Access denied');
au script de chaque plugin utilisé directement par wordpress