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 mes paramètres actuels (travail en cours) / liste de contrôle de sécurité des données utilisée pour examiner les thèmes (les principes ne devraient pas être différents pour les plugins que pour les thèmes).
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
Réponses:
Utiliser Nonces (lorsque vous n'utilisez pas l'API Paramètres)
Les plugins et les thèmes doivent explicitement fournir une vérification de nonce de la page Paramètres, s'ils n'utilisent pas l'API Paramètres:
la source
Assainir, valider et échapper les données
Désinfectez tout ce qui pourrait entrer et sortir de (!) La base de données à la fois front-end et back-end!
Les plugins et les thèmes doivent effectuer une validation des données appropriée:
Échappez à toutes les données non fiables avant de les afficher dans les fichiers de modèle de thème
Les plugins et les thèmes doivent être utilisés
esc_attr()
pour les entrées de texte et /esc_html()
ouesc_textarea()
pour les zones de texte.Aussi disponible à partir de l'API WordPress est
esc_url()
,esc_url_raw()
,esc_js()
etwp_filter_kses()
.Mauvais exemple:
Bon exemple:
Voici une superbe vidéo de Mark Jaquith expliquant l'utilisation des fonctions d'échappement:
la source
Utilisez uniquement $ _GET / $ _POST / $ _REQUEST avec précaution et lorsque de meilleures API ne sont pas disponibles
Plugins et thèmes doivent utiliser les API des paramètres pour obtenir et enregistrer les données d'entrée de forme plutôt que de compter sur
$_POST
et$_REQUEST
données directement.la source
Utilisation
$wpdb->prepare
Lors de la création de requêtes personnalisées via l'
$wpdb
objet, 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, car lesmysql_*
fonctions familiales ont mal enseigné à tout le monde.la source
$wpdb->prepare
n'est pas la même chose que les déclarations préparées.Soyez prudent avec les fonctions PHP qui pourraient être utilisées pour exécuter du code malveillant
Une bonne lecture pour quiconque écrit PHP: Fonctions PHP exploitables sur StackOverflow.
Utiliser l' API de modification de thème
Les thèmes doivent utiliser
set_theme_mod()
les fonctions associées et non pas un schéma de noms inventé par soi-même.L'API theme_mod est une couche spécialisée pour l'API des paramètres; il garantit des noms uniques, pousse toutes les options dans un seul 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 activé
register_globals
Ne comptez pas sur
register_globals = on
. Un thème Pro que mon dernier client a acheté fait exactement cela. Je pourrais pirater n'importe quel site utilisant ce thème en 5 minutes…ThimbThumb l'a fait aussi (et le fait toujours?).
Ne créez pas de fichiers avec des autorisations d'accès large inutiles
Ne créez pas de fichiers avec des autorisations d'accès trop libérées.
Utilisez SSL si disponible
Pointez votre partage sur Twitter / Facebook / Tout lien vers l'URI HTTPS si disponible. La sécurité de votre lecteur est également importante.
la source
set_theme_mod()
particulier comment la combiner correctement avec l'utilisation de l'API Paramètres?Enregistrer les données dans un seul tableau
Les plugins 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 Paramètres gérerait cela.
la source
Vérifiez la capacité appropriée lors de l'ajout et de la sortie des pages de paramètres
Les plugins doivent utiliser une capacité appropriée (par exemple
manage_options
) pour la capacité d'ajouter la page des paramètres.Les thèmes doivent utiliser
edit_theme_options
comme capacité appropriée pour ajouter la page des paramètres.la source
edit_theme_options
avec l'API des paramètres, la soumission d'options est codée en dur à exigermanage_options
pour soumettre des mises à jour. Le ticket Trac associé peut être trouvé ici .edit_theme_options
cap à un rôle personnalisé ou à un rôle régulier , j'ai pensé qu'il pourrait être utile de souligner que l'API des paramètres dans son état actuel n'est utilisable que par les rôles ayant lamanage_options
capacité.Utilisez des tutoriels et des informations à jour
Les plug-ins et les thèmes doivent à la fois implémenter délibérément les pages Options et Paramètres et ne pas s'appuyer sur des didacticiels de site Web de copier-coller qui sont obsolètes et n'incluent pas une sécurité des données appropriée, comme celles répertoriées ci-dessous.
Exemples de choses à ne pas faire :
Comment créer une page d'options pour votre thème wordpress (1stwebdesigner.com)
Créez une impressionnante page d'options de thème WordPress partie 1 (wpshout.com)
la source
Utiliser l'API Paramètres
Les plugins et les thèmes doivent utiliser l'API Paramètres, qui est plus facile à utiliser, plus sécurisé et prend en charge une grande partie du travail acharné des pages de paramètres:
Pour obtenir de bons didacticiels sur l'utilisation de l'API Paramètres, voir:
la source
Pour les cases à cocher et les options de sélection, les plug-ins et les thèmes doivent utiliser les fonctions
checked()
etselected()
pour la sortiechecked="checked"
etselected="selected"
, respectivement.la source
checked( $theme_options['whatever_option'] )
ouchecked( 'some_value' == $theme_options['whatever_option'] )
. Je ne sais pas comment ça devient plus succinct que ça?Fonction de préfixe et noms de variables
Les plugins doivent préfixer toutes les options, fonctions personnalisées, variables personnalisées et constantes personnalisées avec plugin-slug.
Les thèmes doivent préfixer toutes les options, fonctions personnalisées, variables personnalisées et constantes personnalisées avec le thème-slug.
la source
Utilisez wp_safe_redirect () au lieu d'appeler la fonction header () de php directement lorsque vous dirigez vers une page sur le même domaine.
la source
Ajouter des pages de paramètres aux sections appropriées du menu d'administration
Les plugins doivent utiliser la
add_options_page()
fonction pour ajouter la page des paramètres du plugin auSettings
menu, plutôt que d'utiliseradd_menu_page()
pour ajouter un menu de niveau supérieur.Les thèmes doivent utiliser la
add_theme_page()
fonction pour ajouter la page des paramètres de thème auAppearance
menu, plutôt que d'utiliseradd_menu_page()
pour ajouter un menu de niveau supérieur.la source