securiser un formulaire avec mot a retaper

Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics

jooki
Nouveau WRInaute
 
Messages: 4
Inscription: Mar Juil 22, 2008 16:15

securiser un formulaire avec mot a retaper

Message le Mar Juil 29, 2008 4:57

Bonjour
j'ai un formulaire que j'aurais voulu sécuriser avec un mot a taper antispam et je ne c'est pas quoi mettre dans le code pour qu'il reconnaisse le mot antispam, ca fait plusieurs heures que je trifouille le code mais sans résultat, en plus j'aurais voulu mettre des stripslashes et htmlspecialchars.

Si une bonne âme pouvait me mettre dans le code ce qu'il faut pour le mot antispam et les stripslashes, htmlspecialchars et m'expliquer car la je seche !



Code: Tout sélectionner
<?
        /* configuration du script d'envoi */
        $nom_du_site = "monsite" ; // utilisé lors de l'envoi de la copie du message
        $to = "monmail" ; // obligatoire : email du destinataire - contact du site
        $copie_a_expediteur = 0 ; // mettre 1 si on veut envoyer une copie du message à l'expéditeur / visiteur du site
        $copie_au_webmaster = 1 ; // mettre 1 si on veut faire un Cc au webmaster du site - souvent utile pour débugger au départ ou si on veut être au courant des messages qui transitent via le site
        $mail_webmaster = "monmail" ; // mettre adresse du webmaster pour envoi du Cc
        /* fin de la config */

        // tests de sécurité si le formulaire a été envoyé
        if (isset($_POST["send"]) ){
            $secure = true ;
            $from = $_POST["from"] ;
            $sujet=mb_encode_mimeheader($_POST["sujet"]) ;
         $antispam = $_POST["antispam"] ;
            //tests des adresses mail expéditeur, destinataire et webmaster
            if(!preg_match('/^[A-Z0-9._-]+@[A-Z0-9][A-Z0-9.-]{0,61}[A-Z0-9]\.[A-Z.]{2,6}$/i',$from)) {
                echo('Adresse de courriel Invalide <br />') ;
                $secure = false ;
            }
            if(!preg_match('/^[A-Z0-9._-]+@[A-Z0-9][A-Z0-9.-]{0,61}[A-Z0-9]\.[A-Z.]{2,6}$/i',$mail_webmaster)) {
                echo('Adresse de courriel Invalide <br />');
                $secure = false ;
            }
            if(!preg_match('/^[A-Z0-9._-]+@[A-Z0-9][A-Z0-9.-]{0,61}[A-Z0-9]\.[A-Z.]{2,6}$/i',$to)) {
                echo('Adresse de courriel Invalide <br />');
                $secure = false ;
            }
         }
         if ($antispam == 'antispam')
         {
            // test des saisies obligatoires
            if ( !$from ||!$sujet ||!$antispam ||!$txtmsg ) {
                echo('Mail + sujet + \'antispam\' et message obligatoires <br />');
                $secure = false ;
            }
        }

        if ( !$secure ){
        // Si le formulaire n'a pas été envoyé ou n'est pas secure, on l'affiche
        ?>

        <form action="" method="post">
            <p></p>
            <fieldset>
                    <legend style="margin-bottom: 5px;">Envoyer un message (<strong>*</strong> champs obligatoires)</legend>
                    <p style="float: left;">
                        <label for="nom">Nom :</label>
                        <br />
                        <input id="nom" name="nom" type="text"
                        value="<? if ($_POST["nom"]) echo $_POST["nom"]?>" />
                        <br />
                        <label for="prenom">Prénom :</label>
                        <br />
                        <input id="prenom" name="prenom" type="text"
                        value="<? if ($_POST["prenom"]) echo $_POST["prenom"]?>" />
                        <br /><br />
                        <label for="from">Adresse de courriel<strong>*</strong> : </label>
                        <br />
                        <input id="from" name="from" type="text"
                        value="<? if ($_POST["from"]) echo $_POST["from"]?>" />
                  </p>
                  <br />
                        <label for="sujet">Sujet<strong>*</strong> :</label>
                        <br />
                        <input id="sujet" name="sujet" type="text"
                        value="<? if ($_POST["sujet"]) echo $_POST["sujet"]?>" />
                        <br />
                  <p><input type="text" value="Tapez ici le mot 'antispam'" size="35" name="antispam" onfocus="javascript:this.value=''" /></p>
                  <br />
                  <br />
                  <br />
                        <label for="txtmsg">Message :<strong>*</strong></label>
                        <br />
                        <textarea id="txtmsg" name="txtmsg" cols="30" rows="10"><?
                        if ($_POST["txtmsg"])
                            echo $_POST["txtmsg"] ;
                        else echo "Votre message..." ;
                        ?></textarea>

                        <br /><br />
                        <input value="Envoyer" name="send" type="submit" />
                    </p>
                </fieldset>
        </form>

        <?
        }
        else{
            // Si c'est ok - secure et données
            // on concatène le texte du message
            $message = $_POST[txtmsg]."\n \nEnvoyé par : ".$_POST[nom]." ".$_POST[prenom]."\n" ;
            // création du header du message
            $headers = "From: ".$from."\n" ;
            $headers.= "Reply-To: ".$from."\n" ;
            $headers.= "X-Mailer: PHP/".phpversion()."\n" ;
            // Cc au webmaster si choix activé
            if ( $copie_au_webmaster == 1 ) {
                $headers.= "Cc: $mail_webmaster\n" ;
            }
            // On envoi le mail :
            if ( mail($to,$_POST["sujet"],stripslashes($message),$headers) ){
                // Si le mail a bien été envoyé, message de confirmation
                echo "Votre mail a bien été envoyé à $to.<br />";
            }
            else{
                // sinon, message d'erreur.
                echo "Votre mail n\'a pas pu être envoyé.<br />";
            }
            // envoi d'une copie à l'expéditeur si option choisie
            if ( $copie_a_expediteur == 1 ) {
                $message = "Copie du mail envoyé sur le site ".$nom_du_site."\n\n". $message ;
                $headers = "From: ".$to."\n" ;
                $headers.= "X-Mailer: PHP/".phpversion()."\n" ;
                $sujet = "Copie de : ". $_POST["sujet"] ;
                if ( mail($from,$sujet,stripslashes($message),$headers) ){
                    // Si le mail a bien été envoyé, message de confirmation
                    echo "Vous allez recevoir une copie du mail envoyé.<br />";
                }
                else{
                    // sinon, message d'erreur.
                    echo "Erreur lors de l'envoi de la copie.<br />";
                }
            }
        }
        ?>


Merci d'avance, ca pourra servir d'exemple de mail pour quelqu'un d'autre.

Xcepty
Nouveau WRInaute
 
Messages: 49
Inscription: Jeu Juin 30, 2005 7:50

Message le Mar Juil 29, 2008 9:24

Bonjour jooki,

Si j'étais toi j'aurai plutôt opté pour un CAPTCHA.


mahdivitche
WRInaute passionné
WRInaute passionné
 
Messages: 902
Inscription: Dim Jan 06, 2008 0:33

Message le Mar Juil 29, 2008 9:37


Xcepty
Nouveau WRInaute
 
Messages: 49
Inscription: Jeu Juin 30, 2005 7:50

Message le Mar Juil 29, 2008 10:15

Merci pour les liens mahdivitche ^^


mahdivitche
WRInaute passionné
WRInaute passionné
 
Messages: 902
Inscription: Dim Jan 06, 2008 0:33

Message le Mar Juil 29, 2008 10:19

de rein :lol:

si tu as besoin des autres exepmles de captcha : http://www.captcha.fr/

le telechargement est gratuit :lol:

jooki
Nouveau WRInaute
 
Messages: 4
Inscription: Mar Juil 22, 2008 16:15

Message le Mar Juil 29, 2008 17:29

ok merci je vais voir pour le captcha

lbache
Nouveau WRInaute
 
Messages: 1
Inscription: Mar Nov 04, 2008 15:49

Réflexion

Message le Mar Nov 04, 2008 16:05

Un truc que je ne comprend pas bien dans votre solution. Pourquoi ennuyer le visiteur à saisir un code qui est une manip contraignante alors que l'on peut faire la manip pour lui.
Exemple :

On génère une clé :
Code: Tout sélectionner
$my_array = array("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9");
$var_cles ='';
for ($i=0; $i<=6; $i++) { // 6 si vous voulez une clé à 6 chiffres
  $random = array_rand($my_array);                   
  $var_cles .= $my_array[$random];
}

On inititalise une variable session avec comme valeur cette clé :
Code: Tout sélectionner
$_SESSION[verif]=$var_cles;

Puis on place un champ hidden dans le formulaire avec comme valeur la clés :
Code: Tout sélectionner
<input type="hidden" name="verif" value="<?php echo $var_cles; ?>">


Sur la page suivante, il suffit de vérifier que la variable SESSION soit identique à la variable du champ hidden.
Comme la variable ne peut être modifiée que par script, si elle ne sont pas identique c'est que le formulaire vient d'un autre serveur.

Me trompe-je ?


Bacteries
WRInaute accro
WRInaute accro
 
Messages: 1333
Inscription: Jeu Mai 27, 2004 13:04

Message le Mar Nov 04, 2008 17:02

Y'a aussi des robots qui remplissent les formulaires, donc là ta protection ne fonctionne pas.


Formation recommandée sur ce thème :

Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :

Consultez la description détaillée des produits ou services de Google suivants : Google Bombing

  • Analyseur de densité
    Cet outil vous permet de calculer l'indice de densité d'un mot-clé d'une page web. Il est calculé à la fois pour la balise TITLE, la balise META description et l'ensemble du texte de la page.
  • Suggestion de mots
    Cet outil vous fournit une liste de mots sémantiquement proches du mot que vous fournissez en entrée. Il peut servir à vous donner des idées de mots à utiliser sur vos pages, voire de contenus à ajouter.
  • Suggestion de mots Google
    Cet outil vous permet d'obtenir une liste de 10 mots ou expressions suggérés par Google sur la base d'un mot que vous fournissez.


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités