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();