Mercurial > defr > DualBlog
comparison comment.php @ 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 | d4f26e9767bf |
children | 217f56e6bc77 |
comparison
equal
deleted
inserted
replaced
70:e08186e4ed77 | 71:464f4b94ee27 |
---|---|
37 | 37 |
38 // Suppression d'un gros lourd | 38 // Suppression d'un gros lourd |
39 $visibleBool &= (ereg('^ma[0-9]+zda$', $Auteur) === false); | 39 $visibleBool &= (ereg('^ma[0-9]+zda$', $Auteur) === false); |
40 $visible = $visibleBool ? 1 : 0; | 40 $visible = $visibleBool ? 1 : 0; |
41 | 41 |
42 if(DOMDocument::loadXML('<comment>' . $Comment . '</comment>')) { | 42 $doc = @DOMDocument::loadXML('<comment>' . stripslashes($Comment) . '</comment>'); |
43 // Si le post est conforme XML, on recherche des balises indésirables | |
44 if($doc) | |
45 { | |
46 $bannedTags = array('script', 'object', 'iframe'); | |
47 foreach($bannedTags as $tagName) | |
48 { | |
49 $nl = $doc->getElementsByTagName($tagName); | |
50 if($nl->length > 0) | |
51 { | |
52 $Comment = htmlspecialchars($Comment); | |
53 break; | |
54 } | |
55 } | |
56 } | |
57 // Sinon le post n'est pas conforme XML, on supprime toute balise | |
58 else | |
59 $Comment = htmlspecialchars($Comment); | |
60 | |
43 $Data->debugQuery(" | 61 $Data->debugQuery(" |
44 INSERT INTO Commentaires(MessId, Auteur, Adresse, AdresseMail, Comment, DateComment, ip, Visible) | 62 INSERT INTO Commentaires(MessId, Auteur, Adresse, AdresseMail, Comment, DateComment, ip, Visible) |
45 VALUES({$id}, '{$Auteur}', '{$Adresse}', '{$AdresseMail}', '{$Comment}', '{$DateComment}', '{$ip}', $visible) | 63 VALUES({$id}, '{$Auteur}', '{$Adresse}', '{$AdresseMail}', '{$Comment}', '{$DateComment}', '{$ip}', $visible) |
46 "); | 64 "); |
47 $Data->Query("UPDATE Mess SET NbCommentaires=NbCommentaires+1 WHERE num_mess={$id}"); | 65 $Data->Query("UPDATE Mess SET NbCommentaires=NbCommentaires+1 WHERE num_mess={$id}"); |
48 if($visibleBool) | 66 if($visibleBool) |
49 mail(ADMIN_MAIL, 'Nouveau commentaire de ' . $Auteur, $Auteur . " vient de mettre en ligne le commentaire suivant: \n" . wordwrap($Comment, 70)); | 67 mail(ADMIN_MAIL, 'Nouveau commentaire de ' . $Auteur, $Auteur . " vient de mettre en ligne le commentaire suivant: \n" . wordwrap($Comment, 70)); |
50 } | |
51 else { | |
52 $infos = 'Votre commentaire doit etre fait de XML valide pour apparaitre.'; | |
53 } | |
54 } | 68 } |
55 | 69 |
56 // Ajout du post au squelette | 70 // Ajout du post au squelette |
57 $Data->Query("SELECT * FROM Mess WHERE num_mess = {$id}"); | 71 $Data->Query("SELECT * FROM Mess WHERE num_mess = {$id}"); |
58 $row = $Data->GetRow(); | 72 $row = $Data->GetRow(); |