J'essaie de comprendre le nettoyage des données (pas la validation des données) pour m'aider à écrire des thèmes sécurisés pour WordPress. J'ai cherché sur Internet en essayant de trouver un guide complet pour les développeurs de thèmes détaillant les meilleures pratiques. J'ai rencontré quelques ressources, notamment la page du codex intitulée Data Validation, bien qu'aucune ne m'ait été utile. La page du codex répertorie les fonctions de désinfection disponibles, leur utilisation et ce qu'elles font, mais ne parvient pas à expliquer pourquoi vous utiliseriez l'une sur l'autre ou dans quelle situation utiliseriez-vous une fonction de désinfection particulière. Le but de cet article est de demander à tout le monde de fournir des exemples de code incorrect / non désinfecté et comment il doit être réécrit pour une désinfection appropriée. Il peut s'agir d'un code général pour assainir le titre de l'article ou des articles src ou de codes plus élaborés qui gèrent l'assainissement de$_POST
données pour les requêtes Ajax.
De plus, je voudrais savoir si les fonctions WordPress pour ajouter / mettre à jour la base de données (par exemple celles mentionnées dans le bloc de code ci-dessous) prennent automatiquement en charge le travail de désinfection pour vous? Si oui, y a-t-il des exceptions lorsque vous prendriez des mesures supplémentaires pour désinfecter les données envoyées à ces fonctions WordPress?
add_user_meta
update_user_meta
add_post_meta
update_post_meta
//just to name a few
En outre, la désinfection doit-elle être effectuée différemment lors de l'écho de HTML en PHP par rapport à PHP en ligne de HTML? Pour être plus clair sur ce que je demande, voici le code:
<?php echo '<div class="some-div ' . $another_class . '" data-id="' . $id . '" >' . $text . '</div>'; ?>
<div class="some-div <?php echo $another_class; ?>" data-id="<?php echo $id; ?>"><?php echo $text; ?></div>
Les deux déclarations ci-dessus réalisent la même chose. Mais doivent-ils être santisés différemment?
Réponses:
Cette page du codex l' explique assez bien je pense.
La fonction la plus importante et la plus utilisée est probablement
esc_attr
. Prenez cet exemple:Si
$author_name
contient un"
caractère, vous fermez votre attribut, et si ce caractère est suivi,onclick="do_something();"
il pourrait empirer :)Faire
print esc_attr($author_name)
garantit que ces caractères sont encodés et le navigateur ne fait pas ce qu'il n'est pas censé faire.Il y a un cas où vous n'en avez pas besoin: lorsque vous attendez un nombre, auquel cas vous pouvez simplement convertir les données d'entrée en entier, par exemple:
Les fonctions méta * que vous avez répertoriées ici prennent déjà soin de nettoyer l'entrée pour le stockage de la base de données, vous n'avez donc pas à vous en soucier.
La
wpdb->prepare()
méthode doit être utilisée lorsque vous effectuez vous-même les requêtes DB. Voici un exemple:Les mots clés
%s
et%d
seront remplacés par vos valeurs $ _POST nettoyées.Une erreur très courante que je vois dans de nombreux plugins dans le référentiel WP.org est de lui passer une requête déjà préparée (et mal préparée), comme:
Ne fais pas ça :)
Non.
la source
Cette vidéo de Mark Jaquith a tout éclairci pour moi. http://wordpress.tv/2011/01/29/mark-jaquith-theme-plugin-security/
la source