"bloquer" une page de validation de formulaire

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : "bloquer" une page de validation de formulaire

Re: "bloquer" une page de validation de formulaire

par Aureusms » 28 juin 2010, 12:34

Oui la c'est vrai :D :D :D
Je me rappelais bien qu'il y avait un truc du genre... :D :D :D

Re: "bloquer" une page de validation de formulaire

par stealth35 » 28 juin 2010, 12:06

on peux utiliser uniqid pour la valeur aléatoire :)

Re: "bloquer" une page de validation de formulaire

par Aureusms » 26 juin 2010, 00:42

Moi j'y mettrais un petit champ <input type="hidden" value="valeur_aléatoire" > en plus à vérifier.
Tu stocke la valeur aléatoirement dans une varaible de session et tu la vérifie avec if( isset( $_POST['valider'] ) ) {

Ce qui donnerrai :
Côté formulaire :
<?php
$maintenant = time();
$aleatoire = "";
for ($i = 0 ; $i < 5 ; $i++)
{
  $aleatoire .= rand (0,$maintenant);
}
$aleatoire = sha1($aleatoire);
$_SESSION["hidden_aleatoire"] = $aleatoire;
?>
<form>
  ... ton formulaire
  <input type="hidden" name="aleatoire" value="<?php echo $aleatoire; ?>" >
</form>
//côté email.php
[php]if( isset( $_POST['valider'] ) && isset($_POST["aleatoire"]) && $_POST["aleatoire"] == $_SESSION["hidden_aleatoire"]) { 
    //on teste si la variable du bouton existe et si la variable aléatoire est bien là
    //ici tu crée ton mail avec ton code
}
else {
  //on ne vient pas du formulaire soumis alors on redirige vers ce formulaire.
  header('Location: formulaire.php');
}[/php]

Ca limite un peu les fixation de formulaire (il se servent de tes condiions pour envoyer des emails en SPAM c'est de plus en plus rare mais cela arrive) car il faudra qu'il visite au moins une fois la page formulaire pour récupérer une variable aléatoire.
Ensuite tu limites un email par une variable aléatoire et là tu réduis la casse...

Re: "bloquer" une page de validation de formulaire

par Invité » 24 juin 2010, 20:50

ok merci beaucoup pour cette réponse tres détaillée
je m'y mets
bonne soirée

Re: "bloquer" une page de validation de formulaire

par d0m » 24 juin 2010, 13:03

salut Nadege,

il te suffit de mettre un test sur ta page email.php vérifiant qu'on vient bien de la page contenant ton formulaire.

Par exemple, disons que le bouton de soumission de ton formulaire a pour nom valider.
Tu testes si dans tes variables passés, la variable ayant pour nom valider est bien présente :
if( isset( $_POST['valider'] ) ) {
    //ici tu crées ton mail avec ton code
}
Si une personne tape email.php dans la barre d'adresse, il arrivera sur une page vide et il ne se passera rien.

Tu peux même faire encore mieux et dans le cas ou on ne vient pas du formulaire, on est redirigé automatiquement vers le formulaire.
Disons que la page contenant ton formulaire s'appelle formulaire.php
if( isset( $_POST['valider'] ) ) { //on teste si la variable du bouton existe
    //ici tu crée ton mail avec ton code
}
else {
  //on ne vient pas du formulaire soumis alors on redirige vers ce formulaire.
  header('Location: formulaire.php');
}
voilà pour toi.

"bloquer" une page de validation de formulaire

par nadege21 » 24 juin 2010, 07:35

Bonjour
j'ia un petit soucis
j'ai un formulaire sur mon site, les champs sont quasi tous obligatoires
quand c'est rempli on arrive a la page email.php ci dessous pour l'envoi d'un email avec les infos
par contre le hic c'est que si on tape directement email.phph ca m'envoi un email vierge
comment puis je bloquer cette page ? ou l'envoi
merci
Nadege


if (isset($_POST['mon_champ'])) {
    for ($i = 0, $c = count($_POST['mon_champ']); $i < $c; $i++) {
	$DEMANDE.=$_POST['mon_champ'][$i].", ";
	echo $DEMANDE;
    }
}
			// récupération des variables du formulaire
			$nom=stripslashes($_POST["NOM"]);
		.....
			
			$mail_adr="monemail";
			$mail_sujet="Contact depuis le site";
			$mail_mes="\nNOM. ".$nom."\nSOCIETE. ".$societe."\nACTIVITE. ".$activite."\nTEL. ".$tel."\nEMAIL. ".$email."\nTITRE. ".$titre."\nOBJET DU MESSAGE. ".$DEMANDE."\nMESSAGE. ".$message;
			
			mail($mail_adr,$mail_sujet,$mail_mes,"From: ".$email);
		?>