securité sur code php - PHP - Programmation
Marsh Posté le 26-01-2009 à 11:25:02
Tu peux éditer ton post et mettre ton code entre balises ?
[ code=php]
[/code]
Comme ça on y voit mieux
Marsh Posté le 26-01-2009 à 14:17:58
ok chef
[ code=php]<?php
$destinataire = 'xxxxx@xxxxx.fr';
// copie ? (envoie une copie au visiteur)
$copie = 'oui'; // 'oui' ou 'non'
$message_envoye = "Votre message nous est bien parvenu !";
$message_non_envoye = "L'envoi du mail a échoué, veuillez réessayer SVP.";
$message_erreur_formulaire = "Vous devez d'abord <a href=\"form.html\">envoyer le formulaire</a>.";
$message_formulaire_invalide = "Vérifiez que tous les champs soient bien remplis et que l'email soit sans erreur.";
if (!isset($_POST['envoi']))
{
echo '<p>'.$message_erreur_formulaire.'</p>'."\n";
}
else
{
function Rec($text)
{
$text = trim($text); // delete white spaces after & before text
if (1 === get_magic_quotes_gpc())
{
$stripslashes = create_function('$txt', 'return stripslashes($txt);');
}
else
{
$stripslashes = create_function('$txt', 'return $txt;');
}
// magic quotes ?
$text = $stripslashes($text);
$text = htmlspecialchars($text, ENT_QUOTES); // converts to string with " and ' as well
$text = nl2br($text);
return $text;
};
function IsEmail($email)
{
$pattern = "^([a-z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,7}$";
return (eregi($pattern,$email)) ? true : false;
};
$nom = (isset($_POST['nom'])) ? Rec($_POST['nom']) : '';
$prenom = (isset($_POST['prenom'])) ? Rec($_POST['prenom']) : '';
$tel = (isset($_POST['tel'])) ? Rec($_POST['tel']) : '';
$email = (isset($_POST['email'])) ? Rec($_POST['email']) : '';
$evenement = (isset($_POST['evenement'])) ? Rec($_POST['evenement']) : '';
$date = (isset($_POST['date'])) ? Rec($_POST['date']) : '';
$budget = (isset($_POST['budget'])) ? Rec($_POST['budget']) : '';
$adresse = (isset($_POST['adresse'])) ? Rec($_POST['adresse']) : '';
$personnes = (isset($_POST['personnes'])) ? Rec($_POST['personnes']) : '';
$infos = (isset($_POST['infos'])) ? Rec($_POST['infos']) : '';
$message = "$budget\n\n$adresse\n\n$personnes\n\n$tel\n\n$date\n\n$infos";
$message = nl2br ($message);
$adresse = nl2br($adresse);
$infos = nl2br($infos);
$email = (IsEmail($email)) ? $email : ''; // soit l'email est vide si erroné, soit il vaut l'email entré
if (($nom != '') && ($prenom != '') && ($email != '') && ($evenement != '') && ($date != '') && ($budget != '') && ($adresse != '') && ($personnes != '') )
{
$headers = 'From: '.$prenom.' '.$nom.' <'.$email.'>' . "\r\n";
if ($copie == 'oui')
{
$cible = $destinataire.','.$email;
}
else
{
$cible = $destinataire;
};
$message = str_replace("'","'",$message);
$message = str_replace("’","'",$message);
$message = str_replace(""",'"',$message);
$message = str_replace('<br>','',$message);
$message = str_replace('<br />','',$message);
$message = str_replace("<","<",$message);
$message = str_replace(">",">",$message);
$message = str_replace("&","&",$message);
$evenement = str_replace("'","'",$evenement);
if (mail($cible, $evenement, $message, $headers))
{
echo '<p>'.$message_envoye.'</p>'."\n";
}
else
{
echo '<p>'.$message_non_envoye.'</p>'."\n";
};
}
else
{
echo '<p>'.$message_formulaire_invalide.' <a href="form.html">Retour au formulaire</a></p>'."\n";
};
}; // fin du if (!isset($_POST['envoi']))
?>[/code]
je sais pas si c'est ca qu'il fallait daire mais bon
Marsh Posté le 26-01-2009 à 14:23:36
Enlève l'espace entre "[" et "code" dans le tag s'il te plait (dans mon autre post je l'ai volontairement ajouté parce que sinon la commande est interprétée )
Marsh Posté le 26-01-2009 à 18:27:07
ReplyMarsh Posté le 27-01-2009 à 23:40:44
reok chef
[ code=php]<?php
$destinataire = 'xxxxx@xxxxx.fr';
// copie ? (envoie une copie au visiteur)
$copie = 'oui'; // 'oui' ou 'non'
$message_envoye = "Votre message nous est bien parvenu !";
$message_non_envoye = "L'envoi du mail a échoué, veuillez réessayer SVP.";
$message_erreur_formulaire = "Vous devez d'abord <a href=\"form.html\">envoyer le formulaire</a>.";
$message_formulaire_invalide = "Vérifiez que tous les champs soient bien remplis et que l'email soit sans erreur.";
if (!isset($_POST['envoi']))
{
echo '<p>'.$message_erreur_formulaire.'</p>'."\n";
}
else
{
function Rec($text)
{
$text = trim($text); // delete white spaces after & before text
if (1 === get_magic_quotes_gpc())
{
$stripslashes = create_function('$txt', 'return stripslashes($txt);');
}
else
{
$stripslashes = create_function('$txt', 'return $txt;');
}
// magic quotes ?
$text = $stripslashes($text);
$text = htmlspecialchars($text, ENT_QUOTES); // converts to string with " and ' as well
$text = nl2br($text);
return $text;
};
function IsEmail($email)
{
$pattern = "^([a-z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,7}$";
return (eregi($pattern,$email)) ? true : false;
};
$nom = (isset($_POST['nom'])) ? Rec($_POST['nom']) : '';
$prenom = (isset($_POST['prenom'])) ? Rec($_POST['prenom']) : '';
$tel = (isset($_POST['tel'])) ? Rec($_POST['tel']) : '';
$email = (isset($_POST['email'])) ? Rec($_POST['email']) : '';
$evenement = (isset($_POST['evenement'])) ? Rec($_POST['evenement']) : '';
$date = (isset($_POST['date'])) ? Rec($_POST['date']) : '';
$budget = (isset($_POST['budget'])) ? Rec($_POST['budget']) : '';
$adresse = (isset($_POST['adresse'])) ? Rec($_POST['adresse']) : '';
$personnes = (isset($_POST['personnes'])) ? Rec($_POST['personnes']) : '';
$infos = (isset($_POST['infos'])) ? Rec($_POST['infos']) : '';
$message = "$budget\n\n$adresse\n\n$personnes\n\n$tel\n\n$date\n\n$infos";
$message = nl2br ($message);
$adresse = nl2br($adresse);
$infos = nl2br($infos);
$email = (IsEmail($email)) ? $email : ''; // soit l'email est vide si erroné, soit il vaut l'email entré
if (($nom != '') && ($prenom != '') && ($email != '') && ($evenement != '') && ($date != '') && ($budget != '') && ($adresse != '') && ($personnes != '') )
{
$headers = 'From: '.$prenom.' '.$nom.' <'.$email.'>' . "\r\n";
if ($copie == 'oui')
{
$cible = $destinataire.','.$email;
}
else
{
$cible = $destinataire;
};
$message = str_replace("'","'",$message);
$message = str_replace("’","'",$message);
$message = str_replace(""",'"',$message);
$message = str_replace('<br>','',$message);
$message = str_replace('<br />','',$message);
$message = str_replace("<","<",$message);
$message = str_replace(">",">",$message);
$message = str_replace("&","&",$message);
$evenement = str_replace("'","'",$evenement);
if (mail($cible, $evenement, $message, $headers))
{
echo '<p>'.$message_envoye.'</p>'."\n";
}
else
{
echo '<p>'.$message_non_envoye.'</p>'."\n";
};
}
else
{
echo '<p>'.$message_formulaire_invalide.' <a href="form.html">Retour au formulaire</a></p>'."\n";
};
}; // fin du if (!isset($_POST['envoi']))
?>[code]
je resais pas si c'est ca qu'il fallait daire mais bon
luc@s y'a un bleme avec mon stripslahes? parce qu'apparement ce que tu as ecris c'est âreil que moi non?
bon merci quand meme
Marsh Posté le 28-01-2009 à 01:25:56
Y'a des trucs un peu vilains (en fait réellement dégueulasses) et inutiles .
Première règle à suivre pour bien développer : on ne déclare pas de fonction en plein milieu dans la fonction principale XD!
ps : je n'ai pas cherché à vérifier si ça fonctionne, il doit sans doute manquer des trucs.
Code :
|
Marsh Posté le 29-01-2009 à 12:53:23
bon be ok boss pour les declarations de fonctions faudra donc que j'evite de les mettre en plein milieu
pour quand tu dis evites de faire travailler le serveur php j'ai été obligé de mettre les \n\n parce que c'était le foutoir quand ca arrivait dans ma boite mail ..(tout a la suite)
pour le formattage en html je sais : pas tu m'as aiguillé avec $html_header = '<html><body>'; $html_footer = '</body></html>';
mais ca s'arrette la j'ai pas trouvé sur le net un tuto clair la dessus les tutos en general c'est voila c'est comme ca ils mettent tout en vrac mais detaillent rien (comme par ex dans le site du zero qui n'a malheureusement pas abordé la fonction mail)
en tous cas je te rassure ca marche très bien mais je voulais savoir simplement si c'etait sécurisé si y'avait pas de danger de hack mais vu que y'a pas acces a ma base de données que c'est direct du formualire a ma boite mail je pense pas mais je pose la question quand meme .
voila
merci pour tes corrections ..
Marsh Posté le 26-01-2009 à 11:24:10
jour
voila j'aurais voulu savoir si mon code était securisé j'ai mis des htmlspecialchars mais je sais pas si ca suffit :
<?php
$destinataire = 'xxxxx@xxxxx.fr';
// copie ? (envoie une copie au visiteur)
$copie = 'oui'; // 'oui' ou 'non'
$message_envoye = "Votre message nous est bien parvenu !";
$message_non_envoye = "L'envoi du mail a échoué, veuillez réessayer SVP.";
$message_erreur_formulaire = "Vous devez d'abord <a href=\"form.html\">envoyer le formulaire</a>.";
$message_formulaire_invalide = "Vérifiez que tous les champs soient bien remplis et que l'email soit sans erreur.";
if (!isset($_POST['envoi']))
{
echo '<p>'.$message_erreur_formulaire.'</p>'."\n";
}
else
{
function Rec($text)
{
$text = trim($text); // delete white spaces after & before text
if (1 === get_magic_quotes_gpc())
{
$stripslashes = create_function('$txt', 'return stripslashes($txt);');
}
else
{
$stripslashes = create_function('$txt', 'return $txt;');
}
// magic quotes ?
$text = $stripslashes($text);
$text = htmlspecialchars($text, ENT_QUOTES); // converts to string with " and ' as well
$text = nl2br($text);
return $text;
};
function IsEmail($email)
{
$pattern = "^([a-z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,7}$";
return (eregi($pattern,$email)) ? true : false;
};
$nom = (isset($_POST['nom'])) ? Rec($_POST['nom']) : '';
$prenom = (isset($_POST['prenom'])) ? Rec($_POST['prenom']) : '';
$tel = (isset($_POST['tel'])) ? Rec($_POST['tel']) : '';
$email = (isset($_POST['email'])) ? Rec($_POST['email']) : '';
$evenement = (isset($_POST['evenement'])) ? Rec($_POST['evenement']) : '';
$date = (isset($_POST['date'])) ? Rec($_POST['date']) : '';
$budget = (isset($_POST['budget'])) ? Rec($_POST['budget']) : '';
$adresse = (isset($_POST['adresse'])) ? Rec($_POST['adresse']) : '';
$personnes = (isset($_POST['personnes'])) ? Rec($_POST['personnes']) : '';
$infos = (isset($_POST['infos'])) ? Rec($_POST['infos']) : '';
$message = "$budget\n\n$adresse\n\n$personnes\n\n$tel\n\n$date\n\n$infos";
$message = nl2br ($message);
$adresse = nl2br($adresse);
$infos = nl2br($infos);
$email = (IsEmail($email)) ? $email : ''; // soit l'email est vide si erroné, soit il vaut l'email entré
if (($nom != '') && ($prenom != '') && ($email != '') && ($evenement != '') && ($date != '') && ($budget != '') && ($adresse != '') && ($personnes != '') )
{
$headers = 'From: '.$prenom.' '.$nom.' <'.$email.'>' . "\r\n";
if ($copie == 'oui')
{
$cible = $destinataire.','.$email;
}
else
{
$cible = $destinataire;
};
$message = str_replace("'","'",$message);
$message = str_replace("’","'",$message);
$message = str_replace(""",'"',$message);
$message = str_replace('<br>','',$message);
$message = str_replace('<br />','',$message);
$message = str_replace("<","<",$message);
$message = str_replace(">",">",$message);
$message = str_replace("&","&",$message);
$evenement = str_replace("'","'",$evenement);
if (mail($cible, $evenement, $message, $headers))
{
echo '<p>'.$message_envoye.'</p>'."\n";
}
else
{
echo '<p>'.$message_non_envoye.'</p>'."\n";
};
}
else
{
echo '<p>'.$message_formulaire_invalide.' <a href="form.html">Retour au formulaire</a></p>'."\n";
};
}; // fin du if (!isset($_POST['envoi']))
?>
merci