Chrome et ses dérivés ou Edge envoient autant de requêtes que l'utilisateur clique sur un bouton Submit d'un formulaire, même dans le cas d'une requête POST.
Si la page met du temps avant d'être rafraîchie avec les données issues du serveur, par exemple si il y a beaucoup d'actions à effectuer sur le serveur, l'utilisateur peut cliquer un grand nombre de fois.

Une solution est de rajouter un blocage du bouton Submit interdisant l'envoi multiple.
Ajouter dans le bouton Submit le code Javascript suivant :
<input type='submit' onclick='submit=this ; 
 setTimeout(function() {
  submit.setAttribute("disabled", "disabled");
 }, 1);/>
Ainsi, le bouton est bloqué 1ms après avoir été cliqué (et donc avant de pouvoir être recliqué). Le submit est fait une seule fois.

Une autre solution est le ticket CSRF, mais dans ce cas, la deuxième requête renvoie un message d'erreur.

Merci à Killian d'avoir découvert ce bug dans les navigateurs et à Denis pour ses tests.
Des cookies d'analyse d'audience sont utilisés sur ce site