Mercurial > defr > DualBlog
changeset 71:464f4b94ee27
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 <html:script
/> ou l'utilisateur utilise un namespace non standard pour déjouer une
comparaison de chaînes.
author | Franck Deroche <webmaster@defr.org> |
---|---|
date | Thu, 20 Mar 2008 19:45:08 +0100 |
parents | e08186e4ed77 |
children | 217f56e6bc77 |
files | comment.php |
diffstat | 1 files changed, 19 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- 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>' . $Comment . '</comment>')) { + $doc = @DOMDocument::loadXML('<comment>' . stripslashes($Comment) . '</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