Page 1 sur 1

formulaire anti spam

Posté : 27 mai 2008, 17:25
par thibo
Bonjour a tous, j'aimerais si possible un peu d'aide pour mes formulaire php.
Je fais beaucoup de recherche ses dernier jours sur la securiter, mais que choisir?
Captcha que je n'est vraiment pas envie d'utiliser?
Honeypot et autres...
Voici le code que j utilise pour ma contact page:
<?php
$to = "***@googlemail.com";
$subject = "EMAIL FROM CONTACT PAGE ";


$first = $_POST['first' ];
$last = $_POST['last' ];
$email = $_POST['email'];
$streetaddress = $_POST['streetaddress'];
$addressline2 = $_POST['addressline2'];
$city = $_POST['city'];
$state = $_POST['state'];
$zip = $_POST['zip'];
$country = $_POST['country'];
$phone = $_POST['phone'];
$more = $POST['more'];
$foremail = $POST['foremail'];
$specialhonors = $_POST['specialhonors'];
$headers = "From: $email\n";


$message.= "________This message was sent via the pleasant harbor website | from the contact page________" . $foremail ."\n"."\n"."\n";
$message.= "============== GENERAL INFORMATION ==============" . $foremail ."\n"."\n";
$message.= "" . $first . "";
$message.= " " . $last . "\n";
$message.= " " . $email . "\n";
$message.= "phone number : " . $phone . "\n";
$message.= "" . $streetaddress . "\n";
$message.= "" . $addressline2 ."\n";
$message.= "" . $city ."";
$message.= " " . $state ."\n";
$message.= "" . $zip ."";
$message.= " " . $country ."\n"."\n";

$message.= "============== COMMENT INFORMATION ==============" . $foremail ."\n"."\n";
$message.= "Message: " . $specialhonors ."\n"."\n";

$headers = "From:" . $email;

$sent = mail($to, $subject, $message, $headers) ;
if($sent)
{echo "Thank you, your email was sent successfully.
We will answer your inquiry as quickly as possible."; }
else
{echo "We encountered an error sending your mail"; }

?>
Se script ne contient aucune securiter, pouvais m'aider svp.
Ou me donner des liens ou je peux apprendre a securiser mes formulaire..
Apres beaucoup de recherche sur google je ne trouve casiment que des forum ou aide de 2005 ou 2006 et je ne c'est pas s'il sont vraiment bien a utiliser.

Merci d'avance,
Thibault.

Posté : 27 mai 2008, 17:51
par dunbar
Salut,

Pourquoi pas produire un formulaire dynamique avec des noms de champs différents à chaque invocation :?:
Exemple :
<?php
Session_start() ;
$_SESSION['nom'] = md5('nom') ;
$_SESSION['prenom'] = md5('prenom') ;
$_SESSION['envoyer'] = md5('envoyer') ;
?>
<form method="POST" action="verif.php">

	<p>Votre nom : <input type="text" name="<?php echo $_SESSION['nom']; ?>" size="20"></p>
	<p>Votre prénom : <input type="text" name="<?php echo $_SESSION['prenom']; ?>" size="20"></p>
	<p>&nbsp;</p>
	<p>&nbsp;</p>
	<p><input type="submit" value="Envoyer" name="<?php echo $_SESSION['envoyer']; ?>"><input type="reset" value="Rétablir" name="B2"></p>
	</form>
Un robot va avoir du mal a savoir quoi mettre correspond telle ou telle champs puisque ceux-ci sont crypté et change à chaque session.

Pour récupérer la valeur des champs il suffit de faire comme ceci.
$non = $_POST[$_SESSION['nom']] ;
C’est une piste …….. :wink:

Posté : 27 mai 2008, 18:54
par zeus
L'idée de dunbar est bonne, sauf que
md5('nom')
donnera toujours le même résultat ;)

Par contre,
md5('nom'.time())
donnera un nom différent à chaque affichage ;)

Posté : 27 mai 2008, 19:43
par thibo
Merci beaucoup,pour cette aide, :D
pensez vous que se sera suffisant pour eviter les spam?

Merci encore.
_Tibo

Posté : 27 mai 2008, 20:19
par dunbar
L'idée de dunbar est bonne, sauf que
md5('nom')
donnera toujours le même résultat ;)

Par contre,
md5('nom'.time())
donnera un nom différent à chaque affichage ;)
:afraid: Ouiiiiiiiiiiiiiiii juste j'ai voulu allez trop vite :oops:

Je voulais mettre ceci en réalité la tienne pour la date
$_SESSION['nom'] = md5('nom'.date('r'));
Ou alors inverser les champs (protection sémantique).
exemple:
<form method="POST" action="verif.php">	
	<p>Nom : <input type="text" name="bouton" size="20"></p>
	<p><input type="submit" value="Envoyer" name="nom"></p>
</form>
et la récupération
$formulaire = array('nom => 'bouton',
                              'bouton' => 'nom');
foreach($formulaire as $origine => $reel){
        $_PROPRE[$reel] = validation($_POST[$origine]) ;
}
L'exemple est pas terrible mais avec de l'imagination il y a moyen de bien casser les pieds d'un script automatique.

Posté : 27 mai 2008, 20:41
par dunbar
Merci beaucoup,pour cette aide, :D
pensez vous que se sera suffisant pour eviter les spam?

Merci encore.
_Tibo
Et bien a mon avis un robot doit pouvoir lire les champs pour les remplire donc si il ne sait pas les lire j'aime croire qu'il ne pourra pas les remplire :wink:

Posté : 27 mai 2008, 21:55
par AB
:afraid: Ouiiiiiiiiiiiiiiii juste j'ai voulu allez trop vite :oops:
D'autant que tu aurais pu indiquer ce lien http://www.phpfrance.com/forums/viewtop ... highlight= initié par un certain dunbar :lol:

Posté : 27 mai 2008, 22:00
par thibo
Merci pour cette aide je vais refaire ma forme et la renvoyer si jamais des erreurs se passe mais merci encore dunbar & zeus.

j'ai lu cet article bien interessant aussi dans l'apres midi :

http://www.digital-web.com/articles/bu ... with_php/

tibo

Posté : 27 mai 2008, 22:22
par dunbar
:afraid: Ouiiiiiiiiiiiiiiii juste j'ai voulu allez trop vite :oops:
D'autant que tu aurais pu indiquer ce lien http://www.phpfrance.com/forums/viewtop ... highlight= initié par un certain dunbar :lol:
:-$ J'aime bien taper sur mon clavier :wink:

Posté : 27 mai 2008, 23:20
par Hywan
Hey :),

En plus de protéger le nom des champs, il faut aussi protéger son contenu. Certains robots tentent d'écrire dans tous les champs qu'il trouve, desfois que … En plus, je me demande même s'ils ne se servent pas du label pour trouver la valeur d'un champ (possible après tout).

En plus des protections que l'on connaît, attention à bien supprimer les caractères \r et \n. En effet, si on introduit de tel caractère, on peut ensuite écrire de nouvelles en-têtes et se servir de ton site comme un robot de spam (arrivé à un client il y a quelques mois …).

Posté : 28 mai 2008, 00:11
par AB
Hey :),
En plus des protections que l'on connaît, attention à bien supprimer les caractères \r et \n.
Je précise, utile uniquement pour la protection des headers du mail (si mes souvenirs sont bons).

Posté : 28 mai 2008, 00:14
par Hywan
Oui, voir $_POST['email'] dans le premier code. J'ai bien précisé que ça servait à écrire de nouvelles en-têtes, donc ça concerne les en-têtes ;-).

Posté : 28 mai 2008, 01:31
par AB
Oui j'sais bien que pour toi c'est évident, mais je me mettais à la place d'un débutant qui lit ton post :wink: