IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

comment proteger son formulaire sans captcha (par controle champ vide)


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 3
    Points : 2
    Points
    2
    Par défaut comment proteger son formulaire sans captcha (par controle champ vide)
    Bonjour, j'ai vu que l on pouvait "proteger" contre le spam son formulaire en creant un champ supplementaire "toto" non caché en indiquant aux visiteurs de ne pas remplir ce champs. Mais comment faire, coté traitement php (detail code ci dessous) pour verifier la condition que le champ toto est bien vide, et donc on valide l'enregistrement des donnees dans la base dans ce cas.
    Mon formulaire est en 2 partie une en html, et le post traitement en php.
    mon code html donne :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <form action="http://www.monsite.fr/validation.php" method="post">
     
    Société: <br><input type="text" name="id" maxlength="110"/><br/>
    Adresse: <br><input type="text" name="adresse" maxlength="100"/><br/>
    Code postal:<br><input type="text" name="code" maxlength="6"/><br/>
    Merci de ne pas remplir ce champs (ceci est un controle anti-Spam)<br><input type="text" name="toto" maxlength="150"/><br/>
    		<br>
     
            <input type="submit" value="Enregistrer"/>
        </form>

    le fichier de validation php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    <?php
            // Parametres de connexion à la base de données
            $BD_serveur      = "***";
            $BD_utilisateur = "***";
            $BD_motDePasse  = "****";
            $BD_base                = "****";
     
            // Récupération des paramètres POST
            $id       = $_POST["id"];
            $adresse  = $_POST["adresse"];
            $code    = $_POST["code"];
            $ville = $_POST["ville"];
            $pays = $_POST["pays"];
    $activite = $_POST["activite"];
    $mel = $_POST["mel"];
    $tel = $_POST["tel"];
    $site = $_POST["site"];
    $toto = $_POST["toto"];
     
     
            echo "Bonjour ".stripSlashes($id)." ".stripSlashes($nom).",<br/>";
     
            @mysql_pconnect($BD_serveur, $BD_utilisateur, $BD_motDePasse)
                    or die("Impossible de se connecter au serveur de bases de données.");
            @mysql_select_db($BD_base)
                    or die("Impossible de se connecter à la base de données.");
     
            $requete = "INSERT INTO annu (id, adresse, code, ville, pays, activite, mel, tel, site)
                                      VALUES ('$id','$adresse','$code','$ville', '$pays', '$activite', '$mel', '$tel', '$site')";
            $result = @mysql_query($requete);
            if (!$result) {
                    echo "L enregistrement de vos donnees a echoue. Vous etes certainement deja inscrit sous ce nom.";
            } else {
                    echo "Felicitations.....r<br> ".
                             "<br />";
            }
     
    ?>

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur C++
    Inscrit en
    Avril 2012
    Messages
    771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 771
    Points : 1 631
    Points
    1 631
    Par défaut
    Bonsoir,

    empty()

  3. #3
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 389
    Points : 10 422
    Points
    10 422
    Par défaut
    Plus rigoureusement il serait bien de tester si $_POST["toto"] existe et s'il est vide, soit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(isset($_POST["toto"]) && $_POST["toto"] == '')
    {
    //ok
    }

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Merci à tous les 2 Ca marche !!!
    En espérant que les robots tombent dans le panneau !
    cette nuit j'ai eu au moins 50 inscriptions bidon dans ma base, avec cet ajout je verrai bien ce que cela donne....

    je suis très content de ce forum qui semble être très réactif !

    puis je encore abuser, encore un autre probleme sur mon formulaire : dans ma base de données les accents sont mal encodés. (pourtant l'interclassement dans ma base est sur utf8_unicode_ci)
    pour le mot évènements j'ai événements
    mon formulaire a en entete

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" />
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

  5. #5
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    C'est très loin d'être suffisant.
    Passez à l'UTF-8 sans manquer une étape.

  6. #6
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 389
    Points : 10 422
    Points
    10 422
    Par défaut
    Citation Envoyé par legrenier59 Voir le message
    Merci à tous les 2 Ca marche !!!
    En espérant que les robots tombent dans le panneau !
    cette nuit j'ai eu au moins 50 inscriptions bidon dans ma base, avec cet ajout je verrai bien ce que cela donne...
    Tiens-nous au courant, je trouve le système un peu simpliste, mais si ça fonctionne correctement (et de façon pérenne mais ça tu ne le sauras que plus tard) c'est bon à savoir

  7. #7
    Membre expérimenté
    Homme Profil pro
    Développeur C++
    Inscrit en
    Avril 2012
    Messages
    771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 771
    Points : 1 631
    Points
    1 631
    Par défaut
    Une variable testé avec la fonction empty() renverra false si elle n'est pas présente. Donc si le teste à faire elle de vérifier qu'un variable est vide empty() est suffisant.

  8. #8
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2008
    Messages : 64
    Points : 98
    Points
    98
    Par défaut
    Si ce n'est que empty() renvoie true dans bien des cas, comme lorsque la valeur est une chaine vide, un entier égal à 0, false, tableau vide, ...

    Je suppose donc qu'en plus de vérifier la valeur, il vérifie le type de donnée avant.

    C'est une fonction à utiliser avec précaution, quand on sait exactement quelle donnée sera passée.

    http://php.net/manual/fr/function.empty.php

  9. #9
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 389
    Points : 10 422
    Points
    10 422
    Par défaut
    Citation Envoyé par Exia93 Voir le message
    Une variable testé avec la fonction empty() renverra false si elle n'est pas présente. Donc si le teste à faire elle de vérifier qu'un variable est vide empty() est suffisant.
    Oui comme le disait Meyfarth empty répond true dans bien des cas y compris quand la variable n'existe pas. Et précisément ici on veut que la variable soit présente (pour pouvoir la tester) et vide. Cela revient presque au même mais pas tout à fait et quand l'on fait du code à des fins "sécuritaires" mieux vaut être le plus rigoureux possible

Discussions similaires

  1. Réponses: 14
    Dernier message: 27/07/2006, 14h40
  2. Réponses: 3
    Dernier message: 27/01/2006, 15h48
  3. Réponses: 4
    Dernier message: 27/11/2005, 17h54
  4. [Executable]Comment lancer son programme sans fenêtre DOS
    Par the_ugly dans le forum Général Java
    Réponses: 11
    Dernier message: 09/11/2005, 07h16
  5. Réponses: 2
    Dernier message: 18/10/2005, 10h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo