Le WordPress d'aujourd'hui, décodé pour les développeurs

Sécurité

« Le HTTPS suffit à sécuriser un formulaire » : ce qu’il ne protège jamais côté serveur

Un cadenas dans la barre d'adresse rassure le visiteur, mais ne dit rien de ce qui se passe une fois les données arrivées sur le serveur. Ce que le chiffrement en transit ne garantit jamais.

Par Clément Hadrot • 8 mars 2021 • 4 min de lecture • Aucun commentaire
« Le HTTPS suffit à sécuriser un formulaire » : ce qu'il ne protège jamais côté serveur

Un certificat TLS valide garantit deux choses précises : que les données échangées entre le navigateur et le serveur sont chiffrées pendant leur trajet, et que le serveur qui les reçoit est bien celui identifié par le certificat présenté. Il ne garantit rien d’autre. Cette précision, souvent perdue dans la formule raccourcie « le site est sécurisé, il a le cadenas », mérite d’être reposée clairement dès qu’un formulaire manipule des données sensibles.

Ce que le cadenas du navigateur ne dit jamais

Le petit cadenas affiché par le navigateur confirme que la connexion est chiffrée. Il ne dit rien de la façon dont les données sont traitées une fois arrivées côté serveur : une requête SQL construite par concaténation directe reste tout aussi vulnérable à une injection, qu’elle transite en clair ou dans un tunnel TLS. Le chiffrement protège contre un tiers qui intercepterait les données en transit, pas contre un traitement défaillant de ces données à leur arrivée.

Pourquoi cette confusion se répand

La généralisation du HTTPS s’est accompagnée, dans beaucoup de guides destinés à un public non technique, d’un raccourci qui associe chiffrement et sécurité globale du site. Ce raccourci n’est pas faux en soi : un site sans HTTPS expose effectivement les données en clair sur le réseau, ce qui reste un vrai risque. Le problème apparaît quand cette association devient exclusive, et que la présence du HTTPS suffit à clore toute question de sécurité côté formulaire, sans examen du traitement serveur qui suit la réception des données.

L'essentiel à retenir : TLS protège le trajet des données, jamais leur traitement une fois reçues ; Un formulaire en HTTPS peut rester vulnérable à l'injection ou à l'absence de nonce ; Le cadenas du navigateur ne renseigne sur aucune de ces protections

Ce qu’un formulaire en HTTPS peut rester exposé, malgré tout

  • Une absence de vérification de nonce, qui laisse un formulaire vulnérable à une soumission forgée depuis un autre site, indépendamment du chiffrement du transport.
  • Une requête construite par concaténation de chaînes plutôt que par des paramètres préparés, exposée à une injection SQL classique malgré le transport chiffré.
  • Une absence de vérification de capacité côté serveur avant traitement, qui permet à un utilisateur authentifié mais non autorisé de soumettre le formulaire et d’en déclencher les effets.
  • Une validation de format uniquement effectuée côté navigateur en JavaScript, contournable en soumettant directement la requête HTTP sans passer par l’interface prévue.

Ce que le certificat protège réellement

TLS protège contre l’interception passive du trafic sur un réseau partagé, comme un point d’accès Wi-Fi public, et contre certaines attaques par usurpation de serveur si la chaîne de certification est correctement vérifiée par le navigateur. Ces protections restent réelles et nécessaires, mais elles s’arrêtent à la frontière du serveur : une fois les données déchiffrées côté serveur, leur sort dépend entièrement du code qui les traite, indépendamment du protocole qui les a transportées.

Un tunnel chiffré qui débouche sur une requête SQL non préparée transporte fidèlement une faille jusqu’à la base de données.

Comment présenter cette limite à un client non technique

L’analogie d’une enveloppe scellée reste utile : TLS garantit que personne ne lit le courrier pendant son trajet postal, mais ne dit rien de ce que fait le destinataire une fois l’enveloppe ouverte. Reformuler ainsi la portée du HTTPS, plutôt que de la présenter comme une sécurité globale, aide à justifier un budget dédié à la validation côté serveur, distinct du simple renouvellement d’un certificat.

Un test rapide pour objectiver la limite

Soumettre volontairement, sur un environnement de préproduction, une valeur contenant un caractère spécial d’échappement SQL ou une charge utile de script dans un champ de formulaire en HTTPS révèle immédiatement si la validation côté serveur existe indépendamment du transport chiffré. Si cette valeur ressort telle quelle dans une page affichée sans échappement, ou provoque une erreur de base de données révélatrice, le certificat TLS du site n’a joué aucun rôle dans ce résultat, positif ou négatif.

En résumé

Le HTTPS reste une base non négociable pour tout formulaire transmettant des données, mais sa présence ne renseigne en rien sur la robustesse du traitement effectué une fois les données reçues. Vérification des nonces, requêtes préparées et contrôle des capacités répondent à des risques que le certificat TLS, aussi bien configuré soit-il, ne couvre jamais.

Partager :

À propos de l'auteur

Clément Hadrot

Développeur WordPress, passionné par Elementor, le FSE et l’automatisation par IA.

Voir tous ses articles

Dans la même veine

À lire aussi