Nonces et sécurité

Article en réaction à un blog post de chez torquemag.io dont je tiens, en préambule, à souligner la qualité des articles, notamment ceux de la catégorie developers.

🔗 Globalement

Lien de l’article.

J’ai bien saisi le propos de l’article qui est de faire connaître les nonces de WordPress et d’inciter les développeuses et les développeurs à les utiliser. Certaines parties me semblent néanmoins approximatives, et comme je sais que le site fait référence et qu’il m’arrive de le recommander, je souhaite donner mon point de vue.

Toute la présentation ainsi que l’introduction aux failles CSRF est bien amenée. C’est toujours important de comprendre qu’une vérification sur les rôles utilisateurs n’est pas suffisante, ainsi ce n’est pas parce que j’écris ceci :

if ( current_user_can( 'manage_options' ) ) { /* code */ }

La fonction ne signifie pas que j’ai bien protégé mon script. Il existe des techniques d’imitation qui permettent d' »agir en tant que », sans compter les contextes type AJAX où, avec un simple compte abonné, je peux parfois lancer des actions… parce que pas de protection.

🔗 Les deux sinon rien !

L’article de torquemag explique très bien cela, ce n’est pas soit l’un soit l’autre, il faut bien utiliser les deux, à savoir nonces + capabilités. Sans rien, n’importe qui avec un simple compte abonné peut s’amuser à truander puisque loggué. Sans nonce, on s’expose à des attaques CSRF.

🔗 Là où je ne suis pas d’accord

That’s really all there is to nonces. Use them, over use them. When in doubt use them. When you don’t think you need one, use one anyway. When someone calls you out for not using one — this happens to us all — add one.

Non ! Pour celles et ceux qui ne lisent pas l’Anglais, il est dit qu’il faut user et abuser des nonces même dans le doute. Eh bien je dis non ! Il faut bien savoir ce que l’on fait, si le nonce n’est pas paramétré correctement par exemple, ou que la vérification du nonce n’est pas faite, le nonce ne sert strictement à rien !

Ça peut faire sourire mais je l’ai vu plusieurs fois et pas seulement chez des étudiants ou des débutants de manière générale. Le deuxième problème de l’article c’est sa possible mauvaise interprétation. Car le côté « usez et abusez », certains peuvent penser qu’ils faut en mettre partout, à toutes les sauces, notamment en front-end, ce qui est passablement une mauvaise idée.

Pourquoi ? Parce que le nonce est basé sur un utilisateur connecté, donc pour les non connectés, tout ce qui va s’ajouter c’est potentiellement du bug en série. Ça a tendance par exemple a bien perturber comme il faut les plugins de cache qui vont se mettre à servir des versions de cache erronées. Le nonce de WordPress se base sur la session de l’utilisateur connecté en cours. Pour un utilisateur non connecté, pas de session, le nonce est toujours le même ce qui tend a le rendre excessivement inutile.

La tentation devient forte aussi d’en mettre sur les formulaire de contact afin de réduire le spam mais là encore, mauvaise idée AMHA et je doute de l’efficacité d’une telle technique… lol

🔗 Ne pas trahir le propos de l’article

Je ne veux pas tomber dans cet écueil, d’autant que la présentation est plutôt bien faite notamment la partie comparaison entre les situations « avec », « sans » nonces et sans protection. Néanmoins dire à tous de mettre du nonce dans le doute quoiqu’il arrive ne me semble pas une bonne idée.

Il peut y avoir derrière ce message un côté « moindre mal » en se disant que de toute façon mieux vaut trop de nonces que pas assez, plutôt un bug alors qu’une faille béante responsable d’un leak voire pire. Ok ça peut se défendre, je ne prétends pas avoir la vérité révélée mais j’ai pu constater que bon nombre ont tendance à appliquer au pied de la lettre et comment leur en vouloir quand des ressources de référence leur dise « mettez ça partout quoiqu’il arrive ».

🔗 Conclusion

Evidemment que les nonces sont indispensables, notamment pour vos formulaires côtés admin, en page d’option ou dans une méta box par exemple, les capabilités se révèlent insuffisantes en matière de sécurité. Donc pour éviter de se faire « forger » (imiter) sa signature, outil puissant ! Comme tout outil, il faut apprendre à l’utiliser AVANT d’en avoir vraiment besoin, ceci applicable a bien des domaines du dév et au-delà. Restons humble, car personne n’est à l’abri d’une erreur, peu importe son niveau de connaissance, mais on peut au moins dire aux nouveaux apprenants d’apprendre avant d’utiliser.