Protéger formulaire de contact

Fermé
titacmoii Messages postés 6 Date d'inscription vendredi 8 novembre 2013 Statut Membre Dernière intervention 13 novembre 2013 - 8 nov. 2013 à 19:00
titacmoii Messages postés 6 Date d'inscription vendredi 8 novembre 2013 Statut Membre Dernière intervention 13 novembre 2013 - 13 nov. 2013 à 18:28
Bonjour tout le monde, je m adresse à vous parce que j 'ai pas trouvé la bonne réponse enfin j ai vu des tutos mais je suis perdus ,voila je veux protéger mon formulaire de contact de hacker et des spammeurs,sans captcha et sans js ,j ai essayé des scripts mais sans vain , j'ai mis quelque truc sur le HTML mais je sais pas si c est correcte ou non,j'ai mis des flèche pour des truc que j 'ai ajouté

HTML 


<form method="post" action="traitement.php">
<p>
<B><label for="Civilite">Civilité :</label><br/></B>
<select name="Civilite" id="Civilite">
<b><option value="Choisissez">Choisissez</option></b>
<b><option value="Monsieur">Monsieur</option></b>
<b> <option value="Madame">Madame</option></b>

</select>
</P>
<br>
<P>
<B><label>Votre Nom: *</label><input type="text/css" name="nom" id="Nom"/><br></B>
<b><label>Votre Prénom:</label><input type="text/css" name="prenom" id="prenom" /><br></b>
<b><label>Adresse:</label><input type="text/css" name="adresse" id="adresse" /><br></b>
<b><label>Ville:</label><input type="text/css" name="prenom" id="prenom" /><br></b>
<b><label>Société: *</label><input type="text/css" name="societe" id="societe" /><br></b>
<b><label>Votre N° Tel: *</label><input type="text/css" name="tel" id="tel" /><br></b>
<b><label>Votre E-mail: *</label><input type="text/css" name="email" id="email" /><br></b>
<b><label>Sujet: *</label><input type="text/css" name="sujet" id="sujet" /><br></b></P>
----> <input type="hidden" name="verif" value="<? print dechex(time()); ?>" />
---> <?php
if (time() < hexdec(@$_POST['verif']) + 2)
{
echo "Vous ne pouvez pas valider le formulaire en moins de 2 secondes.";
}
?>

<P> <b><label for="message">
Votre Message: *
</label>
<br />

<textarea name="message" id="message" rows="10" cols="60">

</textarea></b>
<INPUT TYPE="submit" VALUE="Envoyer">
<INPUT TYPE="reset" VALUE="Effacer">
</p></div>

</form>



php 

<?php
$errtxt = "";
if(empty($_POST["nom"]))
$errtxt .= "Veuillez renseigner votre nom<br />";
if(empty($_POST["societe"]))
$errtxt .= "Veuillez renseigner votre société<br />";
if(empty($_POST["tel"]))
$errtxt .= "Veuillez renseigner votre tel<br />";

if(empty($_POST["email"]))
if(!$_POST) exit;

$email = $_POST['email'];


//$error[] = preg_match('/\b[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b/i', $_POST['email']) ? '' : 'INVALID EMAIL ADDRESS';
if(!eregi("^[a-z0-9]+([_\\.-][a-z0-9]+)*" ."@"."([a-z0-9]+([\.-][a-z0-9]+)*)+"."\\.[a-z]{2,}"."$",$email )){
$error.="Adresse e-mail invalide !<br/>" ;
$errors=1;

}
if($errors==1) echo $error;

if(empty($_POST["sujet"]))
$errtxt .= "Veuillez renseigner votre sujet<br />";
if (isset($_POST['message'])) $_POST['message']=trim(stripslashes($_POST['message']));
if(empty($_POST['message']))
$errtxt .= "Veuillez renseigner votre message<br />";
if($errtxt!="")
echo ("Une/Des erreur(s) s'est/se sont produite(s) ! <br />").$errtxt;
else
{
echo("<center><font color=green><br><br><br><h2>Formulaire envoyé ! Je vous répondrais rapidement. Merci!</h2></font><br><a href=/>Cliquez ici pour revenir à l'accueil</a></center>");
$adresse = "contact@monsite.com";
$nom=htmlentities($_POST['nom']);
$email=htmlentities($_POST['email']);
$sujet=htmlentities($_POST['sujet']);
$société=htmlentities($_POST['societe']);
$message=htmlentities($_POST['message']);
$message=str_replace("\'","'",'message');
$message=addslashes($_POST['message']);
$TO = $adresse;
$head = "From: ".$adresse."\n";
$head .= "X-Sender: <".$adresse.">\n";
$head .= "X-Mailer: PHP\n";
$head .= "Return-Path: <".$adresse.">\n";
$head .= "Content-Type: text/plain; charset=utf-8\n";
$head .= "MIME-Version: 1.0\r\n";
$sujet = "Formulaire de contact";
$informations = "
Nom: ".$_POST['nom']." \r\n
Société: ".$_POST['societe']." \r\n
Tel: ".$_POST['tel']." \r\n
Email du Contact: ".$_POST['email']." \r\n
Sujet du Contact: ".$_POST['sujet']."\r\n
message: ".$_POST['message']." \r\n
";
mail($TO, $sujet ,$informations, $head);


}
?><br><br>



j'ai eu message d erreur ""Deprecated: Function eregi () est obsolète dans / home/u714458844/public_html/traitement.php sur la ligne 17 Adresse e-mail invalide!"""
puis j'ai autre problème ; meme si y a des erreur je reçois message sur ma boite email a ,je sais pas comment faire pour ne pas envoyé email si yas des erreurs ,mais une fois valider tout les champs et que y as pas d erreur ensuite message s envoie


voila tout merci pour votre aide ...

1 réponse

ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 228
Modifié par gravgun le 8/11/2013 à 22:59
Salut, niveau HTML ça commence fort:
<B><label for="Civilite">
Soit tu mets toutes les balises en majuscule à la mode des pages des années 90, soit tout en minuscule.
Ensuite,
input type="text/css"
ça vient de sortir? Non, pask' en fait ça existe pas. Les
type="text/css"
c'est pour les
<link>
dans le
<head>
; je te renvoie au paragraphe 4.10.7 du standard HTML5 qui liste les types possibles pour un input; en l'occurence tu veux text, tel et email.
Et je comprends que tu veuilles le nom de la ville; mais je doute qu'elle aie un prénom (champ déjà occupé pour le prénom du "client"):
<label>Ville:</label><input type="text/css" name="prenom"

Passons coté "sécuritay" (mal ortographié car c'est pas de la sécurité): utiliser un
<input type="hidden">
avec une date n'est pas une sécurité: un coup d'éditeur HTML (fait Ctrl+Shift+I pour voir) ou de requète paramètre spécial dans le cas d'un bot et c'est fichu. La vérif' de fréquence/vitesse d'envoi doit se faire coté serveur uniquement ou serveur+client avec une date cryptée (AES/DES/autre avec mcrypt_encrypt/decrypt).
Une pratique générique mais assez efficace pour lutter contre le spam est d'utiliser une liste de mots/expressions bannies (CCM le fait d'ailleurs).
Pour le reste des champs, une vérif' comme tu le fais est efficace; mettre une limite de caractères max serait bien aussi.
Pour la verif' de l'email; mon pauvre c'est pas bon:
eregi()
est obsolète, utilise
preg_match()
à la place; de plus ta regex est pas bonne, voilà la vraie regex pour vérifier une addresse email comme définie par la RFC822. Au fait, je plaisante, la plupart des regex fournies sur le net sont bonnes aussi.

Sur une autre note, je vois des [A tilde]© dans ton texte, qu'on te brûle au bucher (ok j'abuse :p) pour: 1. avoir mis des accents dans les noms de variable 2. avoir enregistré ton fichier en UTF8 et ouvert avec un encodage ASCII. Passe tout en UTF8 et on en reparle plus.

Ta condition
if($errtxt!="")
est pas top: préfère la variable booléenne/entière
$errors
qui sera plus claire dans tes if; pense aussi à mettre des crochets de partout, c'est mieux pour la lisibilité vu qu'apparament l'indentation tu la gères bizarrement. D'ailleurs vu comme c'est fait, ton mail sera quand même envoyé si
$errors
== 1 car tu vérifies que
$errtxt
.

(On en reparle quand c'est corrigé ;) )
from human import idiocy
del idiocy
0
titacmoii Messages postés 6 Date d'inscription vendredi 8 novembre 2013 Statut Membre Dernière intervention 13 novembre 2013
Modifié par titacmoii le 11/11/2013 à 12:07
Bonjour ,merci de m'avoir répondu ,merci bp :) !!
bon je te signale que je suis novice j apprend d'après mes erreurs :p ; j'ai corrigé quelque ligne ,mais j'ai pas compris ce que tu veux dire par:

'''Une pratique générique mais assez efficace pour lutter contre le spam est d'utiliser une liste de mots/expressions bannies (CCM le fait d'ailleurs).
Pour le reste des champs, une vérif' comme tu le fais est efficace; mettre une limite de caractères max serait bien aussi. ''''

si tu peux m'aider un peu stp sera sympa de ta part , pour la verif d email je met le preg-match () comme tu as dis mais tjr erreur ,[Avertissement: preg_match (): Unknown modificateur '+' in / home/u714458844/public_html/traitement.php on line 17] tu peux me donner syntax exacte stp ,pour la condition j ai mis $errors à la place de $errtxt ,merci pour tout
0
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 228
11 nov. 2013 à 12:19
Par "liste de mots/expressions bannies", j'entends simplement un filtrage du contenu du message: on a une liste de mots bannis, par exemple ["tata", "toto", "titi"], et le message "bonjour je m'appelle toto" sera banni car il contient "toto".
"une limite de caractères max serait bien": tu vérifies si les champs sont vides, alors vérifies aussi s'ils ne sont pas trop longs, ou bien tronque-les.
Pour l'avertissement de
preg_match
: ajoute des
/
au début et à la fin de ton expression régulière, comme ceci:
preg_match('/^[a-z0-9]+([_\\.-][a-z0-9]+)*" ."@"."([a-z0-9]+([\.-][a-z0-9]+)*)+"."\\.[a-z]{2,}/')
0
titacmoii Messages postés 6 Date d'inscription vendredi 8 novembre 2013 Statut Membre Dernière intervention 13 novembre 2013
11 nov. 2013 à 16:23
salut ;

j'ai mis le syntaxe que tu m as donné
//$errors[] = preg_match('/^[a-z0-9]+[-_.]?[a-z0-9]+[-_.]?[a-z0-9]+@[a-z]+\.[a-z]{2,}$/') ? '' : 'INVALID EMAIL ADDRESS';
if(!preg_match("[a-z0-9]+([_\\.-][a-z0-9]+)*" ."@"."([a-z0-9]+([\.-][a-z0-9]+)*)+"."\\.[a-z]{2,}"."$",$email)){
$errors.="Adresse e-mail invalide !<br/>" ;


}
if($errors==1) echo $error;

mais j'ai reçu un message d 'erreur : [ Avertissement: preg_match (): Unknown modificateur '+' in / home/u714458844/public_html/traitement.php on line 17 ]

merci de corriger si j'ai fais des bêtises lol
0
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 228
11 nov. 2013 à 16:34
Oui tu fais des bêtises: les expressions régulières de
preg_match
doivent toutes être encadrées dans des
/
, et tu as encadré celle en commentaire mais pas celle dans le
if
...
0
titacmoii Messages postés 6 Date d'inscription vendredi 8 novembre 2013 Statut Membre Dernière intervention 13 novembre 2013
13 nov. 2013 à 18:28
rebonjour ,désoler pour le retard :(

j'ai essayé mais sans vain ,j ai mis autre syntaxe le voila ,stp tu peux me dire si c est correcte au niveau de vérification d'email ,et autre chose ,même si je met l adresse correcte me met une erreur "" email invalide "" voila le code php

<?php
$errors = "";
if(empty($_POST["nom"]))
$errors .= "Veuillez renseigner votre nom<br />";
if(empty($_POST["societe"]))
$errors .= "Veuillez renseigner votre société<br />";
if(empty($_POST["tel"]))
$errors .= "Veuillez renseigner votre tel<br />";


if(empty($_POST["email"]))

$email_regex = "^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+.[a-z0-9-]";
if ( $email == "" OR !preg_match( $email_regex , $email ) )

$error=1;


if($error==1){
$errors.="Adresse e-mail invalide !<br/>" ;
}


if(empty($_POST["sujet"]))
$errors .= "Veuillez renseigner votre sujet<br />";
if (isset($_POST['message'])) $_POST['message']=trim(stripslashes($_POST['message']));
if(empty($_POST['message']))
$errors .= "Veuillez renseigner votre message<br />";
if($errors!="")
echo ("Une/Des erreur(s) s'est/se sont produite(s) ! <br />").$errors;
else
{
echo("<center><font color=green><br><br><br><h2>Formulaire envoyé ! Je vous répondrais rapidement. Merci!</h2></font><br><a href=/>Cliquez ici pour revenir à l'accueil</a></center>");
$adresse = "contact@monsite.fr";
$nom=htmlentities($_POST['nom']);
$email=htmlentities($_POST['email']);
$sujet=htmlentities($_POST['sujet']);
$societe=htmlentities($_POST['societe']);
$message=htmlentities($_POST['message']);
$message=str_replace("\'","'",'message');
$message=addslashes($_POST['message']);
$TO = $adresse;
$head = "From: ".$adresse."\n";
$head .= "X-Sender: <".$adresse.">\n";
$head .= "X-Mailer: PHP\n";
$head .= "Return-Path: <".$adresse.">\n";
$head .= "Content-Type: text/plain; charset=utf-8\n";
$head .= "MIME-Version: 1.0\r\n";
$sujet = "Formulaire de contact";
$informations = "
Nom: ".$_POST['nom']." \r\n
Société: ".$_POST['societe']." \r\n
Tel: ".$_POST['tel']." \r\n
Email du Contact: ".$_POST['email']." \r\n
Sujet du Contact: ".$_POST['sujet']."\r\n
message: ".$_POST['message']." \r\n
";
mail($TO, $sujet ,$informations, $head);


}
?><br><br>

merci bp et désoler pour dérangement
0