PHP : Antispam pour formulaire avec JPGRAPH

25 aout 2013 rdorigny 0 commentaires

Si vous avez un formulaire sur votre site Internet et que vous recevez de plus en plus de commentaires de publicité pour vendre des pilules bleues par exemple, il est possible d'agir en installant un antispam pour formulaire.

Le problème est que certains petits malins ont développé des robots qui parcourent le web à la recherche de formulaire pour y envoyer de la pub. Notamment, ils recherchent les formulaires de commentaires qui ne sont pas toujours protégés par un modérateur qui valide les messages reçus.

Je vais donc vous expliquer comment installer assez simplement un système antispam pour formulaire avec la bibliothèque JPGRAPH de scripts PHP.

1) Générer une image aléatoire avec JPGRAPH

J'ai opté pour la librairie JPGRAPH, tout d'abord parce que je l'avais déjà utilisé pour afficher des graphiques et j'avais trouvé qu'elle était performante et super simple d'utilisation. De mémoire, je me rappelais qu'elle proposais un système anti-spam par génération d'image avec texte pour antispam de formulaire.

Téléchargement et installation:
Pour récupérer la librairie JPGRAPH, il suffit d'aller sur le site http://jpgraph.net/download/. Il existe une version professionnelle qui est payante et beaucoup plus complète. Mais pour ce que nous allons réaliser la version gratuite sera largement suffisante.

Le site propose une version en PHP4 et une autre en PHP5, personnellement j'ai opté la version PHP4 car je traîne encore un vieux serveur Apache qu'il faudra que je rajeunisse quand j'aurais un moment!

Pour l'installation, il suffit juste de décompresser le fichier tar.gz avec winrar par exemple et de le placer sur le votre site web.

Utilisation de la la librairie:
JPGRAPH est une librairie de scripts PHP, elle se décompose en deux répertoires :
  • src : pour les sources des scripts et les exemples d'utilisation,
  • docs: pour la documentation.

  • JPGRAPH utilise un code programmation orienté objet codé en PHP. Ne vous-en inquiétez pas trop, l'utilisation des classes d'objet a été pensée de façon à être simpliste pour l'usager. D'ailleurs l'exemple de la classe jpgraph_antispam.php suffit pour réaliser ce que nous cherchons à faire.
    Pour le code de génération de l'image :
    <?php require_once("./jpgraph-1.27.1/src/jpgraph_antispam.php"); // Création d'un objet AntiSpam $spam = new AntiSpam(); // Créer un challenge de 5 caractéres $chars = $spam->Rand(5); // Note : les 'o' (lettre) et '0' (zéro) sont interdits pour éviter toute confusion $spam->Set($chars); // Test pour voir si l'affichage a réussi ? if( $spam->Stroke() === false ) { die('Illegal or no data to plot'); } else { session_start(); $_SESSION['My_Anti_spam']=$chars; } ?>

    Notre fichier renvoit le fichier image en résultat, et donc pour son utilisation, il suffit de créer une balise image en html classique de la forme :
    <img src='./My_Anti_spam.php'>

    Voici un exemple de ce que notre script renvoit:

    2) Implémenter l'antispam dans votre site web

    Bon, nous avons vu comment créer une image aléatoire, c'est bien jolie mais comment faire pour se remémorer du texte aléatoire retourné à l'usager pour le comparer avec ce qu'il va nous retourner? Réponse : Nous allons utiliser les sessions PHP qui sont faites pour cela.

    La session PHP est un mécanisme qui permet de conserver des variables entre les différentes pages d'un même site web. Très utiles, elles sont de plus en plus employées notamment dans les systèmes d'authentification des sites web. Attention néanmoins au piège classique des sessions, il faut ouvrir une session avant d'envoyer du code HTML. Sinon, vous ne pourrez accéder à la variable super-globale $_SESSION de PHP.

    Voilà comment nous allons procéder, lors de la création de l'image nous allons sauvegarder la chaîne de caractère aléatoire qui sert pour générer l'image. Si vous reprenez le code PHP ci dessous, c'est ce que nous faisons lors du test de bon fonctionnement.

    Ensuite, il suffit de récupérer au début de la page PHP suivante la valeur stockée dans notre variable de session, que l'on comparera avec ce qui a été transmis par l'usager dans le formulaire. Si les deux chaines sont identiques, c'est que l'usager a bien tapé le bon code, et donc que probablement, il ne s'agit pas d'un robot qui nous a répondu.

    <?php session_start(); if (isset($_SESSION['My_Anti_spam'])) $My_Anti_spam=$_SESSION['My_Anti_spam']; else $My_Anti_spam="Rien reçu..."; unset($_SESSION['My_Anti_spam']); ................. print(" <form action='./My_code.php' method='post'> <table> <tr> <td> Pour valider votre commentaire, écrivez le texte affiché sur l'image : </td> <td> <img border=0 src='./antispam.php'> </td> <td> <input type='text' name='verif_spam' size='5'> </td> </tr> </table> <BR> <input type='submit' name='comment' value='Faire un commentaire'> </form> "); ................. if ((strtoupper($My_Anti_spam)==strtoupper($verif_spam))) print("On peut considérer que la réception de ce formulaire est légitime!"); ?>

    Conclusion

    Nous l'avons vu, JPGRAPH et les sessions PHP permettent de rendre très facile la mise en oeuvre d'un mécanisme antispam de formulaire pour votre blog. Il suffit juste d'un peu de courage pour ce faire.




    Pseudonyme (obligatoire) :
    Adresse mail (obligatoire) :
    Site web :




    © 2017 www.doritique.fr par Robert DORIGNY