Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

ANTI SPAM ET ANTI ROBOT : SECURISATION DE FORMULAIRE SANS CAPTCHA


Information sur la source

Catégorie :Sécurité & Cryptage Classé sous : antispam, antirobot, protection, securite, captcha Niveau : Initié Date de création : 15/04/2007 Date de mise à jour : 25/05/2008 15:08:50 Vu : 12 803

Note :
10 / 10 - par 1 personne
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (26)
Ajouter un commentaire et/ou une note

Description

Ce code source permet de sécuriser un formulaire (email, inscription, etc...) sans utiliser d'image de confirmation visuel (de type captcha).
Ce code permet d'empêcher les robots spammeurs de valider un formulaire.

A savoir qu'un captcha est lourd (car parfois illisible pr l'homme, et plus simple pr la machine), qu'en plus il est possible aujourd'hui de lire des captcha via logiciel.

Ma méthode filtrera la majorité des robots, celle ci peut être contournée, mais cela demande au spammeur d'étudier votre site pr contourné la protection, ce qui n'arrivera presque jamais.


Théorie :
Vous placez sur votre formulaire en bas de celui-ci une case à cocher du style "Je certifie etre un être humain".

La suite dans la partie code source...



 

Source

  • CONTENU de 'mapage.php'
  • <?php
  • // Récuperation des valeurs en GET ou en POST
  • $try=(isset($_GET['try'])?$_GET['try']:(isset($_POST['try'])?$_POST['try']:''));
  • $nobotv=(isset($_GET['nobotv'])?$_GET['nobotv']:(isset($_POST['nobotv'])?$_POST['nobotv']:''));
  • $nobotc=(isset($_GET['nobotc'])?$_GET['nobotc']:(isset($_POST['nobotc'])?$_POST['nobotc']:''));
  • $nobots=(isset($_GET['nobots'])?$_GET['nobots']:(isset($_POST['nobots'])?$_POST['nobots']:''));
  • // Variable
  • $nobot = time().'_'.rand(50000, 60000);
  • if($try=='send')
  • {
  • // Ici Le visiteur soumissione le formulaire
  • if(($nobotc!=md5($nobotv)) or ($nobotv=='') or ($nobots!=''))
  • {
  • echo "\n<br /> <b>Anti-Spam</b> : Vous n'avez pas cocher la case !";
  • // ICI on réafiche votre formulaire, car le test a echoué
  • // On réaffiche le formulaire
  • include 'mon_formulaire.php';
  • }
  • else
  • {
  • // Le test est bon... On continue
  • // Envoi du mail, insertion ds MySQL, ou ce que vs voulez...
  • }
  • }
  • else
  • {
  • // Ici on affiche le formulaire, c'est l'affichage par défaut
  • include 'mon_formulaire.php';
  • }
  • ?>
  • CONTENU DE 'mon_formulaire.php'
  • <form action="mapage.php" method="POST">
  • <input type="hidden" name="try" value="send">
  • <input type="hidden" name="nobotv" value="<?php echo $nobot; ?>">
  • <!-- ICI tout ce que vous voulez dans votre formulaire HTML -->
  • <!-- On Rajoute cette petite case à cocher en bas du formulaire -->
  • <h3>Anti-Spam :</h3>
  • <input type="checkbox" name="nobotc" value="<?php echo md5($nobot); ?>" />Je confirme que je suis un être humain, et pas un robot spammeur.
  • <div style="position: absolute; visibility: hidden; left: -5000; top : -5000">
  • <br><input type="checkbox" name="nobots" value="<?php echo time(); ?>" />I'm a Stupid Spam-Robot
  • </div>
  • </form>
CONTENU de 'mapage.php'

<?php
// Récuperation des valeurs en GET ou en POST
$try=(isset($_GET['try'])?$_GET['try']:(isset($_POST['try'])?$_POST['try']:''));
$nobotv=(isset($_GET['nobotv'])?$_GET['nobotv']:(isset($_POST['nobotv'])?$_POST['nobotv']:''));
$nobotc=(isset($_GET['nobotc'])?$_GET['nobotc']:(isset($_POST['nobotc'])?$_POST['nobotc']:''));
$nobots=(isset($_GET['nobots'])?$_GET['nobots']:(isset($_POST['nobots'])?$_POST['nobots']:''));

// Variable
$nobot = time().'_'.rand(50000, 60000);


if($try=='send')
{
  // Ici Le visiteur soumissione le formulaire  
	if(($nobotc!=md5($nobotv)) or ($nobotv=='') or ($nobots!='')) 
	{ 
	  echo "\n<br />  <b>Anti-Spam</b> : Vous n'avez pas cocher la case !"; 
	  // ICI on réafiche votre formulaire, car le test a echoué
	  // On réaffiche le formulaire
	  include 'mon_formulaire.php';	
	}
	else
	{
	  // Le test est bon... On continue
          // Envoi du mail, insertion ds MySQL, ou ce que vs voulez...
	}
}
else
{
  // Ici on affiche le formulaire, c'est l'affichage par défaut
  include 'mon_formulaire.php';	
}
?>





CONTENU DE 'mon_formulaire.php'

<form action="mapage.php" method="POST">
<input type="hidden" name="try" value="send">
<input type="hidden" name="nobotv" value="<?php echo $nobot; ?>">

<!-- ICI tout ce que vous voulez dans votre formulaire HTML -->


<!-- On Rajoute cette petite case à cocher en bas du formulaire -->

<h3>Anti-Spam :</h3>
<input type="checkbox" name="nobotc" value="<?php echo md5($nobot); ?>" />Je confirme que je suis un être humain, et pas un robot spammeur.
<div style="position: absolute; visibility: hidden; left: -5000; top : -5000">
<br><input type="checkbox" name="nobots" value="<?php echo time(); ?>" />I'm a Stupid Spam-Robot
</div>

</form>

Conclusion

L'explication final :
Lors qu'un être humain passera sur votre formulaire celui ci cochera la case "je suis un être humain", un stupide robot lui cochera toutes les cases, ou aucune des cases.
A savoir qu'un être humain ne verra pas la case "I'am a Stupid Spam Robot". (le champ est masqué)
Résultat : un robot ne parvient pas à valider se formulaire !

C'est très simple, très bête, mais très efficasse, mais fallais t-il y penser !?
Pour ne pas qu'un robot puisse retenir les réponses à cocher ou à ne pas cocher, j'ai integrer l'heure dans le POST, et une fonction MD5.

Il vous est aussi possible de vérifier l'heure...
Il suffit pr cela de comparer $nobotc et time()

Après installation sur des Form2mail, je n'ai plus de robots ;-)

Voir démo ici : http//xxxxxxxxxxxxx.com/?pg=mailme

- - - - - - - - - - - - - - - - - - - - - - - -


Afin que vous puissiez avoir une démo de l’efficacité de mon système, j’avais laissé l’adresse de mon site, avec la page de mon formulaire de mail (sendmail) destiné à mes clients pour me contacter.
Ce système anti-spam monté sur mon Sendmail empêche un robot de valider le formulaire.
En plus de cela, mon sendmail vérifie d’autres champs « nom, message, votre adresse, et sujet » et n’envoi pas de mail si ceux-ci n’ont pas été définit.

Il était donc possible aux visiteurs de codes-sources.com, d’aller sur mon sendmail, de cliquer sur le bouton « valider », sans cocher la case « anti-spam » (de voir apparaître le message d’erreur comme quoi il est nécessaire de cocher la case), ou de la cocher, et de voir apparaître en erreur que les champs « nom, message, adresse, et sujet » n’ont pas été définit.

Résultat : On a testé le système, et sans m’envoyer de mail.
Amplement suffisant pour voir que mon système ANTI-SPAM marche !

Malgré ma demande express demandé aux visiteurs de codes-sources.com, de ne pas m’envoyer de message juste pr écrire « test », j’en réceptionne encore plrs par jour !


Je supprime donc l’adresse de démo de mon système, à vous de bien lire le code et d’en comprendre le fonctionnement, le principe, etc…

Dommage pour ceux « qui n’ont rien fait » ils payent pour les idiots (qui malgré avoir lu l’ont fait quand même) et les dyslexiques.


SI JE METS EN PLACE UN SYSTEME ANTI-SPAM (anti-robot) c’est pour me faire SPAMMER par des Humains ! ^_^
 

Historique

15 avril 2007 05:39:12 :
Maj Texte
17 avril 2007 02:49:16 :
KeyWord
17 avril 2007 02:50:38 :
KeyWord
17 avril 2007 02:57:05 :
Keyword
19 avril 2007 02:12:51 :
Lisibilité
23 avril 2007 16:00:42 :
J'avais ouublié une ligne <input type="hidden" name="nobotv"...
23 février 2008 04:39:15 :
Amélioration de la lisibilité
23 février 2008 04:40:38 :
Meilleure Lisibilité
23 février 2008 04:42:04 :
Meilleure lisibilité
21 mai 2008 09:57:33 :
Memento ou Note : Merci de ne pas utiliser le sendmail présent sur l'url de démo pr m'envoyer des messages avec ecrit "test" ou "wdffùwmkwxpsd" pr voir si cela fonctionne.
25 mai 2008 15:08:50 :
Suppression de l'url de Démo.

Commentaires et avis

signaler à un administrateur
Commentaire de psykocrash le 15/04/2007 13:19:01

J'ai déjà vu il y a quelques mois cette protection sur un forum phpbb.

Cette protection n'est malheureusement plus efficace dès lors que le robot est paramétré pour ton site spécifiquement.

signaler à un administrateur
Commentaire de Kdecherf le 15/04/2007 20:25:18

Bonsoir, certes c'est une bonne idée mais qui peut être en effet détournée. La solution serait que ça soit un champ avec un nom qui se modifie à chaque formulaire ainsi le robot ne peut pas stabiliser les cases à cocher (et puis après on peut s'amuser à créer ses champs avec des noms à coucher dehors, chacun sa route). ;-)

signaler à un administrateur
Commentaire de psykocrash le 15/04/2007 21:25:47

Se contenter de changer le nom ne servirait à rien. Ce qu'il faudrait, c'est changer la question et la réponse attendue. Ce serait déjà plus dure à contourner parce qu'il faudrait alors que le robot ait en mémoire la liste des questions/réponses.

signaler à un administrateur
Commentaire de Kdecherf le 15/04/2007 22:08:34

Ce qui est tout à fait faisable aussi ...
Tous les systèmes ont des limites en fait. Ce qui pourrait être fait aussi c'est un anti-flood en limitant les délais entre deux emails pour une même adresse ip.

signaler à un administrateur
Commentaire de psykocrash le 15/04/2007 22:15:13

Ce qui serait vraiment intéressant du point de vue de la sécurité anti flood, ce serait d'avoir une base de données commune à un grand nombre de sites du même genre (phpbb par exemple) qui recenserait des stats avec ip sur les visiteurs pour repérer ceux qui flood, éventuellement les bloquer ou leur imposer un délais d'attente, et pourquoi pas (mais ce serait plus compliqué à réaliser) ajouter à cela un système expert qui étudierait le fonctionnement de ces robots pour les détecter plus vite.

signaler à un administrateur
Commentaire de Kdecherf le 16/04/2007 19:42:38

C'est le principe des black lists, ça existe et c'est déjà très répendu pour les serveurs smtp / irc et j'en passe :)

signaler à un administrateur
Commentaire de psykocrash le 16/04/2007 19:52:31

Pas une blacklist (qui ne permet pas de "comprendre" le comportement d'un robot), une base de données qui contient juste des statistiques. Si une même adresse ip envoie un contenu sensiblement identique sur plusieurs sites, et pire encore si c'est fait dans un interval très court, des mesures sont prises (temps d'attente plus long pour cette ip, ban, mail de prévention des admins concernés, etc.).

signaler à un administrateur
Commentaire de Kdecherf le 16/04/2007 21:04:11

C'est une idée, mais ça serait assez lourd à mettre en place je pense ...

signaler à un administrateur
Commentaire de tkof le 17/04/2007 02:55:37

Cette sécurité a ses limites...
Mais bcp de robots ne verifie pas leur resultats, j'ai installer ce script et j'ai vu dans mes stats que des robots passer par la....
Mais leur post ne sont plus pris en compte !!

On peux effectivement faire changer le nom du champ, ce n'est pas tres complexe, mais ayant passé des protections de ce type sur des formulaires, cela ne change pas grand chose ?

Le coup des questions multiple j'y ai pensé, peut etre dans une version 2.0 ?

signaler à un administrateur
Commentaire de KahL le 23/04/2007 10:30:53

Excusez moi mais le nobotv n'existe nulle part ... c'est normal ?
J'ai un peu de mal à comprendre le fonctionnement de la chose (le principe oui mais pas le fonctionnement) !

signaler à un administrateur
Commentaire de tkof le 23/04/2007 16:24:32

Je l'avais oublié, cest tres juste !!
Il contiend le hash non crypté de ce qui doit etre envoyé en MD5 !
Sans lui le code fonctionne pas...

signaler à un administrateur
Commentaire de Astalavista le 23/04/2007 23:06:35

Moi j'ai une meilleur solution, on calcul le temps qu'un utilisateur met pour remplire le formulaire (ex 5sec), et on vérifie si il a pas ete remplit en 4 secondes ....

signaler à un administrateur
Commentaire de gfpl le 25/04/2007 12:16:56

humm sinon la solution reste le captcha :) enfin a mon gout mais bon si il y a des malvoyant ...

signaler à un administrateur
Commentaire de Sharpkiki le 08/07/2007 10:04:26

C'est vrai que ce système n'est pas le top de la sécurité. En jetant un coup d'oeil rapide sur le source de la page on peut facilement contourner cette protection. Mais quel spammeur ira étudier le code d'une page et adapter son robot juste pour pouvoir spammer un site ?

En théorie c'est une très mauvaise protection, dans la pratique elle marche très bien. Pour s'en rendre compte il suffit de laisser le script envoyer le mail des spammeurs avec "<SPAM>" en objet et de compter les mails bloqués.


signaler à un administrateur
Commentaire de Jean_Marc_1968 le 22/02/2008 22:10:28

Personnellement je trouve l'idée pas mal du tout et je ne suis pas assez parano pour chercher midi à 14H. Si j'intercepte la majorité des pollueurs, ça me suffit. Le reste je le traiterais à la main.
Par contre je n'arrive pas à faire fonctionner ton code. N'étant pas un spécialiste php, je me permet de poser une question qui me chipotte : Dans le hidden nobotv que tu avais oublié, la valeur est à <?php echo $nobot; ?> et dans la case à cocher nobotc la valeur est à <?php echo md5($nobot); ?>, or il me semble que $nobot est défini dans la fonction de check qui ne se déclenche que sur le onsubmit, donc après avoir rempli les champs. Serait-ce pour cela que ça ne fonctionne pas ? Parce que les valeurs de ces champs ne sont pas remplies ou est-ce que je comprend mal ?

Merci de ta réponse qui m'aidera aussi à comprendre un peu mieux le php,
Jean-Marc

signaler à un administrateur
Commentaire de tkof le 23/02/2008 04:40:12

Bonjour Jean Marc,

J'ai essayer de rendre le code plus clair...
Si tu n'y arrive pas, contact moi par E-mail.

signaler à un administrateur
Commentaire de guyloo13 le 19/05/2008 16:08:41

Tkof
Bjr
J'ai installé sur mon site ton script qui fonctionne bien mais validé ou pas , par une main humaine, le msg part quand même...? Normal ? ou pas...?
Solution SVP...
Merci
@+
Guyloooo13

signaler à un administrateur
Commentaire de tkof le 19/05/2008 17:22:28

guyloo13:
T'as pas du l'installer correctement !!!
Look mon URL en démo.

signaler à un administrateur
Commentaire de blandimar le 03/08/2008 13:36:00

Hi
Merci beaucoup pour ce script fort utile. Mais question :
L'humain est obligé de valider 2 fois le formulaire pour qu'il soit envoyé. Je m'explique : la première fois, le message "anti spam : vous n'avez pas coché la case" s'affiche. On recommence et le massage part.
Mon formulaire est sur une page html qui appelle la page "mapage.php" que j'ai renommé "contact" et qui elle inclut la vérification du formulaire en php.
Est ce que c'est cet aller retour qui pose problème ?
Ma difficulté en fait se situe, je pense au niveau :
#  else
# {
# // Le test est bon... On continue
# // Envoi du mail, insertion ds MySQL, ou ce que vs voulez...
# }

Merci à toi de prendre le temps de ma répondre si tu peux

signaler à un administrateur
Commentaire de tkof le 03/08/2008 14:53:52

Valider deux fois c'est pas nécéssaire !!
Tu as du faire une petite erreur ds la config...

signaler à un administrateur
Commentaire de blandimar le 03/08/2008 19:23:04

Hi, super merci de ta réponse rapide... Mais je me suis mal exprimée alors.
Je n'ai pas envie de faire valider deux fois mon formulaire. C'est ce que je suis obligée de faire si je veux qu'il parte et justement c'est là que je dois faire une erreur, mais laquelle ?
en fait il se comporte comme si je ne cochais pas la case la première fois.
Merci encore à toi

signaler à un administrateur
Commentaire de azumi13 le 22/08/2008 00:09:51

Vous avez pensé aux macro en créant ça? Il y a des emmerdeur qui s'amusent aussi à faire ça... ce script ne protégerai donc de rien.

signaler à un administrateur
Commentaire de tkof le 22/08/2008 05:40:13

Pr azumi13 : J'ai des sites à haut trafic, j'avais constamment des robots venant valider mes formulaires...
Depuis son Install plus "aucun" !

Je te force pas utiliser mon idée, ma manière de le concevoir, alors avant de dire que cela ne sert à rien, prend le temps de mieux le regarder, car à ce jour aucune personne l'ayant installé m'as dit "jai encore des robots".
Dc au lieu de critiquer, passe ton chemin.

signaler à un administrateur
Commentaire de azumi13 le 22/08/2008 05:45:47

je ne pense pas que se soit une mauvaise critique mais je souligne juste qu'il y a des mongoliens qui utilisent des programme genre supermacro pour spammer les formulaire et dans ton cas, la personne aurait juste a faire cocher ta case pour passer la protection.

cordialement.

signaler à un administrateur
Commentaire de tkof le 22/08/2008 05:59:45

C'est Absolument le principe de mon script, si l'on veut "forcer la validation" cela oblique qu'au moins une fois on prennent la peine d'étudier "le fonctionnement de la page que l'on veux cibler".
Un robot ne pourra pas la valider "dès le départ".
Le but est de filtrer la majorité des robots, dc suffisant pour des sendmails, livre d'or, voir formulaire d'inscription...
De plus cette version est une ébauche (même si 100% fonctionnelle) !
Tu peux facilement via php, changer à chaque fois le nom de la variable en post ou en get et la rendre dynamique...
Comparer l'heure qui est envoyé (empeche la mémorisation), etc.

J'ai posté ce code, pour illustrer une technique, des personnes voulant sécuriser leur site passeront surement par ici, comme certains spammeurs !
D'ou l'utilité d'en avoir exposé "uniquement les plus grandes lignes".
Crdlt.

signaler à un administrateur
Commentaire de azumi13 le 22/08/2008 06:03:04

j'avais mal compris le principe =) et je m'en escuse.

et c'est vrrai que ça peut inspirer d'autre personne.

@+ sur phpcs

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

securite lors d'un upload [ par erich10 ] j'ai un formulaire pour uploader un fichier dans un repertoire .Pour le faire mon repertoire est en chmod777, comment puis je faire pour interdire l'e securite page [ par amosc ] salut tt le monde ;comment purraij empecher l acces a n importe qu elle de mes pages, je m explique : j ai un site mais si l on tape un nom d une page SECURITE: JE FLIPPE [ par RockmanX ] En fait voilà,j'utilise les session pour sécuriser mes sites...Jusqu'à vendredi sa marchait parfaitement partout mais ce jour-là, j'ai essayé sur un o Protection page [ par SatanCorporation ] Salut a tous !!!!!sur mon site web je voudrais créé une fonction qui me permettrait de protecger une page de mon site.Je voudrias que le code de la pa Protection page web [ par SatanCorporation ] donc tu vois ce que je veux faire c une protection de page web.je vopudrais que ma page resemble a ca ://file.php&lt;?include('protect.php');echo "Apr Securite Win2000-IIS-PHP-ACCESS [ par PascalLF ] LE DECOR :1 client WIN2000 avec IE5.51 serveur Win2000 controleur de domaine (AD)1 serveur Win2000 IIS5 php1 serveur Win2000 autonome avec une BDD Acc protection download [ par bioff ] Comment empêcher un download direct avec l'URL et ainsi outrepasser le script "mot de passe"...D'avance,Merci.bioff securite flash php [ par leokat ] leokatbonjour à tous,Comment puis-je m'y prendre pour que les variables envoyées par mon fichier flash à un script php ne soient pas visibles, ni dans Protection d'html URGENT! [ par Yoteco ] Voilà,J'ai un ti problème... J'ai fais une fenetre dans laquelle n'importe qui peut poster un commentaire sur le site. Le tt est stocker dans une base Protection des fichiers php [ par costou ] Bonjour,Je suis un professionnel qui vend des applications Internet. Elles consistent à informatiser la gestion du système d'information (clients, com


Nos sponsors

Sondage...

CalendriCode

Septembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
2930     

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,41 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.