Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Problème de robots

0 views
Skip to first unread message

Jonat

unread,
Jan 25, 2009, 4:41:28 PM1/25/09
to
Salut tout le monde ;-)

J'suis peut-être pas dans le bon NG pour mon problème mais comme je sais
qu'il y a des pro ici ;)

Je possède un très vieux site qui permet de mettre des commentaires sur des
fiches disques et le webmaster a disparu :(
Ca écrit même les commentaires dans des fichiers .txt ! :)

Problème : plein de robots me balancent de la "merdouille" dans ma boîte
mail.
Vous n'auriez pas "un truc" pour limiter un peu ce spammage s'il vous plaît
? (je n'y connais pas grand chose et vu le vieux site j'ai pas trop envie de
payer cher pour faire installer un captcha :)

J'pense que le morceau concerné est celui-ci :

if(isset($_POST["table"]) && isset($_POST["post"])) {
$i=1;
while(file_exists("dat/post/".$_POST["table"]."_".$_POST["post"]."_".$i.".txt")){ $i++; } $fp =@fopen("dat/post/".$_POST["table"]."_".$_POST["post"]."_".$i.".txt","w+"); @fwrite($fp, stripslashes($_POST["message"])); @fclose($fp); OpenDB(); $sql = "UPDATE mytracks SET posts=posts+1, post=NOW() "; $sql.= "WHERE track=".$_POST["post"]; $qry = mysql_query($sql); ClosDB(); $headers = "From: $robot\r\n".$header; $subject = "Commentaire sur ".$_POST["table"]." #".$_POST["post"]; $content = stripslashes($_POST["message"]); @mail($mailto, $subject, $content, $headers); header("location:./?".$_POST["table"]."=".$_POST["post"]); exit();}Merci d'avance ;-)

Aurelgadjo

unread,
Jan 26, 2009, 10:50:37 AM1/26/09
to
Jonat a écrit :

Cette "merdouille" contient-elle forcément des URL ?
Si oui, en même pas une ligne on peut refuser tous les messages
contenant http.
Pour mettre un captcha, voir captcha.fr, c'est bien documenté et bien
fait :)

Jonat

unread,
Jan 26, 2009, 12:16:25 PM1/26/09
to
"Aurelgadjo" <aurel...@gmail.com> a écrit dans le message de groupe de
discussion : 497ddbcc$0$1446$426a...@news.free.fr...

Oui, y'a des URL à chaque fois.
Si tu sais me dire comment refuser tous les messages contenant http ce
serait sympa ;-)

Jonat.

Aurelgadjo

unread,
Jan 26, 2009, 12:45:00 PM1/26/09
to
Jonat a écrit :

Remplace ta premiére ligne, à savoir


if(isset($_POST["table"]) && isset($_POST["post"])) {

par
le contenu de http://pastebin.com/m991aecc
(collé sur ce site car la mise en forme d'un message dans les newsgroups
peut casser le code)
Si y'a pas d'erreurs ça devrait bloquer tous les messages contenant
"http://". Attention, ça va bloquer de façons silencieuse... càd qu'en
fonction de la suite de ton code, l'utilisateur pourra ne pas etre
averti du non-envoi de son message.

Jonat

unread,
Jan 26, 2009, 1:14:40 PM1/26/09
to
"Aurelgadjo" <aurel...@gmail.com> a écrit dans le message de groupe de
discussion : 497df69c$0$6827$426a...@news.free.fr...

Ca marche ! Merci merci merci !
Quand y'a http:// ça renvoie vers la page d'accueil de mon site.
Ca marquerait http:// interdit ce serait nickel mais ce que tu m'as donné
c'est déjà un énorme service.
Merci beaucoup ;-)

Anthony

unread,
Jan 27, 2009, 5:07:22 AM1/27/09
to
Jonat a écrit :

>
> J'pense que le morceau concerné est celui-ci :
>
> if(isset($_POST["table"]) && isset($_POST["post"])) {
> $i=1;
> while(file_exists("dat/post/".$_POST["table"]."_".$_POST["post"]."_".$i.".txt")){
> $i++; } $fp
> =@fopen("dat/post/".$_POST["table"]."_".$_POST["post"]."_".$i.".txt","w+");
> @fwrite($fp, stripslashes($_POST["message"])); @fclose($fp); OpenDB();
> $sql = "UPDATE mytracks SET posts=posts+1, post=NOW() "; $sql.= "WHERE
> track=".$_POST["post"]; $qry = mysql_query($sql); ClosDB(); $headers =
> "From: $robot\r\n".$header; $subject = "Commentaire sur
> ".$_POST["table"]." #".$_POST["post"]; $content =
> stripslashes($_POST["message"]); @mail($mailto, $subject, $content,
> $headers); header("location:./?".$_POST["table"]."=".$_POST["post"]);
> exit();}Merci d'avance ;-)

bonjour,

la prochaine fois, question sur fr.comp.lang.php :-)
ça fera moins HS.

anthony

Olivier Miakinen

unread,
Jan 28, 2009, 7:23:37 PM1/28/09
to
[ copie et suivi vers fr.comp.lang.php ]

Le 25/01/2009 22:41, Jonat a écrit :
> Salut tout le monde ;-)
>
> J'suis peut-être pas dans le bon NG pour mon problème

En effet. Le bon groupe est fr.comp.lang.php, vers où je fais suivre la
discussion. Attention, ce groupe est modéré.

> mais comme je sais qu'il y a des pro ici ;)

Ben c'est raté. Le seul qui t'a conseillé sur ton bout de code n'a pas
vu à quel point celui-ci était une aubaine pour les spammeurs, et ne t'a
pas conseillé efficacement sur le moyen d'éviter que ton script spamme
la terre entière.

> Je possède un très vieux site qui permet de mettre des commentaires sur des
> fiches disques et le webmaster a disparu :(
> Ca écrit même les commentaires dans des fichiers .txt ! :)
>
> Problème : plein de robots me balancent de la "merdouille" dans ma boîte
> mail.

Problème supplémentaire : ils peuvent balancer la même merdouille à
quelques milliers d'autres destinataires en même temps, sans que tu t'en
rendes compte.

> Vous n'auriez pas "un truc" pour limiter un peu ce spammage s'il vous plaît
> ? (je n'y connais pas grand chose et vu le vieux site j'ai pas trop envie de
> payer cher pour faire installer un captcha :)
>
> J'pense que le morceau concerné est celui-ci :

Note : j'ai remis le morceau un peu en forme pour qu'il soit plus
lisible. Sauf erreur de ma part, le code suivant devrait faire la même
chose que celui que tu avais écrit sur une seule ligne.

> if(isset($_POST["table"]) && isset($_POST["post"])) {
> $i=1;

> while(file_exists("dat/post/$_POST[table]_$_POST[post]_$i.txt"))
> { $i++; }
> $fp =@fopen("dat/post/$_POST[table]_$_POST[post]_$i.txt","w+");


> @fwrite($fp, stripslashes($_POST["message"]));
> @fclose($fp);
> OpenDB();
> $sql = "UPDATE mytracks SET posts=posts+1, post=NOW() ";

> $sql.= "WHERE track=$_POST[post]";
> $qry = mysql_query($sql);
> ClosDB();
> $headers = "From: $robot\r\n$header";
> $subject = "Commentaire sur $_POST[table] #$_POST[post]";


> $content = stripslashes($_POST["message"]);
> @mail($mailto, $subject, $content, $headers);

> header("location:./?$_POST[table]=$_POST[post]");
> exit();
> }

Questions :
1) Que vaut la variable $robot ? Est-ce que ça vient d'un $_POST ?
2) Que vaut la variable $header ? Est-ce que ça vient d'un $_POST ?
3) La variable $mailto vient-elle d'un $_POST ?

Si les trois variables $robot, $header et $mailto sont fixées en dur
dans ton code à des valeurs sans danger, c'est bon. Sinon, il faut faire
quelque chose ici.

Ceci mis à part, le problème le plus évident est celui de $subject que
tu initialises à partir de $_POST["table"] et $_POST["post"]. Si un
attaquant met dedans une valeur avec des sauts de ligne, il peut très
bien rajouter un millier d'entêtes « Bcc » (copie cachée) au courriel
que tu envoies, et donc spammer la terre entière.

Solution : mettre un $subject en dur, et ne mettre $_POST["table"] et
$_POST["post"] que dans $content :
$subject = "Commentaire sur la page web";
$content = "Table : $_POST[table]\nPost : $_POST[post]\n";
$content .= stripslashes($_POST["message"]);

Cordialement,
--
Olivier Miakinen

GPLHost (thomas)

unread,
Feb 3, 2009, 6:34:52 PM2/3/09
to
>>> Jonat a écrit :
>>>> Salut tout le monde ;-)
>>>>
>>>> J'suis peut-être pas dans le bon NG pour mon problème mais comme je
>>>> sais qu'il y a des pro ici ;)

Ouai, c'est pas le bon NG, mais pour cette fois ca ira! :)

>>>> Je possède un très vieux site qui permet de mettre des commentaires
>>>> sur des fiches disques et le webmaster a disparu :(
>>>> Ca écrit même les commentaires dans des fichiers .txt ! :)

Pourquoi pas!

>>>> Problème : plein de robots me balancent de la "merdouille" dans ma
>>>> boîte mail.
>>>> Vous n'auriez pas "un truc" pour limiter un peu ce spammage s'il
>>>> vous plaît ? (je n'y connais pas grand chose et vu le vieux site
>>>> j'ai pas trop envie de payer cher pour faire installer un captcha :)

Il existe des solutions en gratuit pour les captcha...

>>>> J'pense que le morceau concerné est celui-ci :
>>>>
>>>> if(isset($_POST["table"]) && isset($_POST["post"])) {
>>>> $i=1;
>>>> while(file_exists("dat/post/".$_POST["table"]."_".$_POST["post"]."_".$i.".txt")){
>>>> $i++; } $fp
>>>> =@fopen("dat/post/".$_POST["table"]."_".$_POST["post"]."_".$i.".txt","w+");
>>>> @fwrite($fp, stripslashes($_POST["message"])); @fclose($fp);
>>>> OpenDB(); $sql = "UPDATE mytracks SET posts=posts+1, post=NOW() ";
>>>> $sql.= "WHERE track=".$_POST["post"]; $qry = mysql_query($sql);
>>>> ClosDB(); $headers = "From: $robot\r\n".$header; $subject =
>>>> "Commentaire sur ".$_POST["table"]." #".$_POST["post"]; $content =
>>>> stripslashes($_POST["message"]); @mail($mailto, $subject, $content,
>>>> $headers);
>>>> header("location:./?".$_POST["table"]."=".$_POST["post"]);
>>>> exit();}Merci d'avance ;-)

Super pas clean ton bou de code.

Pour rigoler, dans table, je met:
../../usr/share/doc/libboost-doc/HTML/LICENSE_1

dans post je met 1, et comme par magie ca match avec:

/usr/share/doc/libboost-doc/HTML/LICENSE_1_0.txt

qui est present si tu as installe libboost-doc. Me reste plus qu'a
envoyer un gros paquet de merde, et je remplis ton disque dur (partition
/usr si c'est separe, et ca casse tout ton system si comme un debutant
tu n'as qu'une partition).

Ca c'est pour le code qui ecrit dans tes .txt. Passons a la suite.

header("location:./?".$_POST["table"]."=".$_POST["post"]);

Pareil, aucun check des parametres, on peut en faire des choses la...
Exemple, je met dans table:

\n\n<html><script language=javascript>alert(1)</script> ...

Et voila, ton site est transforme en vecteur de pishing.

Je ne commente meme pas la partie qui envoie des mails sans aucun check
vu que j'ai qu'une partie du code, mais ca doit etre du meme genre, donc
n'importe qui peut utiliser ton site pour spammer. De maniere general ne
JAMAIS changer le header du mail quand c'est possible. Dans ton cas,
envoie le sujet dans le corp du message et met toujours le meme sujet.
Ca limitera fortement les degats, et pour toi c'est pareil, t'auras
juste a ouvrir le mail pour voir le sujet.

Bref, met direct tout ce script a la poubelle, il est hyper dangereux.
Mieux vaut ne pas contacter l'ancien webmaster, il n'a pas le niveau de
toutes facons.

Thomas

0 new messages