Formulaire mail + blocage de la touche F5

Eléphant du PHP | 193 Messages

03 avr. 2007, 12:36

bonjour à tous !

J'ai un problème de sécurité au niveau d'un formulaire mail, laissé aux internautes pour nous contacter.

Il rédigent sur une page A avec leur adresse (vérifiée avec du js), le corps, le sujet,... puis au clic sur le submit (bouton envoyer de ma page), ils sont redirigés vers une page B, sur lequel on a placé le code PHP et qui stipule que l'envoi est réalisé. Problème: Si l'internaute actualise la page et qu'il valide le message d'alerte du renvoi d'informations; le mail est réexpédié: et ça sans limite, ou celle de l'hébergeur peut-être

mon code est le suivant:
<?php
if ($_POST['categorie'] == 1){$to = "[email protected]";
}else if
($_POST['categorie'] == 2){$to = "[email protected]";
}else if
($_POST['categorie'] == 3){$to = "[email protected]";}
$subject = stripslashes($_POST['sujet']);
$body = stripslashes($_POST['type']).' '.stripslashes($_POST['corps']);
$headers = "From: " . stripslashes($_POST['adresseemail']) . "\n";
mail($to,$subject,$body,$headers);
?>
Dois-je mettre une validation du type:
<?php 
if($_POST['action'] == 'submitted') {  ''
}else if{
   
 ($_POST['action'] == 'submitted')
}
?>
Si oui, dois-je le mettre sur ma page A ou sur ma page B??

Merci d''avance

Eléphant du PHP | 170 Messages

03 avr. 2007, 13:16

Tu ne peux pas bloquer une touche du clavier, impossible.

Par contre, travailler avec une variable de session et une page intermédiaire via un header location, il devient possible de vérifier juste avant l'envoi que la variable en session existe et bloquer ainsi l'envoi répétitif du même mail.
Benjamin Franklin a dit :
Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends

Eléphant du PHP | 259 Messages

03 avr. 2007, 14:00

hello,

pour empecher la répétition de formulaires avec la touche F5, il y a une méthode très simple : les jetons

dans la page du formulaire tu définis un jeton (un rand tout simple suffit) que tu passe en session et en input hidden.

dans la page de traitement tu compare le jeton en session avec le jeton du formulaire, s'ils sont égaux, tu efface le jeton en session et tu fais ton traitement. S'ils ne sont pas égaux soit le jeton session a été effacé (F5), soit le jeton formulaire est invalide car envoyé par des méthodes pas catholiques.

bon courage !

Eléphant du PHP | 193 Messages

13 juin 2007, 10:53

Nous avons fait trois pages:

- le formulaire,
- la page de traitement invisible
- les pages de résultat ( erreur ou réussite)

Plus de problème de F5.

Dès que j'aurai plus de temps, je me pencherai sur les jetons.

Merci à vous deux!

@+!