TYBMHI Posté 29 Septembre 2008 Posté 29 Septembre 2008 Bonjour, J'ai un mec qui m'envoie des messages avec du html dedans à partir d'un formulaire de mon site et qui pourri mon site. Le html apparait sous sa forme bute. Comment éviter cela ? En php j'ai dejà mis ça pour le traitement du message: $message = nl2br(htmlspecialchars($_POST['message'])); J'aimerai en fait carrement interdire l'envoi de formulaire au complet si dans le message on trouve des liens ou des adresse internet. Est-ce possible ? Merci d'avance
KnockedMaster Posté 29 Septembre 2008 Posté 29 Septembre 2008 Hello, Pour empêcher qu'il y ait des liens dans tes messages, tu peux utiliser un truc du style : $string = 'la chaîne à tester'$badString = 'http://' // Le mauvais mot if (strpos($string, $badString) === FALSE) //La chaîne n'a pas été trouvée, c'est ok // Tu fais tes traitements et tu enregistres le messageelse echo 'Impossible d'enregsitrer votre message'; Bon travail
TYBMHI Posté 29 Septembre 2008 Auteur Posté 29 Septembre 2008 merci à tous les deux pour vos réponses, j'essaie pour l'instant la réponse de KnockedMaster mais je galère. Voilà mon code : $message = nl2br(htmlentities(htmlspecialchars($_POST['message']))); // De même pour le message $string = '$message';$badString = 'http://';// Le mauvais mot if((strpos($string, $badString) === FALSE){echo "<script language='Javascript'><!--alert('Votre message à bien été envoyé !');// --></SCRIPT>";} else{echo "<script language='Javascript'><!--alert('Pas d'adresse web, merci !');// --></SCRIPT>";} Pour l'instant ça ne veut même plus m'afficher la page.
TYBMHI Posté 29 Septembre 2008 Auteur Posté 29 Septembre 2008 Ok j'avais oublié une petite parenthése dans le if Cependant je fais des tests et malgré la présence de "http://" dans le textarea ($message) le formulaire est envoyé quand même.
KnockedMaster Posté 29 Septembre 2008 Posté 29 Septembre 2008 Ce n'est pas grave qu'il soit envoyé, c'est même normal, ce qu'il faut c'est ne pas l'enregistrer Déjà tu peux supprimer les quotes là, sinon la variable n'est pas interprétée : $string = '$message'; HS : les majuscules pour </script>, ce n'est pas obligatoire hein Fais voir ton code complet si ça ne va pas ... @+
TYBMHI Posté 29 Septembre 2008 Auteur Posté 29 Septembre 2008 Ca ne marche toujours pas, le formulaire est envoyé et enregistré. Alors comme demandé je t'envoi mon code au complet : $message est la variable d'un textarea Code qui traite le formulaire : <?phpif (isset($_POST['pseudo']) AND isset($_POST['datte'])){$datte = mysql_real_escape_string(htmlspecialchars($_POST['datte']));$categorie = mysql_real_escape_string(htmlspecialchars($_POST['categorie']))$souscategorie = mysql_real_escape_string(htmlspecialchars($_POST['souscategorie'])); $pseudo = mysql_real_escape_string(htmlspecialchars($_POST['pseudo'])); // On utilise mysql_real_escape_string et htmlspecialchars par mesure de sécurité$pseudodumec = mysql_real_escape_string(htmlspecialchars($_POST['pseudodumec']));$smiley = mysql_real_escape_string(htmlspecialchars($_POST['smiley']));$message = nl2br(htmlentities(htmlspecialchars($_POST['message']))); // De même pour le message$string = $message;$badString = 'http://';// Le mauvais mot if((strpos($string, $badString) === FALSE)){echo "<script language='Javascript'><!--alert('Votre message à bien été envoyé !');// --></script>";} else{echo "<script language='Javascript'><!--alert('Pas d'adresse web, merci !');// --></script>";} // On peut enregistrer mysql_query("INSERT INTO table VALUES('', '" . $datte . "', '" . $smiley . "', '" . $pseudo . "', '" . $pseudodumec . "', '". $categorie ."','" . $souscategorie . "','" . $message . "', '', '')");} ?>
KnockedMaster Posté 29 Septembre 2008 Posté 29 Septembre 2008 Bah, c'est normal, tu enregistres les données si if (isset($_POST['pseudo']) AND isset($_POST['datte'])) Or ça c'est toujours vrai si le formulaire est complété ! <?phpif (isset($_POST['pseudo']) AND isset($_POST['datte'])){ $datte = mysql_real_escape_string(htmlspecialchars($_POST['datte'])); $categorie = mysql_real_escape_string(htmlspecialchars($_POST['categorie'])); $souscategorie = mysql_real_escape_string(htmlspecialchars($_POST['souscategorie'])); $pseudo = mysql_real_escape_string(htmlspecialchars($_POST['pseudo'])); // On utilise mysql_real_escape_string et htmlspecialchars par mesure de sécurité $pseudodumec = mysql_real_escape_string(htmlspecialchars($_POST['pseudodumec'])); $smiley = mysql_real_escape_string(htmlspecialchars($_POST['smiley'])); $message = nl2br(htmlentities(htmlspecialchars($_POST['message']))); // De même pour le message $string = $message; $badString = 'http'; // Le mauvais mot if (strpos($string, $badString) === FALSE) { echo "<script language='Javascript'> <!-- alert('Votre message à bien été envoyé !'); // --> </script>"; // On peut enregistrer mysql_query("INSERT INTO table VALUES('', '" . $datte . "', '" . $smiley . "', '" . $pseudo . "', '" . $pseudodumec . "', '". $categorie ."','" . $souscategorie . "','" . $message . "', '', '')"); } else { echo "<script language='Javascript'> <!-- alert('Pas d'adresse web, merci !'); // --> </script>"; }} ?> Pas testé mais ça doit aller ...
TYBMHI Posté 29 Septembre 2008 Auteur Posté 29 Septembre 2008 Je te remercie beaucoup pour ton aide car je vois que tu te creuses la tête pour moi. Bon avec ce code je pense qu'on avance. Cependant lorsqu'il n'y a pas http dans le message ca envoie le message d'alerte : "votre message a bien été envoyé" mais il ne s'enregistre pas dans la bdd. En revanche quand il y a le mot http il n'y a pas d'enregistrement mais le message d'alerte n'apparait pas non plus.
TYBMHI Posté 29 Septembre 2008 Auteur Posté 29 Septembre 2008 Enfin j'ai modifié quelque petit truc et maintenant ça marche très bien. Je te remercie grandement car sans toi je n'y serais jamais arrivé. Encore merci !
KnockedMaster Posté 29 Septembre 2008 Posté 29 Septembre 2008 (modifié) Heu, je ne m'étais pas pris la tête jusque maintenant Le problème vient du javascript que tu utilises. Vire les commentaires conditionnels et ça ira. <?phpif (isset($_POST['pseudo']) AND isset($_POST['datte'])){ $datte = mysql_real_escape_string(htmlspecialchars($_POST['datte'])); $categorie = mysql_real_escape_string(htmlspecialchars($_POST['categorie'])); $souscategorie = mysql_real_escape_string(htmlspecialchars($_POST['souscategorie'])); $pseudo = mysql_real_escape_string(htmlspecialchars($_POST['pseudo'])); // On utilise mysql_real_escape_string et htmlspecialchars par mesure de sécurité $pseudodumec = mysql_real_escape_string(htmlspecialchars($_POST['pseudodumec'])); $smiley = mysql_real_escape_string(htmlspecialchars($_POST['smiley'])); $message = nl2br(htmlentities(htmlspecialchars($_POST['message']))); // De même pour le message */ $string = 'J\'en ai marre http'; $badString = 'http'; // Le mauvais mot if (strpos($string,$badString) === FALSE) { echo '<script type="text/javascript">'; echo 'alert(\'Votre message à bien été envoyé !\');'; echo '</script>'; // On peut enregistrer mysql_query("INSERT INTO table VALUES('', '" . $datte . "', '" . $smiley . "', '" . $pseudo . "', '" . $pseudodumec . "', '". $categorie ."','" . $souscategorie . "','" . $message . "', '', '')"); } else { echo '<script type="text/javascript">'; echo 'alert(\'Pas de lien web svp !\');'; echo '</script>'; }} ?> Sinon mon numéro de compte en banque c'est le xxx-xxxxxxxx-xx Edit : Ah ben tu m'as grillé en plus Bonne nuit et @+ Modifié 29 Septembre 2008 par KnockedMaster
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant