Appelons {n} le nombre d'essais autorisés dans un délai de {d} secondes.
L'action de "logger" revient à persister des données (dans un fichier, en BDD ou autre, comme bon te semble).
- Pour chaque requête tu log l'IP et le timestamp.
- À chaque envoi de formulaire, tu calcules le nombre de requête pour cette IP qui ont été faites dans les {d} dernières secondes.
- Si le nombre de requêtes est supérieur ou égal à {n}, tu log l'IP en question dans un emplacement réservé aux ban (une table, un autre fichier, etc).
Et bien sûr à chaque requête, avant même de logger l'IP, tu interromps le script si l'IP est considérée comme bannie.
Pense quand même à nettoyer la liste des IP bannies au bout d'un certain temps.