Comment sécuriser les formulaires de son site web ?
En bref
Pour sécuriser un formulaire, contrôlez chaque donnée côté serveur, utilisez des requêtes préparées pour la base de données, échappez les contenus avant de les afficher, ajoutez un jeton anti-CSRF et limitez le nombre d'envois. Contre le spam, combinez un champ piège invisible et une limitation de débit avant d'imposer un CAPTCHA. Transmettez tout en HTTPS et ne collectez que les données nécessaires.
Un formulaire est une porte ouverte sur votre serveur : n'importe qui, humain ou robot, peut y envoyer ce qu'il veut. Contact, devis, inscription, connexion ou dépôt de fichier, chaque formulaire doit considérer les données reçues comme suspectes tant qu'elles n'ont pas été vérifiées. Voici les attaques courantes et les protections qui y répondent.
Quelles attaques visent les formulaires ?
| Attaque | Principe | Conséquence possible |
|---|---|---|
| Spam automatisé | Des robots remplissent le formulaire en masse. | Boîte de réception saturée, liens frauduleux relayés. |
| Injection SQL | Des commandes sont glissées dans un champ pour interroger la base de données. | Lecture, modification ou suppression de données. |
| XSS | Un script est inséré dans un champ, puis affiché à d'autres personnes. | Vol de la session d'un administrateur. |
| CSRF | Un site tiers fait envoyer le formulaire par un utilisateur connecté, à son insu. | Action réalisée sans son accord. |
| Injection d'en-têtes e-mail | Des caractères spéciaux ajoutent des destinataires au message envoyé. | Le formulaire sert de relais pour du spam. |
| Fichier piégé | Un script est déposé sous l'apparence d'un document. | Prise de contrôle du serveur. |
| Force brute | Des identifiants sont essayés en série sur un formulaire de connexion. | Compte compromis. |
1. Valider les données côté serveur
Les contrôles faits dans le navigateur, comme un champ obligatoire, améliorent le confort mais se contournent facilement. La validation qui protège se fait sur le serveur :
- type et format attendus : un code postal ne contient que des chiffres ;
- longueur maximale pour chaque champ ;
- liste fermée de valeurs pour les menus déroulants et les cases à cocher ;
- refus des retours à la ligne dans les champs réutilisés dans les en-têtes d'un e-mail.
2. Protéger la base de données et l'affichage
- Requêtes préparées : la commande et les données sont transmises séparément à la base, qui ne peut donc jamais interpréter une saisie comme une instruction.
- Échappement à l'affichage : les caractères spéciaux comme
<et>sont convertis avant d'être affichés, pour qu'un script saisi reste du texte. - Politique de sécurité du contenu : un en-tête qui indique au navigateur quels scripts il peut exécuter, en filet de sécurité.
- Droits limités : le compte utilisé par le site pour accéder à la base n'a que les permissions nécessaires.
3. Bloquer les requêtes forgées et les abus
- Jeton anti-CSRF : une valeur secrète, propre à chaque session, est ajoutée au formulaire et vérifiée à la réception.
- Cookies de session protégés avec les attributs
Secure,HttpOnlyetSameSite. - Limitation de débit : un nombre maximal d'envois sur une période donnée, par visiteur.
- Connexion : ralentissement après plusieurs échecs et double authentification pour les comptes sensibles.
4. Filtrer le spam sans pénaliser les visiteurs
- Un champ piège invisible, que seuls les robots remplissent.
- Un délai minimal entre l'affichage de la page et l'envoi.
- La limitation de débit décrite plus haut.
- Un CAPTCHA en dernier recours : il gêne certains visiteurs, notamment ceux qui utilisent des technologies d'assistance. Choisissez une solution accessible et vérifiez, si elle vient d'un tiers, les cookies qu'elle dépose et les données qu'elle transmet.
5. Encadrer les dépôts de fichiers
- vérifier le type réel du fichier, pas seulement son extension ;
- fixer une taille maximale ;
- renommer les fichiers reçus et les stocker hors du dossier public du site, ou y interdire l'exécution de scripts ;
- les analyser avec un antivirus et réserver leur consultation aux personnes autorisées.
6. Transmettre et conserver avec soin
Servez toutes les pages en HTTPS. Ne demandez que les informations utiles et fixez une durée de conservation des messages, comme l'explique notre article sur le formulaire de contact et le RGPD. Évitez de recopier des données sensibles dans les e-mails de notification : un lien vers l'espace d'administration suffit. Enfin, tenez à jour les extensions de formulaire de votre CMS. La maintenance de site internet de NexSecure inclut ce suivi des mises à jour.
Questions fréquentes
Un CAPTCHA suffit-il à protéger un formulaire ?
Non. Il freine une partie des robots, mais ne protège ni contre les injections ni contre les fichiers piégés. Il complète la validation côté serveur, les requêtes préparées et la limitation des envois.
La validation en JavaScript est-elle inutile ?
Elle reste utile pour guider le visiteur et signaler une erreur de saisie avant l'envoi. Mais elle se contourne facilement : seule la validation sur le serveur protège réellement.
Qu'est-ce qu'un champ piège, ou honeypot ?
C'est un champ invisible pour les visiteurs mais présent dans le code de la page. Les robots le remplissent automatiquement, ce qui permet d'écarter leurs envois sans rien demander aux vrais visiteurs.
Les formulaires d'un CMS sont-ils sûrs par défaut ?
Les extensions de formulaire reconnues intègrent généralement des protections de base, à condition d'être tenues à jour. Vérifiez tout de même la gestion des fichiers déposés, la conservation des messages et le filtrage du spam.
Sources
Service lié
Articles liés
Rédigé par l'équipe NexSecure. Responsable de la publication : Yohann Toumine. Dernière mise à jour le 11 septembre 2026.
Une question sur votre situation ? Parler de votre projet