Maison >Tutoriel CMS >WordPresse >Que sont WordPress Nonces?
WordPress Security: Utilisez NONCE pour protéger les thèmes et le code du plugin
La protection de la sécurité des thèmes WordPress ou du code plug-in est cruciale et peut effectivement empêcher les attaques des utilisateurs malveillants. Nous avons déjà couvert comment nettoyer, échapper et valider les données du formulaire dans WordPress, et comment utiliser le scanner VIP pour améliorer la qualité des thèmes WordPress. Aujourd'hui, nous explorerons comment nonce (numérique ponctuel) peut aider à garder les thèmes et plugins WordPress.
wp_create_nonce()
, qui accepte un paramètre de chaîne unique représentant l'opération à protéger. Vérification NONCE est effectuée en utilisant la fonction wp_verify_nonce()
, qui accepte deux paramètres: le nonce à vérifier et l'opération associée. wordpress nonce est défini comme:
… un «numéro d'utilisation unique» pour aider à protéger les URL et les formulaires de certains types d'abus (malveillants ou autres). https://www.php.cn/link/c5af1dfde10402285102771ad64b3dac
Alors que dans WordPress, nonce n'est pas un nombre technique (c'est un hachage de lettres et de nombres), cela aide à empêcher les utilisateurs malveillants d'exécuter des actions.
Le travail de WordPress Nonce est divisé en deux parties:
Par exemple, lorsque vous supprimez un message dans l'écran d'administration WordPress, vous remarquerez que l'URL contient un paramètre _wpnonce
:
https://www.php.cn/link/18175d262a01ebf04bc03e38e48e3ffc
La routine pour supprimer un message vérifiera si le post 542 a une valeur nonce de a03ac85772
avant de supprimer le message. Si nonce n'existe pas ou ne correspond pas à la valeur attendue, le poste ne sera pas supprimé.
Cela empêche les utilisateurs malveillants de supprimer potentiellement un grand nombre de messages. Par exemple, les éléments suivants ne fonctionneront pas car nonce appartient au post ID 542:
https://www.php.cn/link/322d830da1130169fb4ca1c7543799d0 https://www.php.cn/link/dd4143061640d55fb312dd0ce8afa76e https://www.php.cn/link/9e0f9113b44003201076a9fade1b72d8
Voyons maintenant comment implémenter WordPress Nonce dans un plugin.
Commençons par un plugin de base avec son propre écran de paramètres. L'écran Paramètres a un champ qui peut être soumis et enregistré dans le tableau des options WordPress.
Entrez le code suivant dans un nouveau fichier dans wp-content/plugins/implementing-wordpress-nonces/implementing-wordpress-nonces.php
:
<code class="language-php">// ... (插件代码,与原文相同) ...</code>
Activez le plugin via WordPress Management & GT;
Cliquez sur cet élément et vous serez emmené sur l'écran des paramètres, avec un seul champ:
Entrez n'importe quelle valeur, cliquez sur "Enregistrer", si tout fonctionne, vous verrez les informations de confirmation et la valeur que vous venez d'entrer:
démontrer la vulnérabilité de sécurité
https://www.php.cn/link/0e143c3bef0f7759c230664c4dc905f8
Bien que nous puissions utiliser dans notre code au lieu de
pour démontrer plus facilement les problèmes de sécurité), cela n'aide pas - les utilisateurs malveillants peuvent toujours utiliser eux-mêmes ou vous inciter à cliquer sur Le lien vous permet d'envoyer une demande de message à cet écran, ce qui entraîne une modification des valeurs d'option. $_POST
$_REQUEST
C'est ce qu'on appelle le contrefaçon de demande croisée (ou le CSRF). Les sites Web malveillants, les e-mails, les applications, etc. entraîneront un navigateur Web de l'utilisateur à effectuer des opérations inutiles. $_REQUEST
Protégez nos plug-ins avec nonce
Comme mentionné précédemment, ce processus est divisé en deux étapes: nous devons d'abord créer un nonce qui sera soumis avec notre formulaire. Deuxièmement, nous devons vérifier le nonce lors de la soumission du formulaire.
Pour créer un champ nonce dans notre forme, nous pouvons utiliser wp_nonce_field()
:
Obtenir ou afficher des champs de formulaire cachés nonce ... utilisés pour vérifier que le contenu de la demande de formulaire provient du site actuel, pas ailleurs ...
Ajouter le code suivant au-dessus de notre bouton d'entrée:
<code class="language-php">// ... (插件代码,与原文相同) ...</code>
wp_nonce_field
accepter quatre paramètres - les deux premiers sont les plus importants:
$action
: Ceci détermine l'opération spécifique que nous exécutons et devrait être unique. Il est préférable d'utiliser le nom du plugin comme préfixe de l'opération, car il peut y avoir plusieurs opérations en cours d'exécution. Dans ce cas, nous enregistrons quelque chose, nous utilisons donc implementing_wordpress_nonces_save
$name
: Ceci détermine le nom du champ caché créé par cette fonction. Comme mentionné ci-dessus, nous avons utilisé le nom du plugin comme préfixe, nous l'avons donc nommé implementing_wordpress_nonces_nonce
Si nous rechargeons l'écran des paramètres, modifiez notre valeur et cliquez sur Enregistrer, vous remarquerez que la valeur changera toujours. Nous devons maintenant mettre en œuvre la vérification du champ non-non soumis, en utilisant wp_verify_nonce( $name, $action )
:
Vérifiez que NONCE est correct et n'a pas expiré par rapport à l'opération spécifiée. Cette fonction est utilisée pour vérifier le nonce envoyé dans la demande actuelle, généralement accessible via la variable PHP
$_REQUEST
.
Remplacez la partie "Enregistrer les paramètres" de la fonction admin_screen()
de notre plugin par le code suivant:
<code class="language-php">wp_nonce_field( 'implementing_wordpress_nonces_save', 'implementing_wordpress_nonces_nonce' );</code>
Ce code effectue les opérations suivantes:
Pour vous assurer que notre nonce est créé et vérifié, essayons à nouveau d'accéder à notre URL directe "malveillante":
https://www.php.cn/link/0e143c3bef0f7759c230664c4dc905f8 .
>Si notre nonce est implémenté et est en cours de vérification, vous verrez une notification "non valide de spécification nonce":
... (le reste est le même que le texte d'origine, mais la langue et l'expression sont ajustées en détail pour maintenir l'intention d'origine inchangée) ....
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!