Discussion:
PHP et securite : script de public ation
(trop ancien pour répondre)
Thierry
2007-01-20 13:41:40 UTC
Permalink
Bonjour,

Je cherche la moins mauvaise solution pour permettre aux visiteurs d'un
site de publier un commentaire ou un petit article, et surtout pour
valider cette publication en évitant les problèmes.

1) Le contexte :

Le formulaire est construit, les données sont enregistrées dans une base
de données, et les données à priori correctement validées et protégées:

- Toutes les entrée du formulaire passent par htmlentities puisqu'elles
seront affichées en html (sauf l'adresse mail).

- Les données sont diversement validées selon le contenu attendu ;
l'entrée email passe par l'expression régulière trouvé dans le faq de ce
forum.

- Toutes les données sont ensuite passées dans une fonction
anti_injection qui les protègent par le biais de mysql_real_escape_string;

- Une entrée permet de publier une (et une seule) photo pour accompagner
l'article. Seul le format jpeg est autorisé (max 800ko), et le format
est vérifié par getimagesize.

- Un dispositif simple permet d'être raisonnablement certain qu'un
humain est bien à l'origine de la publication : un nom d'une espèce
d'oiseau (c'est un des principaux sujet du site) est tiré au hasard et
affiché, l'utilisateur doit simplement noter les initiales du nom de
l'espèce. (sûrement facile à contourner, mais comme il s'agit d'un petit
site, c'est probablement suffisant - sauf cas décrit plus bas ?).

2) Le problème de la validation :

A partir du moment où l'utilisateur clic sur "envoyer", j'ai pensé à
plusieurs solutions pour éviter les problèmes :

- Le plus restrictif : la modération à priori, c'est à dire qu'un des
responsable du site lit le texte et autorise ou non sa publication.
Problèmes : l'article n'est pas immédiatement publié (parfois seulement
après 48h voir un peu plus), et il reste un risque d'usurpation (aucun
moyen de vérifier si l'auteur prétendu est l'auteur réel).

- Moins restrictif : la modération à posteriori, c'est à dire que
l'article est immédiatement publié, mais il peut être supprimé par un
des responsable du site s'il s'agit d'une pub alacon. Le risque
d'usurpation existe là aussi, mais il n'y a plus de délai de
publication. Il y a par contre dans ce cas un risque de publication de
pub alacon pendant quelques heures.

- La validation par l'auteur lui même : le clic sur le bouton "envoyer"
déclenche l'envoi d'un mèl à l'adresse fournie par l'auteur (seulement
si les entrées du formulaire sont correctement validées), ce mèl
contient un lien vers une page du site, avec un identifiant unique. Ce
lien déclenche la publication de l'article s'il est cliqué par le
distinataire du mèl.

Cette troisième et dernière solution a ma préférence : la publication
est immédiate et une éventuelle usurpation sera détectée.

3) Ma principale question :

Le gros problème de cette "La validation par l'auteur lui même" c'est
que j'imagine qu'il devient possible à un spammeur d'utiliser le
dispositif pour spammer : un robot remplit le formulaire
automatiquement, avec une adresse mèl volée, et envoi le texte et
éventuellement l'image de son choix au destinataire de son choix, puis
recommence autant de fois qu'il le souhaite avec d'autres adresses volées.

La seule solution que j'imagine est de limiter très fortement le nombre
d'envoi possible par une même origine : par exemple un seul envoi par
jour. Le système devient alors à priori sans intérêt pour les spammeur.

Mais alors, comment détecter à coup sûr que deux tentatives d'envoi ont
la même origine ? J'ai bien pensé à l'adresse IP via
$_SERVER['REMOTE_ADDR'], mais j'ai vu que cette donnée n'est pas fiable.

Alors, comment faire, et est-ce possible de résoudre ce problème ?

Merci,
--
Thierry
P'tit Marcel
2007-01-20 14:28:19 UTC
Permalink
Post by Thierry
- La validation par l'auteur lui même : le clic sur le bouton "envoyer"
déclenche l'envoi d'un mèl à l'adresse fournie par l'auteur (seulement
si les entrées du formulaire sont correctement validées), ce mèl
contient un lien vers une page du site, avec un identifiant unique. Ce
lien déclenche la publication de l'article s'il est cliqué par le
distinataire du mèl.
Le gros problème de cette "La validation par l'auteur lui même" c'est
que j'imagine qu'il devient possible à un spammeur d'utiliser le
dispositif pour spammer
Risque faible à mon avis :
- les robots sont rarement programmés spécifiquement pour un site donc
le message de validation ne sera pas pris en compte,
- les adresses emails sont généralement inexistantes ou détournées et
donc le spammer ne recevra pas la confirmation

J'ai développé un site avec validation par un URL à cliquer envoyé en
mail. Les auteurs/valideurs sont créés par cooptation. Aucune usurpation
ne s'est jamais produite en 4 ans.
Post by Thierry
La seule solution que j'imagine est de limiter très fortement lenombre
d'envoi possible par une même origine : par exemple un seul envoi par
jour. Le système devient alors à priori sans intérêt pour le spammeur.
Pas une bonne idée : tu bloqueras surtout des vraies personnes se
décidant un beau soir à envoyer d'un coup sa demi-douzaine d'articles et
commentaires qu'il a sous le coude.
Post by Thierry
Mais alors, comment détecter à coup sûr que deux tentatives d'envoiont
la même origine ? J'ai bien pensé à l'adresse IP via
$_SERVER['REMOTE_ADDR'], mais j'ai vu que cette donnée n'est
pas fiable.
Vois notre FAQ http://faqfclphp.free.fr point 7.5, mais à la base
l'approche par adresse IP ne me paraît pas bonne. Par exemple, tous les
internautes du Quatar partagent la même adresse IP sur internet :
http://www.ecrans.fr/spip.php?article657

Pour un développeur Web, vouloir identifier un internaute par l'IP,
c'est comme authentifier un utilisateur en lui demandant juste de saisir
un identifiant sans mot de passe. Beaucoup l'on fait (merci la CNAMTS)
mais cela ne rend pas pour autant la manip valable.


au passage, John, le lien vers le site de Marc Meurens ne marche plus...

a+
--
P'tit Marcel
stats sur les forums modérés http://www.centrale-lyon.org/ng/
Thierry
2007-01-22 19:39:01 UTC
Permalink
Post by P'tit Marcel
Post by Thierry
Le gros problème de cette "La validation par l'auteur lui même" c'est
que j'imagine qu'il devient possible à un spammeur d'utiliser le
dispositif pour spammer
- les robots sont rarement programmés spécifiquement pour un site donc
le message de validation ne sera pas pris en compte,
- les adresses emails sont généralement inexistantes ou détournées et
donc le spammer ne recevra pas la confirmation
En fait je pensais aussi le contenu du commentaire ou de l'article au
message de validation, pour que l'auteur le visualise. Mais ce n'est pas
une bonne idée car un éventuel spammeur pourrait du coup envoyer
n'importe quoi à n'importe qui. En fait, la parade est à priori simple :
ne placer dans le mail de validation qu'un texte écrit en dur.

Du coup, et compte-tenu de tes deux remarques, je pense que je vais
mettre en place cette solution qui me plaît bien. Et probablement
ajouter derrière une possibilité de retro-modération, au cas où.
Post by P'tit Marcel
J'ai développé un site avec validation par un URL à cliquer envoyé en
mail. Les auteurs/valideurs sont créés par cooptation. Aucune usurpation
ne s'est jamais produite en 4 ans.
Yep, mais dans mon idée, il n'y a pas de cooptation : n'importe quel
visiteur devrait pouvoir écrire un commentaire ou petit article s'il le
souhaite. D'où ma crainte initiale.

Bonne continuation,
--
Thierry
Continuer la lecture sur narkive:
Loading...