Probleme simple de formulaire securisé pour un expert

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.

  Revue du sujet
 

  Étendre la vue Revue du sujet : Probleme simple de formulaire securisé pour un expert

par organi-web » 21 févr. 2008, 10:40

J'ai utilisé le systeme décrit par Cyrano à de multiples reprises ...
Je confirme, aucun probleme de spam depuis ce moment

Re: Où mettre la fonction mail() dans captcha_valid.php ????

par Ripat » 20 févr. 2008, 08:44

Dans captcha_valid.php tu mets le code de la fonction mail() à quel place?

Est-ce que cette fonction doit etre dans captcha_valid.php?
Oui, une fois que tu es sûr que les champs passés par le formulaire sont conformes à ce que tu attends et que le test du captcha est bon, tu peux t'envoyer le mail du contenu des variables $_POST. Tu mets ce code à l'endroit signalé dans mon exemple par // suite de ton code ...

@ cyrano: pas mal, J'aime les solutions simples comme celle-là. Comme celle de poser des questions que seul un humain peut lire et interpréter (test de Turing). Dans le formulaire: "un plus un?", "de quelle couleur est le cheval blanc de Napoléon?". Simple à mettre en place et si ton site ne protège pas les codes d'accès à l'arme nucléaire, largement suffisant. C'est le principe du rasoir d'Occam ou bien KISS (Keep It Simple, Stupid).
La simplicité est la sophistication suprême
Léonard de Vinci

par Cyrano » 20 févr. 2008, 07:37

Autre option simplissime que j'ai utilisé avec succès. J'ai mis ça en place sur un livre d'or en juillet dernier et depuis, je n'ai plus eu un seul spam dessus.

Dans le formulaire de saisie, j'ai un textarea : jusque là, rien que de tout à fait normal. J'en ai mis un second juste après.

Le premier a pour attribut name (et attribut id) "commentaires" et le second "spam" : via une feuille de style externe, je masque l'affichage du textarea "commentaires" (et non "spam", c'est voulu, explications plus loin) avec un : textarea#commentaires {display: none}

Lors de la validation, je vérifie que le contenu de $_POST['commentaires'] est bien vide : un internaute normal ne voit pas ce champ et ne peut rien y mettre. Le robot spammeur en revanche voit parfaitement bien les deux champs et a un certain nombre de mots clés pour contourner les différentes protections : Il se garde donc bien de mettre du contenu dans la zone "spam".

Pourquoi récupérer "spam" et non "commentaires" ? Parce que beaucoup de robots spamment sans même se rendre sur le site : ils ont enregistré le formulaire et envoie une requête http avec un formulaire local directement vers ta page de validation. En changeant le champ que tu récupères, tu rendras obsolète leur copie de ton formulaire.

À partir de là, les seuls spams ne pourront être postés que par un humain. (tant que les robots n'interprètent pas les CSS). Et attention, certains le peuvent peut-être déjà, donc mets bien ça dans une feuille externe, pas dans la balise elle-même.

Où mettre la fonction mail() dans captcha_valid.php ???? ou

par Jardinier enchanté » 19 févr. 2008, 22:26

Une fois ton formulaire validé (captcha et variables POST) tu peux en faire ce que tu veux. L'afficher dans une page, le stocker en bdd, fichier plat ou te l'envoyer par email.

Pour ce dernier point, regarde du côté de la fonction mail()
Dans captcha_valid.php tu mets le code de la fonction mail() à quel place?

Est-ce que cette fonction doit etre dans captcha_valid.php?

par Ripat » 19 févr. 2008, 21:26

Une fois ton formulaire validé (captcha et variables POST) tu peux en faire ce que tu veux. L'afficher dans une page, le stocker en bdd, fichier plat ou te l'envoyer par email.

Pour ce dernier point, regarde du côté de la fonction mail()

Formulaire sécurisé

par Jardinier enchanté » 19 févr. 2008, 21:03

Allo Ripat,

Qu'est-ce que tu rajoutera dans ton code pour pouvoir anvoyer les résultats du formulaire par courriel?

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

par graffx » 23 sept. 2007, 02:38

Alors voila je vais etre honnete, je n' ai pas eu le temps, etant routier, je suis debordé, mais l' entreprise de mon pere a besoin de ce formulaire sans etre spammé. Quelqu' un pourrai t il m' envoyer ces deux ou trois pages de formulaires que j' integrerai a son site?

Si vous etes ok, voici mon mail :cry: [email protected]


Mille mercis d' avance a mon eventuel futur sauveur :wink:

par graffx » 09 sept. 2007, 23:44

Merci d' être aussi sympatique et patient.

Malheuresement je part dans 2h pour le boult et rentrerai vendredi soir seulement a je ne sais pas quelle heure. Je vous tiend au courant :cry:

par Ripat » 07 sept. 2007, 08:56

En fait je viens de voir que je n' avais pas rajouté le script de captcha dans mon exemple tout en haut de page :/ Personne pour me faire ca ? Je sais bien que c' est la facilité mais bon. Deja je me demande si le formmail est un bon systeme de formulaire mail car j' en ai vu plusieurs types, mais bon celui la fonctionne bien malgré le grand nombre de spamm :(
Il y en a des tonnes sur le net, celui-ci ne me semble pas trop usine à gaz:
http://www.white-hat-web-design.co.uk/a ... aptcha.php

Voici un mini-script pour ce que tu veux faire. Il te suffira de l'adapter. Mais je te recommande chaudement de te mettre une bonne fois au PHP (et à l'htlml conforme) pour vraiment profiter des conseils de ce forum. Il existe de bons tutos de base. Tu peux aussi procéder par essais-erreurs et poster tes questions dans le salon Débuter en PHP.
  • Créer une page captcha.php
    Qui contiendra la classe du lien donné plus haut. Tel quel.
  • Page formulaire - captcha_form.php
    <?php
    // activation des sessions pour récup des msg d'erreur éventuels
    session_start();
    
    // récup msg erreur
    if ( isset($_SESSION['err']) ){
        echo '<p style="color: red;">'.$_SESSION['err'].'<p>';
        unset ($_SESSION['err']);
    }
    ?>
    
    <!-- ici on appelle le script captcha.php qui va fabriquer une image -->
    <img src="captcha.php">
    
    <!-- ton formulaire -->
    <form action="captcha_valid.php" method="post">
        <p>
            <label for="captcha">Security Code:</label>
            <input id="captcha" name="captcha" type="text" />
    
            <label for="email">Introduisez email:</label>
            <input id="email" name="email" type="text" />
    
            <input type="submit" value="Envoyer" />
        </p>
    </form>
    
  • page de validation - captcha_valid.php
    <?php
    //activation des sessions pour récupérer le security_code du générateur de captcha
    session_start();
    
    // récupération des champs du formulaire
    if( !empty($_POST['captcha']) && !empty($_POST['email']) ){
        $captcha = $_POST['captcha'];
        $email   = $_POST['email'];
    } else {
        // retour formulaire avec msg d'erreur
        $_SESSION['err'] = "Veuillez remplir tous les champs";
        header('Location: captcha_form.php');
        exit;
    }
    
    // vérification du captcha et éjection si pas correct
    if ( $captcha != $_SESSION['security_code']  ){
        $_SESSION['err'] = "Le code captcha ne correspond pas. Veuillez recommencer SVP.";
        header('Location: captcha_form.php');
        exit;
    } else {
        // raz du code captcha
        unset($_SESSION['security_code']);
    
        echo "C'est tout bon! le captcha ".$captcha." a été correctement introduit!";
    
        // suite de ton code pour le traitement de ton formulaire....
    }
    
    

par iclo » 07 sept. 2007, 01:44

Les membres du forum, sont là pour t'aider et te donner des conseils.
Mais il faut que tu nous dises ce qui ne fonctionne pas, faut pas avoir peur de donner des détails, c'est grace à ça, qu'on pourra cerner où est le problème.

Ripat t'a donné une marche à suivre assez précise, qu'a-t-elle donné comme résultats/erreurs ?

par graffx » 07 sept. 2007, 00:04

Ca ne fonctionne pas, je l' avais bien dit, je suis une quequette dans ce domaine :roll:

En fait je viens de voir que je n' avais pas rajouté le script de captcha dans mon exemple tout en haut de page :/ Personne pour me faire ca ? Je sais bien que c' est la facilité mais bon. Deja je me demande si le formmail est un bon systeme de formulaire mail car j' en ai vu plusieurs types, mais bon celui la fonctionne bien malgré le grand nombre de spamm :(

par Ripat » 06 sept. 2007, 10:39

Faut pas baisser les bras comme ça!

Tu as besoin de faire deux pages comme indiqué plus haut. La page de ton formulaire qui comprendra le code qui génère le captcha et une page de récupération des valeurs des champs du formulaire. Cette deuxième page validera les champs de la première ET vérifiera si le code captcha envoyé par l'utilisateur correspond bien au code généré par la page 1. Exemple schématique:

PAGE 1
// activation de sessions
session_start();

// code captcha (avec gd ou autre)
  // composé généralement d'une génération de chaine aléatoire
  $codeCaptcha = fonctionChaineAleatoire();

  // et d'une génération de l'image
  $imgCaptcha = fonctionGenerationImage($codeCaptcha);

// stocakge du code captcha en session
$_SESSION['captcha'] = $codeCaptcha

// ton formulaire
  // <form action= ....>
  //  ...
  // </form>
PAGE 2
// activation de sessions
session_start();

// validation classique des champs de ton formulaire
  // if isset() and not empty() etc...
  // else retour formulaire

// vérification du captcha
if ($_POST['captcha'] == $_SESSION['captcha']) {
  // code pour OK
} else {
  // code pour KO, par exemple un header('location .....) pour un retour au formulaire
}
Essaye sur un formulaire simple et reviens vers nous si tu as des problèmes.

par graffx » 05 sept. 2007, 23:14

Bon ben, j' avoue que je comprend un script quand je l' ai sous les yeux, mais je crois n' avoir aucune logique php.


Ca fait plus de 3 ans que j' essaie de l' utiliser sans grand succés.


Tant pis merci quand meme.

par Ripat » 26 août 2007, 21:00

Pour que tu profites bien de la discussion il faudrait faire le point de tes connaissances en PHP et faire une bonne lecture de quelques tuto de base sur les sessions. Pas très compliqué.

Revois également les structures de langage comme les tests logiques (if - else) et le fonctionnement des variables en PHP. Ce ne sera jamais du temps perdu. Même comme graphiste tu seras un jour ou l'autre confronté à un langage de script (PHP, ASP, PERL, JAVA etc...)

La solution PHP à ton problème est à ta portée. Tu peux te contenter d'inclure un script de captcha sans vraiment comprendre ce qu'il fait mais, par contre, il est indispensable que tu aies quelques bases pour le traitement en aval.

par graffx » 26 août 2007, 18:04

Heu j' ai du mal a comprendre je vais essayer de faire comme tu as dit mais je ne pense pas y arriver sincerement. Peu etre as tu msn pour que je puisse te contacter? merci d' avance