OVH Cloud OVH Cloud

Spam sur livre d'or...

66 réponses
Avatar
Pat
Salut à tous.

J'ai récupéré un bout de code php pour créer un livre d'or sur le site
d'une amie.
Le seul souci c que chaque jour il est infesté de spam...
J'ai essayé de mettre des liens spampoison censé "aspirer" les robots,
mais ca marche pas du tout...
http://www.larmesdenacres.fr/guestbook.php

Si vous avez un petit truc simple à implémenter, ou une astuce quelconque...
D'avance merci pour toute info.

Pat.

10 réponses

1 2 3 4 5
Avatar
Olivier Miakinen
Le 19/10/2007 16:31, Michael DENIS a écrit :

Quid des noms de domaines à trois niveaux ? Ah si, tu as laissé traîner
un . dans la partie droite, ce qui autorisera une adresse telle que
(ce qui n'était probablement pas voulu).



Mais si mais si. C'est bien l'origine du 6.



Tu n'as pas compris que je parlais des « . ». Ton expression autorise
une adresse avec que des « . » à gauche et plein de « . » à droite.
Mais elle refuse un « + » à gauche et un chiffre dans le TLD.

Que se passera-t-il quand il existera des TLD à plus de 6 lettres ou
avec des chiffres ?



Je modifierai la règle. Et je ne suis pas sûr d'avoir de travail avant
quelques temps, mais je me trompe peut-être...



En fait, la question est plutôt : pourquoi interdire des choses qui sont
potentiellement autorisées, quand tu autorises des choses clairement
interdites ?

Ah ! Je ne savais pas que le "+" était accepté. Y a-t-il d'autres
caractères que j'aurais oublié?



Tout est dit dans la FAQ de PHP, rédigée avec amour suite à une longue
discussion dans les forums et surtout de longues recherches dans les
documents de référence.

Je redonne le lien : <http://faqfclphp.free.fr/#rub5.3>.
Avatar
Michael DENIS
Le 19 Oct 2007 16:00:04 +0200, Olivier Miakinen <om+
écrivait:

Voir <http://faqfclphp.free.fr/#rub5.3>, merci.

[A-Za-z0-9!#$%&'*+/=?^_`{|}~-]



Là je suis étonné. C'est issu d'une "RFC"?

Il est à noter que la règle que je présentais devrait être précédée
de:

$_POST['totm'] = strtolower($_POST['totm']);

ce qui explique l'absence de "A-Z" dans la règle.

Autre petite erreur dans ma règle: le "_" n'est pas autorisé dans les
domaines. Nous serions donc plutôt à quelque chose comme:

(!preg_match('`^[a-z0-9._+-]+@[a-z0-9.-]{2,}.[a-z]{2,6}$`',$_POST['totm']))

voire

(!preg_match('`^[a-z0-9!#$%&'*+/=?^_`{|}~-]+@[a-z0-9.-]{2,}.[a-z]{2,6}$`',$_POST['totm']))

si l'on en croit la faq citée.

--
Michaël DENIS
Avatar
Olivier Miakinen
Pardon si j'en remets une couche...

Le 19/10/2007 16:31, Michael DENIS a écrit :

Que se passera-t-il quand il existera des TLD à plus de 6 lettres ou
avec des chiffres ?



Je modifierai la règle.



Ah. Et comment sais-tu si oui ou non il existe *déjà* des TLD à plus de
six lettres ou avec des chiffres ?

Ah ! Je ne savais pas que le "+" était accepté. Y a-t-il d'autres
caractères que j'aurais oublié?



Ma question précédente prend d'autant plus de poids du fait que tu ne
savais pas quels sont les caractères autorisés depuis toujours dans la
partie gauche. Puisque tu ne le sais pas pour ce qui est à gauche,
comment espères-tu être au courant immédiatement de ce qui se fait à
droite ?
Avatar
Olivier Miakinen
Le 19/10/2007 16:46, Michael DENIS a écrit :

[A-Za-z0-9!#$%&'*+/=?^_`{|}~-]



Là je suis étonné. C'est issu d'une "RFC"?



Oui. RFC 822 er 2822.

(!preg_match('`^[a-z0-9._+-]+@[a-z0-9.-]{2,}.[a-z]{2,6}$`',$_POST['totm']))



C'est un peu mieux. Mais tu autorises toujours des séries de points tout
en refusant des TLD potentiellement valides.

(!preg_match('`^[a-z0-9!#$%&'*+/=?^_`{|}~-]+@[a-z0-9.-]{2,}.[a-z]{2,6}$`',$_POST['totm']))

si l'on en croit la faq citée.



Ah non, là tu interdis tout point en partie gauche.

Pourquoi ne pas adopter la version la plus simple de la FAQ ?
if (preg_match('/^[.A-Za-z0-9+_-]+@[.A-Za-z0-9-]+$/', $email)) { ... }
Avatar
Michael DENIS
Le Fri, 19 Oct 2007 16:45:43 +0200, Olivier Miakinen
<om+ écrivait:

Tu n'as pas compris que je parlais des « . ».



Effectivement, je n'avais pas compris. Je lisais "..." comme un
joker... :-)

Ton expression autorise
une adresse avec que des « . » à gauche et plein de « . » à droite.
Mais elle refuse un « + » à gauche et un chiffre dans le TLD.



C'est un fait. Et je me rends compte en lisant un peu plus loin la faq
que la version "parano" présentée

if (preg_match('/^[.A-Za-z0-9+_-]+@[.A-Za-z0-9-]+$/', $email)) { ... }

n'est pas très loin de la mienne une fois corrigée. :-)

En fait, la question est plutôt : pourquoi interdire des choses qui sont
potentiellement autorisées, quand tu autorises des choses clairement
interdites ?



Ce n'est pas tout à fait faut.

Une des questions que je m'étais posée en faisant cette règle était
aussi: quels sont les caractères les plus dangereux en cas de
tentative de contournement, en particulier pour des choses que je ne
maîtrise pas du tout tel que les dépassements de mémoire, etc... Les
caractères tels que les jokers ne sont-ils pas potentiellement plus
problématiques?

--
Michaël DENIS
Avatar
Michael DENIS
Le Fri, 19 Oct 2007 16:56:16 +0200, Olivier Miakinen
<om+ écrivait:

Oui. RFC 822 er 2822.



Bon. Alors je m'incline... bien bas. ;-) Et je vais faire évoluer ma
règle... une fois que je me serai relevé. :-D

(!preg_match('`^[a-z0-9._+-]+@[a-z0-9.-]{2,}.[a-z]{2,6}$`',$_POST['totm']))





Il doit y avoir une différence entre
[a-z0-9._+-]+
et
[.a-z0-9+_-]+
que je ne saisis pas...

--
Michaël DENIS
Avatar
Olivier Miakinen
Le 19/10/2007 16:59, Michael DENIS a écrit :

[...] Et je me rends compte en lisant un peu plus loin la faq
que la version "parano" présentée

if (preg_match('/^[.A-Za-z0-9+_-]+@[.A-Za-z0-9-]+$/', $email)) { ... }

n'est pas très loin de la mienne une fois corrigée. :-)



Oui, absolument.

Une des questions que je m'étais posée en faisant cette règle était
aussi: quels sont les caractères les plus dangereux en cas de
tentative de contournement, en particulier pour des choses que je ne
maîtrise pas du tout tel que les dépassements de mémoire, etc... Les
caractères tels que les jokers ne sont-ils pas potentiellement plus
problématiques?



D'où la version parano d'où sont exclus des caractères valides, mais
jamais utilisés et potentiellement dangereux (ampersand, apostrophes,
point d'interrogation et toute la clique).

En revanche, interdire les chiffres dans le TLD (ou deux points de
suite) ne sert à rien d'autre qu'à alourdir l'expression.
Avatar
Olivier Miakinen
Le 19/10/2007 17:07, Michael DENIS a écrit :

Il doit y avoir une différence entre
[a-z0-9._+-]+
et
[.a-z0-9+_-]+
que je ne saisis pas...



:-D

Non, pas du tout. Je n'insistais sur les séries de points que pour
montrer le ridicule d'autoriser ceci tout en interdisant d'autres choses
parfaitement valides.

De toute façon, puisqu'il était question dans ce fil d'empêcher le spam,
le contrôle d'adresses email n'est pas très utile dans ce contexte : les
spammeurs n'utilisent que des adresses qui passent les plus stupides de
tous les tests de syntaxe (du genre de par exemple).
Avatar
Michael DENIS
Le Fri, 19 Oct 2007 16:56:16 +0200, Olivier Miakinen
<om+ écrivait:

Pourquoi ne pas adopter la version la plus simple de la FAQ ?



Non. La version complète me parait sympa une fois passé le temps
nécessaire à sa copmpréhension. Dans mon cas, je verrais bien:

$ltext = '[a-z0-9$&+_-]+';
$rtext = '[a-z0-9-]+';
if
(!preg_match('`^$ltext(.$ltext)*@$rtext(.$rtext)+$`',$_POST['totm']))
{ ...

(avec bien sûr un "strtolower" juste avant).

Pas d'erreur?

...

Du coup, en relisant un peu, je me rend compte qu'une adresse
"" serait valide?

--
Michaël DENIS
Avatar
Michael DENIS
Le Fri, 19 Oct 2007 17:21:43 +0200, Olivier Miakinen
<om+ écrivait:

De toute façon, puisqu'il était question dans ce fil d'empêcher le spam,
le contrôle d'adresses email n'est pas très utile dans ce contexte : les
spammeurs n'utilisent que des adresses qui passent les plus stupides de
tous les tests de syntaxe (du genre de par exemple).



Là, l'intérêt est peut-être double. D'abord empêcher l'apparition
d'url de pub dans le champ mail comme c'est le cas actuellement. Car
pour l'instant, Pat n'a encore visiblement rien! Ensuite, éviter
l'éventuel contournement du formulaire pour l'envoi de spam dans le
cas où le contenu serait envoyé par mail.

--
Michaël DENIS
1 2 3 4 5