Se protéger injections JAVASCRIPT
Résolu
darkchristophetd
Messages postés
1100
Date d'inscription
Statut
Contributeur
Dernière intervention
-
darkchristophetd Messages postés 1100 Date d'inscription Statut Contributeur Dernière intervention -
darkchristophetd Messages postés 1100 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour.
Depuis peu, une personne met des notes négatives et injecte des redirections JS sur mon script de commentaires :
Comment le sécuriser ?
merci
Depuis peu, une personne met des notes négatives et injecte des redirections JS sur mon script de commentaires :
<?php $moyenne1 = mysql_query("SELECT AVG(note) AS moyenne FROM commentaires") or die (mysql_error()); $moyenne = mysql_fetch_array($moyenne1); $noteMoyenne = round($moyenne['moyenne'], 2); echo 'Note moyenne : <b>'.$noteMoyenne.'</b><br /><br />'; //DEBUT DU CODE PHP POUR LES COMMENTAIRES $page = $_SERVER['SCRIPT_NAME']; include("../mysql_connect.php");//CHEMIN A MODIFIER SELON LA PAGE if($_POST['pseudo'] != "" AND $_POST['note'] != "" AND $_POST['commentaire'] != "" AND $_POST['email'] !="" AND preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#", $_POST['email']) AND $code == $_SESSION['total']) { $date = date('d/m/Y\- H\:i'); $pseudo = mysql_real_escape_string(htmlspecialchars($_POST['pseudo'])); $note = $_POST['note'] ; $email = mysql_real_escape_string(htmlspecialchars($_POST['email'])); $commentaire = mysql_real_escape_string($_POST['commentaire']); $commentaire = preg_replace('#(.+)#i', '<b>$1</b>', $commentaire); $commentaire = preg_replace('#(.+)#i', '<u>$1</u>', $commentaire); $commentaire = preg_replace('#(.+)#i', '<i>$1</i>', $commentaire); $commentaire = preg_replace('#<barre>(.+)</barre>#i', '<strike>$1</strike>', $commentaire); $commentaire = preg_replace('#<centre>(.+)</centre>#i', '<center>$1</center>', $commentaire); $commentaire = preg_replace('#;\)#', '<img src="images/clin-oeil.gif" alt="smiley" />', $commentaire); $commentaire = preg_replace('#:D#', '<img src="images/grand-sourire.gif" alt="smiley" />', $commentaire); $commentaire = preg_replace('#:!:#', '<img src="images/exclamation.gif" alt="smiley" />', $commentaire); $commentaire = preg_replace('#=>#', '<img src="images/fleche.gif" alt="smiley" />', $commentaire); $commentaire = preg_replace('#:énervé:#', '<img src="images/enerver.gif" alt="smiley" />', $commentaire); $commentaire = preg_replace('#:étonné:#', '<img src="iimages/etoner.gif" alt="smiley" />', $commentaire); $commentaire = preg_replace('#:diable:#', '<img src="images/diable.gif" alt="smiley" />', $commentaire); $commentaire = preg_replace('#:cool:#', '<img src="images/cool.gif" alt="smiley" />', $commentaire); mysql_query("INSERT INTO commentaires VALUES('', '$date', '$email', '$page', '$pseudo', '$note', '$commentaire')") or die(mysql_error()); echo'<p>Votre commentaire a bien été ajouté.<br /><br /><br /><br /><br /></p>'; } $reponse = mysql_query("SELECT * FROM commentaires WHERE page='$page' ORDER BY id DESC") or die(mysql_error()); while($donnees = mysql_fetch_array($reponse)) { /* LE CODE HTML EST A MODIFIER CI DESSOUS (pour le présentation des coms) */ ?><br /> <hr /><br /> <b><?php echo $donnees['pseudo']?></b> le <?php echo $donnees['date'] ?>. <b><?php echo $donnees['note'] ?></b> /20 <br /> <br /><?php echo stripslashes($donnees['commentaire']) ?><br /> <?php } ?> <br /><br /> <br /><p>Pour ajouter un commentaire, merci de remplir <b>tous</b> les champs.<br/><br/> <form name="commentaires" action="<?php echo $page ?>#commentaires" method="POST"> </div> <label for="pseudo">Pseudo </label>: <input type="text" id="pseudo" name="pseudo" value="<?php echo $_POST['pseudo'] ?>" /><br/><br/> <label for="email">E-mail(Votre e-mail n'est pas diffusé) </label>: <input type="text" id="email" name="email" value="<?php echo $_POST['email'] ?>" /><br/><br/> Note : <select name="note"> <option value="00">00</option> <option value="01">01</option> <option value="02">02</option> <option value="03">03</option> <option value="04">04</option> <option value="05">05</option> <option value="06">06</option> <option value="07">07</option> <option value="08">08</option> <option value="09">09</option> <option value="10">10</option> <option value="11">11</option> <option value="12">12</option> <option value="13">13</option> <option value="14">14</option> <option value="15">15</option> <option value="16">16</option> <option value="17">17</option> <option value="18">18</option> <option value="19">19</option> <option value="20">20</option> </select> / 20<br /><br /> <label for="message">Commentaire </label>: <br /> <div> <p> <span> <input type="button" value="Gras" onclick="insertTag('', '', 'commentaire')" /> <input type="button" value="Souligner" onclick="insertTag('', '', 'commentaire')" /> <input type="button" value="Barrer" onclick="insertTag('<barre>', '</barre>', 'commentaire')" /> <input type="button" value="Italique" onclick="insertTag('', '', 'commentaire')" /> <input type="button" value="Centrer" onclick="insertTag('<centre>', '</centre>', 'commentaire')" /> </br/><br/><br/>   <img src="images/clin-oeil.gif" onclick="insertTag(';)', '', 'commentaire')" /> <img src="images/grand-sourire.gif" onclick="insertTag(':D', '', 'commentaire')" /> <img src="images/exclamation.gif" onclick="insertTag(':!:', '', 'commentaire')"/> <img src="images/fleche.gif" onclick="insertTag('=>', '', 'commentaire')"/> <img src="images/enerver.gif" onclick="insertTag(':énervé:', '', 'commentaire')"/> <img src="images/etoner.gif" onclick="insertTag(':étonné:', '', 'commentaire')"/> <img src="images/diable.gif" onclick="insertTag(':diable:', '', 'commentaire')"/> <img src="images/cool.gif" onclick="insertTag(':cool:', '', 'commentaire')"/> </span> </p> </div> <span> <textarea style="margin-left: 7px; font-size: 1em;" rows="12" cols="50" id="commentaire" name="commentaire"> <?php echo $_POST['commentaire'] ?> </textarea> <br /><br /> <u><b>Anti-spam :</b></u><br/><br/> Entrez ci-dessous le résultat de cette opération mathématique : <?php echo $un ?> + <?php echo $deux ?> <input type="text" name="code" style="margin-left: 7px;" value="<?php echo $_POST['code']?>"/><br /><br /> <?php if(isset($_POST['code']) AND $_POST['code'] != $_SESSION['un'] + $_SESSION['deux']){ echo'<span style="color: Red;">Erreur</span>';} ?> <center><input type="submit" value="Envoyer le commentaire" /></center> <?php //FIN DU CODE PHP ?>
Comment le sécuriser ?
merci
A voir également:
- Se protéger injections JAVASCRIPT
- Proteger cellule excel - Guide
- Protéger un dossier par mot de passe - Guide
- Telecharger javascript - Télécharger - Langages
- Protéger un pdf par mot de passe - Guide
- Nous restreignons certaines activités afin de protéger notre communauté - Forum Instagram
4 réponses
Oui oui mais la validation graphique (ta liste de sélection) ne protège pas des envois réalisés sans passer par cette interface.
En fait je t'explique : Le gars, pour envoyer un formulaire invalide, il va enregistrer la page du formulaire sur son disque et modifier celui-ci (il va rajouter manuellement les options négatives). A partir de là, ta validation graphique est totalement rompue et inexistante. A savoir qu'on n'a même pas besoin de passer par les étapes que j'ai décrites pour envoyer un formulaire par POST ; tu peux directement interroger la page PHP en pré-remplissant les valeurs sans passer par aucune interface graphique.
Donc, je le répète, il est indispensable que la validation du formulaire se passe au niveau de la page PHP if($note < 0 || $note > 20) ne valide pas le formulaire, c'est une tentative d'injection manuelle. Ainsi tu dois faire pour tous tes champs, tu ne pourras jamais (au grand jamais) te fier aux limitations de l'interface graphique.
En fait je t'explique : Le gars, pour envoyer un formulaire invalide, il va enregistrer la page du formulaire sur son disque et modifier celui-ci (il va rajouter manuellement les options négatives). A partir de là, ta validation graphique est totalement rompue et inexistante. A savoir qu'on n'a même pas besoin de passer par les étapes que j'ai décrites pour envoyer un formulaire par POST ; tu peux directement interroger la page PHP en pré-remplissant les valeurs sans passer par aucune interface graphique.
Donc, je le répète, il est indispensable que la validation du formulaire se passe au niveau de la page PHP if($note < 0 || $note > 20) ne valide pas le formulaire, c'est une tentative d'injection manuelle. Ainsi tu dois faire pour tous tes champs, tu ne pourras jamais (au grand jamais) te fier aux limitations de l'interface graphique.
Bonjour,
Pour empêcher d'encoder une note négative tu peux déjà tester dans ton code PHP que la note envoyée par POST soit dans l'intervalle des notes possibles et pas seulement te limiter au fait que le champ ait été rempli. Ce sera une bonne chose de faite qu'il ne pourra plus contourner. Pour le reste je ne sais pas.
Pour empêcher d'encoder une note négative tu peux déjà tester dans ton code PHP que la note envoyée par POST soit dans l'intervalle des notes possibles et pas seulement te limiter au fait que le champ ait été rempli. Ce sera une bonne chose de faite qu'il ne pourra plus contourner. Pour le reste je ne sais pas.