formulaire anti spam

Petit nouveau ! | 3 Messages

27 mai 2008, 17:25

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.

ViPHP
ViPHP | 2291 Messages

27 mai 2008, 17:51

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:

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

27 mai 2008, 18:54

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 ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Petit nouveau ! | 3 Messages

27 mai 2008, 19:43

Merci beaucoup,pour cette aide, :D
pensez vous que se sera suffisant pour eviter les spam?

Merci encore.
_Tibo

ViPHP
ViPHP | 2291 Messages

27 mai 2008, 20:19

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.

ViPHP
ViPHP | 2291 Messages

27 mai 2008, 20:41

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:

ViPHP
AB
ViPHP | 5818 Messages

27 mai 2008, 21:55

: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:

Petit nouveau ! | 3 Messages

27 mai 2008, 22:00

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

ViPHP
ViPHP | 2291 Messages

27 mai 2008, 22:22

: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:

ViPHP
ViPHP | 4674 Messages

27 mai 2008, 23:20

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 …).
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

ViPHP
AB
ViPHP | 5818 Messages

28 mai 2008, 00:11

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).

ViPHP
ViPHP | 4674 Messages

28 mai 2008, 00:14

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 ;-).
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

ViPHP
AB
ViPHP | 5818 Messages

28 mai 2008, 01:31

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: