# HG changeset patch # User Franck Deroche # Date 1206038708 -3600 # Node ID 464f4b94ee27de8800959abeb584d3031b3de6c9 # Parent e08186e4ed772772416a384f5156280053110f0b Filtrage de certaines balises HTML, meilleure détection de la validité XML. Plusieurs choses en une, toute tournant autour d'un meilleur traitement du commentaire soumis: - on utilise désormais stripslashes pour correctement gérer la valeur d'éventuels arguments - on filtre, via le DOM, les balises qui pourraient s'avérer peut sure, ou être utilisé pour une attaque de type cross-site scripting. L'utilisation de getElementsByTagName devrait se charger d'attaque du type ou l'utilisateur utilise un namespace non standard pour déjouer une comparaison de chaînes. diff -r e08186e4ed77 -r 464f4b94ee27 comment.php --- a/comment.php Wed Mar 19 12:08:15 2008 +0100 +++ b/comment.php Thu Mar 20 19:45:08 2008 +0100 @@ -39,7 +39,25 @@ $visibleBool &= (ereg('^ma[0-9]+zda$', $Auteur) === false); $visible = $visibleBool ? 1 : 0; - if(DOMDocument::loadXML('' . $Comment . '')) { + $doc = @DOMDocument::loadXML('' . stripslashes($Comment) . ''); + // Si le post est conforme XML, on recherche des balises indésirables + if($doc) + { + $bannedTags = array('script', 'object', 'iframe'); + foreach($bannedTags as $tagName) + { + $nl = $doc->getElementsByTagName($tagName); + if($nl->length > 0) + { + $Comment = htmlspecialchars($Comment); + break; + } + } + } + // Sinon le post n'est pas conforme XML, on supprime toute balise + else + $Comment = htmlspecialchars($Comment); + $Data->debugQuery(" INSERT INTO Commentaires(MessId, Auteur, Adresse, AdresseMail, Comment, DateComment, ip, Visible) VALUES({$id}, '{$Auteur}', '{$Adresse}', '{$AdresseMail}', '{$Comment}', '{$DateComment}', '{$ip}', $visible) @@ -47,10 +65,6 @@ $Data->Query("UPDATE Mess SET NbCommentaires=NbCommentaires+1 WHERE num_mess={$id}"); if($visibleBool) mail(ADMIN_MAIL, 'Nouveau commentaire de ' . $Auteur, $Auteur . " vient de mettre en ligne le commentaire suivant: \n" . wordwrap($Comment, 70)); - } - else { - $infos = 'Votre commentaire doit etre fait de XML valide pour apparaitre.'; - } } // Ajout du post au squelette