Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème de sécurité dans parsage XML (SAX)

    9 août 2010 à 21:17:33

    Salut à tous,
    j'ai créé un parseur XML (avec <acronym title="Simple API for XML">SAX</acronym>) pour un langage semblable au zCode et je suis confronté à un problème de sécurité.

    Lorsque j'entre ceci dans le fichier XML :
    <![CDATA[
        <strong>Gras</strong>
    ]]>
    


    Le texte est en gras !

    tandis que seulement :
    <strong>Gras</strong>
    

    ne rend pas le texte en gras.

    Alors, je me suis dit que je pourrais enlevé les <![CDATA[ et ]]> avec une expression régulière.
    Donc, j'ai fait ceci :
    contenu = sub('<!\[CDATA\[', '', contenu)
    contenu = sub('\]\]>', '', contenu)
    


    Maintenant, le texte n'est plus en gras.

    Voici mon parseur :
    # -*- coding: utf-8 -*-
    from xml.sax.handler import ContentHandler
    import re
    
    class ZCode(ContentHandler):
        def __init__(self):
            self.balisesOuvrantes = {
                'gras': '<strong>',
                'italique': '<span class="italique">',
                'souligne': '<span class="souligne">',
                'barre': '<span class="barre">',
                'couleur': '<span class="$1">',
                'liste': '<ul>',
                'puce': '<li>',
            }
            
            self.balisesFermantes = {
                'gras': '</strong>',
                'italique': '</span>',
                'souligne': '</span>',
                'barre': '</span>',
                'couleur': '</span>',
                'liste': '</ul>',
                'puce': '</li>',
            }
            
            self.attributs = {
                'liste': 'type',
                'couleur': 'nom',
            }
            
            self.balisesSpeciales = (
                'liste',
            )
            
            self.balisesSpecialesEnfants = (
                'puce',
            )
            
            self.texteFormatte = ''
        
        def startElement(self, nom, attributs):
            if nom in self.balisesOuvrantes:
                baliseOuvrante = self.balisesOuvrantes[nom]
                
                if attributs.getLength(): #S'il y a des attributs.
                    baliseOuvrante = sub('\$1', attributs.get(self.attributs[nom]), baliseOuvrante)
                    
                self.texteFormatte += baliseOuvrante
        
        def endElement(self, nom):
            if nom in self.balisesFermantes:
                self.texteFormatte += self.balisesFermantes[nom]
        
        def characters(self, caracteres):
            self.texteFormatte += caracteres
        
        def formatte(self):
            self.texteFormatte = re.sub('\n(.*?)<ul>', '<ul>', self.texteFormatte, re.DOTALL)
            self.texteFormatte = re.sub('<ul>(.*?)\n', '<ul>', self.texteFormatte, re.DOTALL)
            self.texteFormatte = re.sub('\n(.*?)</ul>', '</ul>', self.texteFormatte, re.DOTALL)
            self.texteFormatte = re.sub('</ul>(.*?)\n', '</ul>', self.texteFormatte, re.DOTALL)
            
            self.texteFormatte = re.sub('\n(.*?)<li>', '<li>', self.texteFormatte, re.DOTALL)
            self.texteFormatte = re.sub('</li>(.*?)\n', '</li>', self.texteFormatte, re.DOTALL)
               
        def getTexte(self):
            self.formatte()
            return self.texteFormatte
    

    Cependant, je me demande si c'est sécuritaire.

    (La suppression de <![CDATA[ et ]]> se fait avant d'utiliser le parseur.)

    Merci d'avance pour votre aide.
    • Partager sur Facebook
    • Partager sur Twitter
      18 août 2010 à 2:49:41

      Salut !
      je me demande simplement si la suppression de <![CDATA[ et ]]> rend le code totalement sécuritaire.

      Savez-vous la réponse ?

      Merci d’avance pour votre aide.
      • Partager sur Facebook
      • Partager sur Twitter
        18 août 2010 à 14:57:38

        Bah, si c'est juste pour savoir si un mot est en gras ou pas, m'est avis que ça va pas changer grand chose question sécurité...
        • Partager sur Facebook
        • Partager sur Twitter

        Blond, bouclé, toujours le sourire aux lèvres...

        Problème de sécurité dans parsage XML (SAX)

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown