Euh... « merci » c'est une constante définie par define("merci", ...) ?
Si oui, il est d'usage de mettre les constantes en majuscules. Mais si
comme je le suppose tu veux comparer avec la chaîne fixe « "merci" »,
c'est un bug dans ton code qui devrait générer une alerte de type
E_NOTICE.
> <span class="rouge"><br />Votre adresse a déjà > été enregistrée.</span>
Le « class="rouge" », ce n'est pas une erreur de PHP, mais une mauvaise
conception HTML : une classe devrait définir une sémantique, pas une
apparence.
> <?php
> if (isset($_GET['mail'])) {
> $verif = $wpdb->query("SELECT * FROM maildata WHERE > adresse='".$_GET['mail']."'");
Euh... tu ne vérifies pas la valeur avant de passer une donnée
utilisateur à une requête de base de donnée ? Tu as déjà entendu
parler d'injection SQL ?
S'il te plaît, débranche *IMMÉDIATEMENT* ton site, il est probablement
déjà utilisé par des spammeurs pour envoyer des pubs pour le Viagra à
la terre entière !
Puis fais appel à un professionnel pour passer en revue tous tes scripts
ou pour les réécrire. Il te résoudra au passage ton problème de « @ »
qui ne passe pas.
Je suis sérieux. Merci de stopper le plus vite possible cette source de
spam involontaire (de ta part).
> Euh... « merci » c'est une constante définie par define("merci", ...) ?
> Si oui, il est d'usage de mettre les constantes en majuscules. Mais si
> comme je le suppose tu veux comparer avec la chaîne fixe « "merci" »,
> c'est un bug dans ton code qui devrait générer une alerte de type
> E_NOTICE.
> Le « class="rouge" », ce n'est pas une erreur de PHP, mais une mauvaise
> conception HTML : une classe devrait définir une sémantique, pas une
> apparence.
OK
>> <?php
>> if (isset($_GET['mail'])) {
>> $verif = $wpdb->query("SELECT * FROM maildata WHERE
>> adresse='".$_GET['mail']."'");
> Euh... tu ne vérifies pas la valeur avant de passer une donnée
> utilisateur à une requête de base de donnée ? Tu as déjà entendu
> parler d'injection SQL ?
oui, j'ai supprimé la vérification pour être certain que ce n'était pas la cause pendant les tests.
normallement, ya ça
if (isset($_GET['mail']) && preg_match("/^[\w\.-]+@[\w\.-]+\.[a-z]{2,3}$/i",
$_GET['mail'])
est ce suffisant ?
> ARRRRGHHH !!!
>> mail($TO2, $subject, $message, $h);
> S'il te plaît, débranche *IMMÉDIATEMENT* ton site, il est probablement
> déjà utilisé par des spammeurs pour envoyer des pubs pour le Viagra à
> la terre entière !
> Puis fais appel à un professionnel pour passer en revue tous tes scripts
> ou pour les réécrire. Il te résoudra au passage ton problème de « @ »
> qui ne passe pas.
Pas de panique, cette partie (l'envoi de courriel) n'y est plus depuis que ça ne marche plus...
Evidemment,en relisant, je comprends le ARRRRGHHH !!!
je suppose que votre grande crainte est que le vilain pas beau soit maître de $message ?
là ou le bât blesse,c'est que c'est un professionnel qui l'a écrit .........
mais à titre privé en bénévolat,s'agissant d'un site d'association.
mon seul boulot a été de tracer pourquoi ça ne marchait plus.
en virant tout les tests, (celle dont vous parliez contre le SQL INJECTION et celle qui renvoie à merci),ça m'a permit de voir la disparition du @ dans la base.
Merci
Eric (mais vraiment pas développeur web,qu'un peu en C des fois le WK)
>> Ça ne se produit pas si tu renommes le paramètre en autre chose que
>> 'mail' ?
> je vais essayer.... comme c'est tombé en panne du jour au lendemain, je > pense aussi à une protection quelconque.
Ok. Je n'ai pas demandé, mais c'est bien $_GET['mail'] lui-même qui est
vide, et pas le résultat d'un traitement fait sur cette valeur ?
> [...] j'ai supprimé la vérification pour être certain que ce n'était pas la > cause pendant les tests.
Ok.
> normallement, ya ça
> if (isset($_GET['mail']) && preg_match("/^[\w\.-]+@[\w\.-]+\.[a-z]{2,3}$/i",
> $_GET['mail'])
> est ce suffisant ?
Là, pour le coup, c'est trop restrictif : cela interdit par exemple
mon adresse om+n...@miakinen.net qui est valide. Voir la FAQ du forum
à <http://faqfclphp.free.fr/#rub5.3> pour de meilleurs tests.
Par exemple le dernier :
preg_match('/^[.A-Za-z0-9+_-]+@[.A-Za-z0-9-]+$/', $_GET['mail'])
> Pas de panique, cette partie (l'envoi de courriel) n'y est plus depuis que > ça ne marche plus...
> Evidemment,en relisant, je comprends le ARRRRGHHH !!!
> je suppose que votre grande crainte est que le vilain pas beau soit maître > de $message ?
Le vilain pas beau n'a pas besoin de maîtriser $message pour envoyer
ce qu'il veut à qui il veut -- du moins c'était vrai dans certaines
versions de la fonction mail(), mais je crois que les sauts de lignes
sont maintenant filtrés.
Dans certaines versions de PHP, il suffisait de mettre dans $TO2 un truc
du genre :
"a...@example.com, a...@example.com, ..., adr1...@example.com\n
Subject: mon joli spam\n
Content-Type: multipart/alternative; boundary=truc\n
\n
--truc
Content-Type: text/html\n
\n
Achetez mes jolis produits !\n
\n
--truc--\n"
Avec ce seul paramètre, on peut choisir à la fois la liste des 1000
spammés, le sujet du spam, et son contenu.
> mon seul boulot a été de tracer pourquoi ça ne marchait plus.
> en virant tout les tests, (celle dont vous parliez contre le SQL INJECTION > et celle qui renvoie à merci), ça m'a permis de voir la disparition du @ dans > la base.
Il vaudrait mieux faire un « echo $_GET['mail']; » et voir le code
source du HTML généré (ou mieux, l'envoyer comme text/plain par un
header() en début de script).
"Olivier Miakinen" <om+n...@miakinen.net> a écrit dans le message de news: jfugk5$1p7...@cabale.usenet-fr.net...
> Ok. Je n'ai pas demandé, mais c'est bien $_GET['mail'] lui-même qui est
> vide, et pas le résultat d'un traitement fait sur cette valeur ?
Le caractere @ est suprimé de $_GET['mail'],pas dans dans traitement suivant ie:
x...@coulommiers.org devient xdv5coulommiers.org.
j'en saurais plus ce weekend avec le test proposé de changer 'mail' par autre chose. et de faire la manip proposé a la fin.
> [....] Par exemple le dernier :
> preg_match('/^[.A-Za-z0-9+_-]+@[.A-Za-z0-9-]+$/', $_GET['mail'])
Ok
> [...]Le vilain pas beau n'a pas besoin de maîtriser $message >
C'est un métier ;) je pense qu'il vaut mieux limiter la longueur possible de la chaine ?
le concepteur initial si je decode bien ce que ça fait a permis 150 caractéres ....
> Il vaudrait mieux faire un « echo $_GET['mail']; » et voir le code
> source du HTML généré (ou mieux, l'envoyer comme text/plain par un
> header() en début de script).
Idée noté
Je reviens Dimanche avec le resultat de mes investigations
>> if (isset($_GET['mail'])&& preg_match("/^[\w\.-]+@[\w\.-]+\.[a-z]{2,3}$/i",
>> $_GET['mail'])
>> est ce suffisant ?
> Là, pour le coup, c'est trop restrictif : cela interdit par exemple
> mon adresse om+n...@miakinen.net qui est valide. Voir la FAQ du forum
> à<http://faqfclphp.free.fr/#rub5.3> pour de meilleurs tests.
Bonjour
Il y a maintenant des filtre adaptés depuis php 5.2
Toutefois, pour fonctionner aussi en réseau local, FILTER_VALIDATE_EMAIL autorise tout nom de domaine.
Il faut l'associer à checkdnsrr pour verifie l'existance du domaine.
Par ailleurs, une faille à été détectée et corrigée avec la v 5.2.9