web-dev-qa-db-fra.com

Pourquoi dois-je vérifier si wp_nonce_field () existe avant de l'utiliser

je ne comprends pas vraiment pourquoi vérifier si la fonction nonce existe avant de l'exécuter ...

if ( function_exists('wp_nonce_field') ) 
     wp_nonce_field('gmp_nonce_check');

je comprends sa compatibilité ascendante ...

Notez également que vous vérifiez que la fonction wp_nonce_field existe avant d'essayer de l'appeler pour des raisons de compatibilité ascendante.

mais ça ne casse pas quand même si je retourne après

if ( isset($_POST['submit']) ) {
     check_admin_referer('gmp_nonce_check');
1
Jiew Meng

La réponse est que vous ne devriez pas vérifier si wp_nonce_field () existe avant de l’utiliser!

La recommandation d'effectuer la vérification suppose que vous souhaitez être compatible avec les versions de WordPress antérieures à l'existence de la fonction. Si Rarst a raison de dire qu'il a été introduit dans la version 2.0.4, vous ne devriez PAS prendre en charge les versions antérieures, car elles ne sont absolument pas sécurisées et toute personne les utilisant doit mettre à niveau RIGHT NOW.

Généralement, vous ne devriez pas avoir à vérifier l'existence de fonctions de WP, contrairement aux fonctions de plug-ins qui pourraient ne pas être activées.

Où avez-vous vu ce commentaire que vous avez cité? Il devrait être supprimé.

5
jerclarke

Si je comprends bien votre question - vous demandez pourquoi il n’est pas nécessaire de vérifier si check_admin_referer () est également défini?

Pour autant que je voie dans la documentation, cette fonction est beaucoup plus ancienne (depuis WP 1.2.0) que wp_nonce_field () (depuis WP 2.0.4). Donc, je suppose que vous êtes beaucoup moins susceptible de rencontrer une version aussi ancienne qu’elle n’a pas check_admin_referer ().

1
Rarst

Vous vérifiez l'existence d'une fonction destinée à éviter une erreur fatale et l'arrêt de l'application ultérieure lorsque votre code est exécuté sur une version de WordPress n'incluant pas la fonction que vous tentez d'utiliser.

Est-ce que cela garantit une compatibilité ascendante? Absolument. Plus important encore, cette vérification empêche votre code de faire planter l’application entière lorsque votre code est exécuté:

La gestion des erreurs doit être "élégante" dans tout système - cela signifie que l'application doit savoir détecter ses propres erreurs et les traiter de manière appropriée avec une interruption minimale pour les utilisateurs finaux. Plus d’informations sur http://www.devshed.com/c/a/PHP/PHP-Application-Development-Part-Two/2/#wIxuV7yhLhBTU1UZ.99

Ainsi, dans votre code, vous pouvez effectuer les opérations suivantes:

if ( function_exists('wp_nonce_field') ) {
 wp_nonce_field('gmp_nonce_check');
} else {
 //do nothing
 exit() ;
}
0
Daryl