Précédent   Forum des professionnels en informatique > PHP > Langage > Sessions
Sessions Forum d'entraide sur les sessions avec PHP. Avant de poster -> FAQ sessions, Cours sessions et Sources sécurité
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/05/2006, 17h28   #1
Membre chevronné
 
Avatar de nako
 
Ingénieur développement logiciels
Inscription : août 2003
Messages : 581
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : août 2003
Messages : 581
Points : 635
Points : 635
Par défaut [Sécurité] Spam sur mon forum

Bonjour à tous,
je suis victime depuis aujourd'hui de spam sur mon forum (un forum fait maison).
Les utilisateurs n'ont pas besoin de s'identifier pour laisser un message, et j'imagine qu'il s'agit de robots qui insèrent des messages "enlarge your peniche, buy viagra" et autres réjouissances.

Mon formulaire est totu simple :
un champ auteur,
un champ titre du message
un champ message (textarea).

Je ne souhaite pas mettre en place d'image de controle, ni d'identification.

Avez-vous une proposition ?
soit pour détecter qu'il s'agit d'un robot (j'ai bien l'adresse IP mais bon, elle peut changer régulièrement)
soit pour gruger le robot (?)

Merci d'avance.
Nako
nako est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2006, 17h36   #2
Expert Confirmé
 
Avatar de KiLVaiDeN
 
Inscription : octobre 2003
Messages : 2 714
Détails du profil
Informations forums :
Inscription : octobre 2003
Messages : 2 714
Points : 2 689
Points : 2 689
Salut,

Oui il y a une solution, c'est de changer le nom des inputs en ajoutant des chiffres aléatoires à leur nom :

Code :
<input type="text" name="username12355466">
Puis à mettre un champs hidden correspondant à ce code.

Ainsi, quelqu'un qui navigue sur ton site peut entrer un message sans pb, mais quelqu'un qui utilise un bot pour passer outre le formulaire de ton site, planterait. Il serait obligé de faire un get d'abord sur ta page pour obtenir le code, et pour soumettre sa requete ( ça pourrait le décourager ) Puis plus qu'un simple numéro aléatoire en fin de champ, ce serait encore plus efficace d'avoir un nom aléatoire totalement !

En plus, tu pourrais mettre en place le système dont tu parles pour bloquer une même ip. Je vois mal comment ils pourraient spammer si tu bloques une même ip pendant une minute

En plus de tout ça, ajouter un javascript permet de filtrer les bots; par exemple récupérer le code dont je parlais plus haut en AJAX afin de tromper le bot serait une bonne idée !

Peut-être que d'autres personnes ont d'autres idées A+
__________________
K
KiLVaiDeN est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2006, 17h42   #3
Membre chevronné
 
Avatar de nako
 
Ingénieur développement logiciels
Inscription : août 2003
Messages : 581
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : août 2003
Messages : 581
Points : 635
Points : 635
Salut et merci pour ta réponse.

Citation:
Envoyé par KiLVaiDeN
Puis à mettre un champs hidden correspondant à ce code.
Alors, en fait, je ne suis pas super expert en sécurité (j'avoue très franchement que c'est quelque chose qui me dépasse, mais alors à un point).
Bref, tout ça pour te demander si tu pouvais détailler un peu plus le principe.
Comment controler qu'on est bien passé par le formulaire, et pourquoi le robot se fait avoir.

Merci et désolé pour le novice.

En fait, je vis dans le joli monde de Heidi, ou tout le monde est gentil, pourquoi des méchant gens s'amusent à spammer un pauvre forum d'une association locale qui doit avoir en totu et pour tout 50 utilisateurs ???
nako est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2006, 17h53   #4
Expert Confirmé
 
Avatar de KiLVaiDeN
 
Inscription : octobre 2003
Messages : 2 714
Détails du profil
Informations forums :
Inscription : octobre 2003
Messages : 2 714
Points : 2 689
Points : 2 689
Salut,

Le bot spam ton forum en déclanchant un post(ou un get, si ton form etait en method get) directement sur ta page de résultat(celle pointée par ton attribut "action" de ton form) avec les champs prérenseignés.

Donc il fait quelque chose du style :

Code :
POST http://tonsite.com/actionpage.php champ1="toto";champ2="viagra";champ3="c youpi"
Le but c'est que ça requête ne fonctionne plus. Pour cela, le seul element sur lequel tu peux agir, ce sont les noms des champs. Ou le nom de la page. Mais modifier le nom de la page à chaque fois c'est un peu difficile et lourd quand même

Donc, vu que ton but est de changer les noms des champs à chaque fois pour que le bot ne puisse pas envoyer la requete directement à ta page action, il faut générer des noms de champ aléatoire C'est ce que je te proposais au début.

Mettre le champ hidden pour le code, ça permet ensuite dans ta page de résultat de récuperer le champ plus facilement.

Mais vu que ton formulaire est simple, tu peux t'en tirer avec une astuce de ce type :

Génère le nom de ton champ avec un nom aléatoire avec par exemple la 4ème lettre representant l'indice de ton champ, par exemple :

Code :
1
2
3
4
5
 
<input type="text" name="lka1jelazkjazelkazej">
<input type="text" name="zza2qsdqsdqsdqsdlkazej">
<input type="text" name="mma3jelazkqsdqsdqsdqsqqqzej">
<input type="text" name="uya4jddjazelkazej">
et de l'autre coté à la reception, tu parcours le tableau des variables de formulaires reçues, en testant le quatrième caractère dans un switch

Important : gerer les sessions peut aussi stopper le bot. Tu set la session dans la page d'accueil, et si la session est valide, tu autorises le post, sinon tu le rejètes.

Avec toutes ces sécurités t'es tranquille pour la plupart des script-kiddies Il y aura toujours le guru qui va trouver un moyen de spammer, mais c'est valable pour tous les forums dans ce cas et on ne peut rien y faire !
__________________
K
KiLVaiDeN est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2006, 19h06   #5
Membre chevronné
 
Avatar de nako
 
Ingénieur développement logiciels
Inscription : août 2003
Messages : 581
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : août 2003
Messages : 581
Points : 635
Points : 635
Ouah !
merci pour le leçon d'attaque de formulaire PHP.
J'ai tellement demal à m'imaginer que des gens puissent s'amuser à développer des bots pour ça ... que j'ai encore plus de mal à trouver la parade.

Je vais mettre tes explications en application !
Merci encore.
Je vous tiendrai au courant de l'efficacité du truc !!!
Merci.
a+
nako est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2006, 19h23   #6
Membre Expert
 
Avatar de Alexandre T
 
Inscription : mai 2002
Messages : 1 022
Détails du profil
Informations personnelles :
Âge : 35
Localisation : France, Meurthe et Moselle (Lorraine)

Informations forums :
Inscription : mai 2002
Messages : 1 022
Points : 1 123
Points : 1 123
Citation:
Envoyé par nako
En fait, je vis dans le joli monde de Heidi, ou tout le monde est gentil, pourquoi des méchant gens s'amusent à spammer un pauvre forum d'une association locale qui doit avoir en totu et pour tout 50 utilisateurs ???
Si votre forum est un développement privé, il est étonnant que des pirates organisés s'amusent à le pirater. En effet, les "sociétés" qui créent des robots visent des cibles comme vBulletin, phpbb, InvasionBoard pour que leurs "scripts" puissent s'exécuter sur un maximum de cibles. Et donc vendre le maximum de viagra ou sucharger le maximum de serveurs et créer le maximum d'erreurs de déni de service.

Donc si votre forum d'association, de peu d'utilisateurs est ainsi spammé, que c'est un développement de votre cru, alors il y a fort à parier que vous connaissiez le coupable. Vous pouvez mettre en place la solution de KiLVaiDeN . Et en même temps, voire un peu avant, stocker les ips et les dates de soumissions de ces messages. Comparez les aux ips et heures de connexion de vos autres visiteurs.
__________________
Alexandre T.

PHP5/MySQL5 Codes prêts à l'emploi
30 projets avec codes sources complets pour créer diaporamas photos, chat, arbre généalogique, statistiques de visites, création de graphiques, moteur de recherche, Sudoku etc...

Mes articles
Alexandre T est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2006, 21h10   #7
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
Citation:
Envoyé par Alexandre T
Et en même temps, voire un peu avant, stocker les ips et les dates de soumissions de ces messages. Comparez les aux ips et heures de connexion de vos autres visiteurs.
Et faire un nslookup ou un gethostbyaddr() peut donner des pistes...
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2006, 23h48   #8
Membre chevronné
 
Avatar de nako
 
Ingénieur développement logiciels
Inscription : août 2003
Messages : 581
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : août 2003
Messages : 581
Points : 635
Points : 635
Citation:
Envoyé par Alexandre T
Si votre forum est un développement privé, il est étonnant que des pirates organisés s'amusent à le pirater.
Ca me semble étrange aussi.
Je pensais plutôt à un robot qui scruterait "au hasard" les pages web et tenterait de remplir des formulaires.
Les messages on tous plus ou moins la même forme :
titre : cialis ou viagra
et dans le corps du message, des tentatives d'insertion de bbcode. Du coup, comme je n'utilise pas le bbcode (développement perso très basique), les liens ne sont pas cliquables.

Quant à la personne de mon entourage qui ferait ça, j'avoue que ne voit pas mais pourquoi pas ...

En tout cas, merci de vous être penché sur mon cas.
Je vous tiens au courant.
Cordialement,
nako.
nako est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2006, 23h51   #9
Membre chevronné
 
Avatar de nako
 
Ingénieur développement logiciels
Inscription : août 2003
Messages : 581
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : août 2003
Messages : 581
Points : 635
Points : 635
Citation:
Envoyé par Mr N.
Et faire un nslookup ou un gethostbyaddr() peut donner des pistes...
Ah yes, il va vraiment falloir que je ressorte mes cours de réseau !
C'est vraiment pas ma tasse de thé tout ça : sécurité + réseau ! (oui, je sais, vous vous en étiez aperçu )
Merci encore.
nako est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2006, 11h55   #10
Membre chevronné
 
Avatar de nako
 
Ingénieur développement logiciels
Inscription : août 2003
Messages : 581
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : août 2003
Messages : 581
Points : 635
Points : 635
Bonjour à tous,
comme promis, je vous tiens au courant de l'évolution :

Après une période sans message moisi, l'activité a repris.
Je me suis donc décidé à faire une petite rustine en attendant plus robuste (à forum maison, réparation maison ).
Ca tiendra le temps que ça tiendra mais pour l'instant, ça fonctionne.

Sinon, pour éclaircir les idées, il s'agit bien d'un robot !
Il ne s'attaque pas spécialement à mon forum mais à beaucoup d'autres (des amis m'ont rapporté le même problème).
Et il utilise à chaque fois une adresse IP différente.
Je garde les IP au cas où, mais je ne vois pas trop quoi en faire.
A tous les coups le propriétaire des ces adresses n'y est pour rien.

Enfin, en tout cas, merci pour vos explications, elles m'ont permis de mmieux comprendre le contournement de la sécurité pour faire ces spams.
A++, je met résolu.
nako est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2006, 12h10   #11
Membre Expert
 
Homme
Inscription : janvier 2004
Messages : 1 238
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : Finance

Informations forums :
Inscription : janvier 2004
Messages : 1 238
Points : 1 421
Points : 1 421
J'ai également constaté quelques spams sur mon forum (code perso également), mais c'est du "soft" genre "buy nike" ;o)

J'ai résolu le probleme en faisant une fonction qui me renvoie un "coefficient de spammage" et qui marque supprimé le message dès qu'il est posté (comme ca, ca evite de supprimer des vrais messages, je peux toujours les démarquer par la suite.

Ce "coefficient" est calculé de maniere simple : je calcule la fréquence d'apparition des mots dans un message et je regarde le pourcentage des mots les plus utilisés, ainsi que la taille du message. En effet, mes spams sont composés de "gros" message (genre 500 mots minimum) avec toujours les memes mots qui se repetent. Donc si le message fait plus de 100 mots par exemple et que les 3 mots (superieur a 2 lettres) qui reviennent le plus souvent composent plus de 10% du message, il est marqué comme spam.

A titre de vérification, j'ai passé cette fonction sur les anciens messages du forum (9000 messages environ), et seul 1 message a été marqué a tort... ce qui me parait pas mal comme heuristique ;o)

J'avoue que le coup des champs a nom variable a l'air pas mal, mais je crois quand meme, vu que ce sont des forums "persos", que le bot doit lire la page avant de poster...
__________________
PHP :
Regle n°1 : mysql_query(...), mysql_connect(...) et mysq_select_db(...) doivent EN DEBUG etre suivies de or die(mysql_error()); (mais jamais en production)
Regle n°2 : Mieux encore : mysql_query($requete) or die("$requete<br/>".mysql_error());
Regle n°3 : echo '<pre>';var_dump($var);echo '</pre>'; affiche le contenu et le type d'une variable.
Publiez vos textes de fantasy et de science-fiction sur http://www.cercledefaeries.com/concours/
Fladnag est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2006, 12h34   #12
Membre éclairé
 
Inscription : juillet 2005
Messages : 1 221
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 1 221
Points : 398
Points : 398
C'est pas mal comme méthode mais tu fais comment si la nature des spams change ?
__________________
C'est pas parce que j'ai tort que vous avez raison.
psychoBob est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2006, 13h11   #13
Membre Expert
 
Homme
Inscription : janvier 2004
Messages : 1 238
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : Finance

Informations forums :
Inscription : janvier 2004
Messages : 1 238
Points : 1 421
Points : 1 421
evidemment, si la nature des spams change, ca marchera plus... j'ai rajouté un p'tit filtre supplementaire sur certains mots interdits... mais bon, les gens qui developpent les robots les font évoluer avec le temps, donc a mon avis il faut faire evoluer le code les contrant en meme temps. Il est difficile de faire un code qui les bloque une fois pour toute (ou alors il faut une verification par image générée en php par exemple).

Donc : j'adapte mon code ;o)
__________________
PHP :
Regle n°1 : mysql_query(...), mysql_connect(...) et mysq_select_db(...) doivent EN DEBUG etre suivies de or die(mysql_error()); (mais jamais en production)
Regle n°2 : Mieux encore : mysql_query($requete) or die("$requete<br/>".mysql_error());
Regle n°3 : echo '<pre>';var_dump($var);echo '</pre>'; affiche le contenu et le type d'une variable.
Publiez vos textes de fantasy et de science-fiction sur http://www.cercledefaeries.com/concours/
Fladnag est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2006, 13h53   #14
Membre éclairé
 
Inscription : juillet 2005
Messages : 1 221
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 1 221
Points : 398
Points : 398
C'est quoi ton forum Fladnag ? Un phpBB ? Comment ce fait-il que le robot puisse spammer ton forum si il est protégé par un espace membre ?
__________________
C'est pas parce que j'ai tort que vous avez raison.
psychoBob est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2006, 14h01   #15
Membre chevronné
 
Avatar de nako
 
Ingénieur développement logiciels
Inscription : août 2003
Messages : 581
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : août 2003
Messages : 581
Points : 635
Points : 635
Hello, comme fladnag, mon forum est un forum que j'ai développé de A à Z (pour voir comment ça marche à vrai dire, et pour faire un truc light aussi) et j'ai choisi de ne pas authentifier les personnes qui postent (pour que les gens postent plus facilement).
Ce problème de spam est en quelque sorte le revers de la médaille, mais j'ai utilis" exactement le même système de détection que fladnag et pour l'instant, ça marche pas mal. J'enregistre le message comme si de rien n'était (en autre pour conserver l'adresse IP) mais je le "cache".
Voila.
nako est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2006, 14h04   #16
Membre Expert
 
Homme
Inscription : janvier 2004
Messages : 1 238
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : Finance

Informations forums :
Inscription : janvier 2004
Messages : 1 238
Points : 1 421
Points : 1 421
nan, c'est pas un phpBB, il est basé (mais ca fait longtemps) sur un "Dalai Forum" (doit y avoir une 50aine de sites max qui l'ont ;o) qui avait pour charte graphique l'ancienne de feu KetiX pour ceux qui s'en souviennent.

Mais je l'ai refait entierement y a quelques temps (html, php, sql, structure de données, etc...). Maintenant il est vrai que mes champs n'ont pas des noms tres spécial, auteur, titre, message...

et non, il n'est pas protégé par inscription. N'importe qui peut poster
__________________
PHP :
Regle n°1 : mysql_query(...), mysql_connect(...) et mysq_select_db(...) doivent EN DEBUG etre suivies de or die(mysql_error()); (mais jamais en production)
Regle n°2 : Mieux encore : mysql_query($requete) or die("$requete<br/>".mysql_error());
Regle n°3 : echo '<pre>';var_dump($var);echo '</pre>'; affiche le contenu et le type d'une variable.
Publiez vos textes de fantasy et de science-fiction sur http://www.cercledefaeries.com/concours/
Fladnag est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2006, 14h49   #17
Membre éclairé
 
Inscription : juillet 2005
Messages : 1 221
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 1 221
Points : 398
Points : 398
Citation:
et non, il n'est pas protégé par inscription. N'importe qui peut poster
Ah voilà c'est pour ça, je pensais qu'un robot spammeux c'était inscrit et s'amusait à poster.....
__________________
C'est pas parce que j'ai tort que vous avez raison.
psychoBob est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h26.


 
 
 
 
Partenaires

Hébergement Web