web-dev-qa-db-fra.com

Pourquoi autoriser le remplacement de fonctions enfichables essentielles wp_verify_nonce et wp_create_nonce?

Parmi les fonctions de /wp-includes/pluggable.php figurent les fonctions wp_verify_nonce et wp_create_nonce. Les deux fonctions sont très importantes pour la protection contre les attaques CSRF. Cependant, il est facile de remplacer ces fonctions dans un plugin afin que tous les nonces soient acceptés comme valides.

if( ! function_exists('wp_verify_nonce') ) {
  function wp_verify_nonce($nonce, $action = -1) {
    return 1;
  }
}

J'ai testé cela, et en effet, la protection CSRF est maintenant désactivée sur l'ensemble du site. Quelle est la raison pour laquelle ces fonctions sont placées dans le fichier pluggable.php si les risques de sécurité sont si évidents?

3
Honoki

Il n'y a pas de risque de sécurité dans une fonction connectable: si quelqu'un installe un plugin qui réduit la sécurité, c'est sa propre faute. D'autre part, vous pouvez remplacer les fonctions pour rendre les nonces plus uniques ou pour changer leur format.

Dans une fonction personnalisée wp_verify_nonce(), vous pouvez utiliser un troisième paramètre facultatif ou modifier le délai d'expiration d'un nonce.

De nos jours, les fonctions enfichables ne sont plus introduites. Ils sont difficiles à déboguer et vous pouvez généralement faire la même chose avec les filtres. Et puis il y a aussi le problème, vous ne pouvez jamais être sûr qu'aucun autre plugin ne redéfinira (encore une fois) la fonction pluggable après l'avoir redéfinie.

3
fuxia