Et donc pour la sécurisation du script de humantarget, l'important est qu' AB a bien fait d'intervenir, et donc je l'en remercie
En espérant que ce soit plus clair maintenant.function Verif_magicquotes ($chaine) { if (get_magic_quotes_gpc()) $chaine = stripslashes($chaine); return $chaine; } function Protege_header($value) { $value = str_replace("\n", "", str_replace("\r", "", $value)); return $value; } $nom = trim(Protege_header(Verif_magicquotes($_POST['nom']))); $email = trim(Protege_header(Verif_magicquotes($_POST['email']))); $sujet = trim(Verif_magicquotes($_POST['sujet'])); $message = trim(Verif_magicquotes($_POST['message']));
Je comprend ce que tu dis et j'en suis bien conscient. Heureusement qu'on n'empêche pas les gens de donner leur avis et de débattre sur un sujet
Pour le reste oui cela a dévié un peu , mais c'est un forum public, et cela n'était pas forcement inutile pour tout le monde, en tout cas pour moi personnellement.
La nécessité de cette protection est expliquée par exemple dans ce message d'infomaniak (un gros hébergeur)...
Tu ne dois pas utiliser htmlentities. Cela sert pour protéger l'affichage des données mais ici tu ne les affiche pas, tu les envoie dans un header. Il suffit juste de protéger les champs "nom" et "adresse mail" pour qu'on ne puisse pas se servir de ton formulaire comme boite à spam.
//... function Protege_header($value) { $value = str_replace("\n", "", str_replace("\r", "", $value)); return $value; } $nom=Protege_header($_POST['nom']); $email=Protege_header($_POST['email']); $sujet=$_POST['sujet']; $message=$_POST['message']; // etc.
Donc ma fonction Protege_header fait la même chose mais en plus de l'email elle protège également le champ "nom" qui peut également servir pour l'envoi de spam puisqu'il est envoyé dans le header. C.F. ton code initial :Quelques sites ont été victimes d'une attaque distribuée visant à envoyer un mailing en masse de spam via des sites client.
En effet, des spammeurs ont répertorié toutes les pages ayant un formulaire de contact envoyant un email. Plusieurs sites hébergé chez nous et dans le monde ont donc été exploité de la même façon.
Ils se sont servis d'une faille existante dans beaucoup de formulaires de contact qui ne vérifient pas la présence de retour de ligne dans certains champs, en particulier celui de l'e-mail de l'expéditeur à compléter dans les formulaires.
Vous pouvez éviter que cela se produise, soit en désactivant le script PHP de contact e-mail de votre site, soit en vous assurant qu'il n'y a pas de retour de ligne dans chacun des champs du formulaire de contact de votre site.
Voici comment éviter simplement que ceci soit exploitable en remplaçant les retours de ligne dans chacun des champs devant normalement contenir un email (ce champ est souvent nommé $email, $sender ou $from):
$EMAIL = str_replace("\n", "", str_replace("\r", "", $EMAIL));
Le spammer exploite les scripts ressemblant à ceci
$MESSAGE = $_POST[m s g];
$RECIPIENT = "[email protected]";
$SUBJECT = "Formulaire de contact";
$EMAIL = $_POST[e m a i l];
// Sans cette ligne votre script est exploitable !!!!
$EMAIL = str_replace("\n", "", str_replace("\r", "", $EMAIL));
mail($RECIPIENT, $SUBJECT, $MESSAGE, "From: $EMAIL" );
Merci de bien vouloir vérifier ceci dans vos scripts PHP.
$headers .= 'From: '.$nom.' <'. $email.' >' . "\r\n";
Le principe de cette protection est d'éviter à d'éventuels pirates d'envoyer des retours lignes dans ces champs. function Verif_magicquotes ($chaine)
{
if (get_magic_quotes_gpc()) $chaine = stripslashes($chaine);
return $chaine;
}
function Protege_header($value)
{
$value = str_replace("\n", "", str_replace("\r", "", $value));
return $value;
}
$nom = Protege_header(Verif_magicquotes($_POST['nom']));
$email = Protege_header(Verif_magicquotes($_POST['email']));
$sujet = Verif_magicquotes($_POST['sujet']);
$message = Verif_magicquotes($_POST['message']);
Et pour supprimer les espaces inutiles en début ou en fin de chaine, Dr@ke a proposé entre temps d'ajouter la fonction trim. Ce n'est pas en rapport direct avec tes problèmes rencontrés ni avec la sécurité du script mais une option pratique.function Verif_magicquotes ($chaine)
{
if (get_magic_quotes_gpc()) $chaine = stripslashes($chaine);
return $chaine;
}
function Protege_header($value)
{
$value = str_replace("\n", "", str_replace("\r", "", $value));
return $value;
}
$nom = trim(Protege_header(Verif_magicquotes($_POST['nom'])));
$email = trim(Protege_header(Verif_magicquotes($_POST['email'])));
$sujet = trim(Verif_magicquotes($_POST['sujet']));
$message = trim(Verif_magicquotes($_POST['message']));