(Contact / #373) Anti-spam du formulaire : honeypot, jeton signé, flag suspect #374
No reviewers
Labels
No labels
contact
monthly-links
site content
spam
bug
duplicate
enhancement
help wanted
invalid
question
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
serious-devs/website!374
Loading…
Reference in a new issue
No description provided.
Delete branch "contact-antispam"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #373
Implémente le combo validé : option 1 (honeypot) + option 2 (jeton signé + délai minimum) + option 5 (flag au lieu de rejet). ~100 lignes, zéro service externe, zéro infra.
Fonctionnement
contact.phpGETrenvoie un jeton"<timestamp>.<hmac(timestamp)>"(HMAC SHA-256 avecCONTACT_SECRET, qui ne quitte jamais le serveur)POST: le jeton est vérifié (signature, délai ≥ 5 s, âge ≤ 24 h). S'ajoutent le honeypot (website) et une heuristique « plus de 3 liens dans le message »[suspect]dans le titre, les raisons listées en bas du body, et le label spam si configuré. Le vrai message n'est jamais perdu, et le bot reçoit la même redirection « succès » (il ne sait pas qu'il a été flaggé)CONTACT_SECRETest absent : mode dégradé sans rejet — tout est flaggé suspect, rien n'est perdutemplates/contact.htmlposition: absolute; left: -9999px,tabindex="-1"— pas focusable au clavier)<input type="hidden" name="token">+ 10 lignes de JS inline qui récupèrent le jeton au chargement de la page⚠️ À faire côté OVH (config/secrets.php, hors repo)
Sans ces clés, le site continue de fonctionner (tout est flaggé
[suspect]), mais autant les poser avant le tag de déploiement.Vérifié
php -lOK (PHP 8.5 local, code compatible 8.1+)[suspect]+ labels spam, jeton absent / trop rapide (< 5 s) / expiré (> 24 h) / signature falsifiée →[suspect]avec la bonne raison, 4 liens →[suspect], 3 liens → propre#contact-success, alerte affichée, payload reçu sans flagzola build+ CIbuild: verte sur1165165