4.6 KiB
Formulaire de contact en php avec mesures antispam (contactphpantibot)
Ceci est un "hook" php afin d'ajouter un formulaire de contact en php sur des sites basiques. Il intègre quelques protections pour limiter le spam, sans passer par des captchas ou des ressources coûteuses en temps de calcul. Ça reste assez basique.
Ouais, du php. Na.
J'ai découpé en plusieurs fichiers, sans doute que ça peut se condenser. Je ne suis pas dev, il est donc possible que ce soit très foireux. Toute aide pour améliorer est bienvenue.
Installation
Prérequis
- msmtp (optionnel)
- php
Le script utilise soit la fonction mail de php soit msmtp, donc faut avoir php ET de quoi envoyer des mails sur votre serveur.
Moi, j'utilise msmtp (https://alinea.ninm.net/dokuwiki/pratique:informatique:mail_relai ), c'est bien, (presque) simple et facile. J'ai quand même laissé de quoi passer juste par la fonction php, commentez/décommenter le bon morceau dans form.php
.
Afin que php puisse utiliser msmtp, veillez à ce que les droits sur /etc/msmtprc
soient ouverts pour www-data
.
Paramétrage
Copiez les fichiers php là où vous voulez sur votre site. Vérifiez les chemins (je pourrais améliorer ça dans la config ; on verra à l'usage). Incluez "form.php" et "form_struct.php" où vous voulez sur une de vos pages php :
<?php
include 'form.php';
include 'form_struct.php';
?>
Cela permet que l'affichage et la gestion des données soit sur la même page.
Très important ! Ajoutez tout au début de la page contenant le formulaire, avant tout autre chose, avant le code html. :
<?php
session_start();
?>
Sinon, ça va râler.
Configuration
Modifiez les paramètres dans form_config.php
pour adapter à vos besoins (en particulier le mail).
Personnalisation et multilingue
Modifiez "form_lang.php" pour personnaliser les messages, voir ajouter des langues.
"form_struct.php" concerne le formulaire "presque" html. Ajoutez les classes de votre site web.
Je n'inclue pas de css, faut que ce soit cohérent avec les sites, donc : débrouillez-vous.
Il y a tout de même quelques classes, par exemple pour l'affichage des messages d'erreurs quand c'est lié à des pratiques de spam. À vous de la mettre en rouge, en gras, etc.
C'est aussi là qu'il y a la liste des questions parce que si c'est multilingue, c'est mieux de traduire vos questions, justement.
Mesures antispams
Honeypot
Il y a une case qui peut être cochée mais invisible (en principe) pour les êtres humains. Je ne sais pas trop si les lecteurs d'écran risquent de la voir donc j'ai ajouté une description.
Les bots les plus basiques vont soit tout cocher, soit rien. Or il faut laisser décoché la case "je suis un bot" et cocher "je suis un être humain" pour que l'envoi fonctionne.
Pas de liens
S'il y a un lien, ça va bloquer l'envoi. Parce que c'est rare qu'un premier contact légitime vous envoie un lien...
Mots-clés bloqués
Il y a une liste (basique) de mots-clés qui vont empecher l'envoi d'un mail. Ça demande à être complété. C'est très basique aussi bien sûr.
Question personnalisée
Ça reste assez redoutable pour pas mal de bots. Créez les votres, c'est comme ça que c'est le plus efficace.
Efficacité
Soyons honnête : ça va filtrer les plus basiques. Mais c'est déjà ça. On ne fera pas face aux IA avec ça, mais qui va brûler des tonnes d'énergie pour vous envoyer un message proposant des élargissements de péniches ? Oui, on sait, ils le feront… Mais en attendant d'avoir de meilleurs parades, ça limitera un petit peu le spam dans votre boîte.
Todo
Il faudrait ajouter
- Une gestion des délais en associant le token csrf du formulaire avec un timestamp et refuser la requete si elle est faite trop rapidement
- Une détection des ip faisant des erreurs afin de les bannir
Il faut aussi vérifier l'accessibilité. Ça semble acceptable "là", à voir quand on est inclus dans un site.
Et puis ajouter un menu déroulant avec options à choisir pour celles qui veulent trier un peu ("devis", "papote", "formation", etc). À inclure en première ligne du message.
Participer
Si vous souhaitez améliorer ce code, bienvenu !
Je ne suis PAS dev, alors : ne me demandez pas des trucs compliqués, et commentez abondamment ce que vous proposez. Je serais ravie d'améliorer ce code si on me pointe des améliorations possibles poliment.
Les règles sont très simples :
- Soyez gentils et aimables, même face aux trucs très moches.
- Commentez si vous proposez du code pour que je comprenne ce que ça fait.
- Veillez aux failles en tout genre, ajoutez des tests.