pprem
30/03/2007, 07h40
Hello Visualight, en effet la plupart des attaques par envoi de spams proviennent d'automates qui parcourrent le oueb à la recherche de formulaires fouareux... et nous sommes ici en présence de l'un d'eux !
Pour le "Internal server error", vérifie que tu n'as pas de .htaccess qui traîne dans ce dossier ou qui pourrait l'impacter en faisant par exemple de l'URL rewriting. Il suffit d'une erreur sur une ligne pour planter certains accès.
Pour le traitement du formulaire en lui-même, l'utilisation de $email directement dans le from du message permet d'en modifier les entêtes par appel direct du programme et par conséquent d'envoyer n'importe quoi à n'importe qui en masse... sans que tu ne le saches ni n'y puisse rien une fois balancés. J'ai déjà vu ça à plusieurs reprises sur différents sites et le déblacklistage suite à ce genre d'attaque est très complexe, long, chiant et quasiment infaisable avec AOL/Hotmail et d'autres.
En clair, ne jamais utiliser de données saisies dans le formulaire directement dans un champ permettant de modifier les headers d'un email.
Une solution contre ça est assez simple: filtrer l'email en utilisant la fonction suivante
de cette façon
Pour le "Internal server error", vérifie que tu n'as pas de .htaccess qui traîne dans ce dossier ou qui pourrait l'impacter en faisant par exemple de l'URL rewriting. Il suffit d'une erreur sur une ligne pour planter certains accès.
Pour le traitement du formulaire en lui-même, l'utilisation de $email directement dans le from du message permet d'en modifier les entêtes par appel direct du programme et par conséquent d'envoyer n'importe quoi à n'importe qui en masse... sans que tu ne le saches ni n'y puisse rien une fois balancés. J'ai déjà vu ça à plusieurs reprises sur différents sites et le déblacklistage suite à ce genre d'attaque est très complexe, long, chiant et quasiment infaisable avec AOL/Hotmail et d'autres.
En clair, ne jamais utiliser de données saisies dans le formulaire directement dans un champ permettant de modifier les headers d'un email.
Une solution contre ça est assez simple: filtrer l'email en utilisant la fonction suivante
Code PHP:
function verifie_email($email2) {
$email = strtolower($email2);
if (strlen($email) < 6) {
return $email2." : Email trop court";
}
if (strlen($email) > 255) {
return $email2." : Email trop long";
}
if (!ereg("@",$email)) {
return $email2." : Le email n'a pas d'arobase (@)";
}
if (preg_match_all("/([^a-zA-Z0-9_\@\.\-])/i", $email, $trouve)) {
return $email2." : caractère(s) interdit dans un email (".implode(", ",$trouve[0]).").";
}
if (!preg_match("/^([a-zA-Z0-9_]|\\-|\\.)+@(([a-zA-Z0-9_]|\\-)+\\.)+[a-zA-Z]{2,4}\$/i", $email)) {
return $email2." : n'est pas un email valide.";
}
list($compte,$domaine)=split("@",$email,2);
if ((function_exists (checkdnsrr)) && (!checkdnsrr($domaine,"MX"))) {
return $email2." : Ce domaine ($domaine) n'accepte pas les emails";
}
return $email2;
}
Code PHP:
if (verifie_email($email) != $email) {
// l'adresse de messagerie n'est pas valide, ne pas s'en servir
} else {
// l'adresse de messagerie est valide, on peut faire ce qu'on veut avec
}