Proteger mon guestbook contre le spam

Mammouth du PHP | 1967 Messages

29 juin 2006, 15:27

le fait que le système fonctionne avec la confirmation visuelle "ecrivez "prout" ci-contre si vous êtes un robot" tient uniquement du fait que ce système n'est pas répandu, imaginez qu'on inclu un truc du genre sur phpbb, et en 10 sec, les robot seront capable de contourner

le mieux est de concevoir son propre sytème antispam
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Honeybunny
Invité n'ayant pas de compte PHPfrance

29 août 2006, 11:27

humm oui c'est le même principe quel code visuel (que j'ai mis en place d'ailleurs)
Sauf que le robot ne saura pas quoi mettre alors que l'humain "normal" oui ;)
Moi je trouve les deux idées géniales (j'avais déjà pensé au code visuel, mais ne sais pas comment on s'y prend), mais est-ce-que vous pourriez m'en dire un peu plus sur le code à insérer? Je dois préciser que mon guestbook est hébergé chez Free, je ne suis pas sûre de pouvoir intégrer toutes les modifs, mais je dois pouvoir essayer si on m'explique. ..
... parce que le : $_POST['anti-robot'] == 'prout'... c'est un peu cryptique pour moi :?:

Merci d'avance pour votre aide!
Honeybun

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

29 août 2006, 19:06

La solution que je recommande (testée et approuvée par PHPFrance.com, regardez le source) est d'ajouter un champs invisible à ton formulaire, avant le champs où on entre son message. Par exemple:

Code : Tout sélectionner

<textarea name="je_suis_un_robot" style="display: none"></textarea>
Les utilisateurs normaux ne verront pas le champs mais les robots le rempliront sûrement. Ensuite il ne te reste plus qu'à vérifier si le champs est rempli pour savoir s'il s'agit d'un robot.

ViPHP
ViPHP | 2291 Messages

29 août 2006, 20:31

La solution que je recommande (testée et approuvée par PHPFrance.com, regardez le source) est d'ajouter un champs invisible à ton formulaire, avant le champs où on entre son message. Par exemple:

Code : Tout sélectionner

<textarea name="je_suis_un_robot" style="display: none"></textarea>
Les utilisateurs normaux ne verront pas le champs mais les robots le rempliront sûrement. Ensuite il ne te reste plus qu'à vérifier si le champs est rempli pour savoir s'il s'agit d'un robot.
Mais pas mal mais il ne faudras pas lomgtemps avant que les robot de ce fasse plus pieger par de telles phrases phrase qui contiennent robot, je suis un robot, etc....
Ceci dit l'idée du champs caché est génial mais j'aurais plutôt mis name" nom avec une id du genre nom1 qui elle ne serait pas traiter mais annulerais le traitement ou cas ou elle serait remplie. :wink:
Modifié en dernier par dunbar le 02 sept. 2006, 20:50, modifié 1 fois.
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

Invité
Invité n'ayant pas de compte PHPfrance

02 sept. 2006, 20:49

La solution que je recommande (testée et approuvée par PHPFrance.com, regardez le source) est d'ajouter un champs invisible à ton formulaire, avant le champs où on entre son message. Par exemple:

Code : Tout sélectionner

<textarea name="je_suis_un_robot" style="display: none"></textarea>
Les utilisateurs normaux ne verront pas le champs mais les robots le rempliront sûrement. Ensuite il ne te reste plus qu'à vérifier si le champs est rempli pour savoir s'il s'agit d'un robot.
Salut,

Merci, c'est déjà quelque chose, même si - désolée si j'insiste - j'aimais bien l'idée de la question, parce que là, je ne peux pas tester de suite que ça marche n'est-ce-pas?

Je l'ai tenté en tout cas (depuis aujourd'hui, je vous tiendrai au courant), mais est-ce que je ne vais pas tout de même avoir le problème des messages vides?

Parce que c'est ce qu'il se passe actuellement, je n'ai plus beaucoup de messages remplis d'url, mais de nombreux messages vides envoyés avec la même adresse bidon...
Alors??

Merci,
Honeybun

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

02 sept. 2006, 22:04

il ne faudras pas lomgtemps avant que les robot de ce fasse plus pieger par de telles phrases phrase qui contiennent robot
À la rigueur, le nom n'est pas important (si tu regardes le source de la page tu verras que le nom du vrai champs est "spam" ;)) et on pourrait même le rendre entièrement dynamique (on pourrait imaginer de stocker le nom dans une variable de session et le faire changer pour chaque utilisateur). Le vrai danger est de voir des robots qui interprètent le CSS, ce qui arrivera sans doute bientôt (il me semble que certains interprètent déjà le Javascript).
est-ce que je ne vais pas tout de même avoir le problème des messages vides
Les robots continueront bien sûr à poster, à toi de rajouter une vérification du style
if (!empty($_POST['je_suis_un_robot'])) { die('robot!'); }

Invité
Invité n'ayant pas de compte PHPfrance

03 sept. 2006, 13:37

il ne faudras pas lomgtemps avant que les robot de ce fasse plus pieger par de telles phrases phrase qui contiennent robot
À la rigueur, le nom n'est pas important (si tu regardes le source de la page tu verras que le nom du vrai champs est "spam" ;)) et on pourrait même le rendre entièrement dynamique (on pourrait imaginer de stocker le nom dans une variable de session et le faire changer pour chaque utilisateur). Le vrai danger est de voir des robots qui interprètent le CSS, ce qui arrivera sans doute bientôt (il me semble que certains interprètent déjà le Javascript).
est-ce que je ne vais pas tout de même avoir le problème des messages vides
Les robots continueront bien sûr à poster, à toi de rajouter une vérification du style
if (!empty($_POST['je_suis_un_robot'])) { die('robot!'); }
Coucou,

J'ai fait comme il était suggéré, mais malheureusement, j'ai deux nouveaux spams ce matin, un vide, un plein.
Je vais tout de même tenter le script supplémentaire pour voir, mais je n'ai toujours pas de solution à mon problème... qui s'est encore aggravé, car en voulant supprimer mes derniers spams du livre d'or, j'ai supprimé une dizaine de messages de mes potes en faisant une mauvaise manip'!

Je ne l'ai pas précisé, mais bien sûr, je ne valide pas chaque message avant publication, c'est envoyé automatiquement (au cas où ça changerait qq chose...).
merci pour votre aide, je m'accroche!

à +
Honeybun

Honeybunny
Invité n'ayant pas de compte PHPfrance

03 sept. 2006, 13:39

J'oubliais aussi, je remarque que dans les solutions proposées, vous avez souvent un "$_post" dans vos scripts, il n'y en a pas sur mon livre d'or à moi, c'est normal? :shock:

En plus ça m'embête, parce que toutes les solutions proposées qui contiennent une question piège, par exemple, font référence à cette ligne là... que je n'ai pas... :( ... donc que je ne peux pas modifier...

Honeybun

ViPHP
ViPHP | 2291 Messages

03 sept. 2006, 19:55

$_POST
Correspond à : Permet de récupérer les variables envoyées par la méthode POST d'un formulaire

Citation de :http://www.phpdebutant.org/article113.php
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

Invité
Invité n'ayant pas de compte PHPfrance

04 sept. 2006, 17:56

$_POST
Correspond à : Permet de récupérer les variables envoyées par la méthode POST d'un formulaire

Citation de :http://www.phpdebutant.org/article113.php
hmm, merci quand même pour la réponse, mais ça ne m'éclaire pas beaucoup sur la raison pour laquelle je n'ai pas de "$_POST" dans mon script de livre d'or. J'ai suivi le lien, pas mieux...

Je ne connaît pas grand chose en PHP, je comprends les concepts de scripts, mais bon, à part ça, je suis infoutue d'en programmer un. Je sais faire des modifs simples (ie: modifier une ligne de script existante, un paramètre, etc.), c'est tout.
Et les sites pour "débutants", je dois dire, sont vraiment trop obscurs pour moi, il faut une formation préalable rien que pour comprendre leur jargon!

Quelqu'un peut m'aider?? J'ai toujours autant de spam sur mon site, voir plus!!
Honeybun

Mammouth du PHP | 19672 Messages

04 sept. 2006, 19:23

Honeybun, il y a quatre ans, si tu m'avais parlé de PHP, je t'aurais regardé avec des yeux en bille de loto en te demandant "ça bouffe quoi l'hiver ce truc ?". Ne vas pas croire pour autant que j'ai avalé ça comme on suce des pralines, je n'ai aucune formation universitaire en général et encore moins en informatique en particulier.

Si tu as des notions très basiques en anglais, tu peux comprendre sommairement à quoi sert telle ou telle fonction du langage PHP. Partant de là, tu dois pouvoir arriver à suivre plus ou moins le déroulement d'un script. Peut-être pas dans le détail, mais globalement. Dis-toi bien que si tu en arrives à ce stade de base, tout ce qui restera à faire, c'est intégrer le vocabulaire du langage.

Déjà, comme point de départ, je te suggère de nous mettre ici le code de ton formulaire et ensuite le code utilisé pour le traitement. Là, on aura de la matière et il sera possible de t'indiquer telle ou telle erreur s'il y en a.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 14 Messages

05 sept. 2006, 10:59

J'oubliais aussi, je remarque que dans les solutions proposées, vous avez souvent un "$_post" dans vos scripts, il n'y en a pas sur mon livre d'or à moi, c'est normal? :shock:

En plus ça m'embête, parce que toutes les solutions proposées qui contiennent une question piège, par exemple, font référence à cette ligne là... que je n'ai pas... :( ... donc que je ne peux pas modifier...

Honeybun
Si tu n'en as pas dans ton script, c'est que tu dois utiliser $NomElementFormulaire pour accéder à la valeur postée et tu doit avoir pour se faire la valeur register_global à ON sur ton hébergeur. Tu peux vérifier cela en créant un fichier info.php avec le code suivant

Code : Tout sélectionner

<? phpinfo(); ?>
Si tu trouve alors la valeur register_global à ON, c'est un trou de sécurité qui a été corrigé depuis php 4.1 je crois. L'idéal est d'utilisé $_POST['NomElementFormulaire'] qui permet de récupérer de façon sûre la valeur de ton formulaire.

Eléphant du PHP | 52 Messages

05 sept. 2006, 14:44

bonjour

pour revenir au sujet de départ, petite question :

est-ce qu'un robot est capable d'ouvrir une page dans un navigateur ?

J'entend par là, est-il capable d'ouvrir une page, ce qui aura pour effet de déclarer toutes les variables (sessions dans mon cas) du script générant cette page, et de placer un cookie de session contenant le phpsessid sur sa propre machine ?

L'idée serait de déclarer une variable session sur la page du formulaire, et de vérifier si cette variable existe sur la page de réception des données.

Administrateur PHPfrance
Administrateur PHPfrance | 3131 Messages

05 sept. 2006, 15:09

Bien sûr, c'est comme ça qu'ils fonctionnent... Un robot peut gérer les cookies, et donc une session, il peut s'identifier sur un site, entrer un login/mot de passe, cliquer sur des liens, etc... Et ce sans avoir besoin de faire quelque chose de bien compliqué. Le package PEAR::HTTP_Client permet tout ceci.

Eléphant du PHP | 52 Messages

05 sept. 2006, 16:57

en ce qui concerne les formulaires, ne génèrent ils pas plutôt les entêtes corrects qu'ils envoient directement à la page de réception des données ?