1. #1
    Membre habitué Avatar de domiq44
    Homme Profil pro
    Inscrit en
    novembre 2005
    Messages
    298
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : novembre 2005
    Messages : 298
    Points : 134
    Points
    134

    Par défaut Comment activer les caractéristiques de sécurité du processeur XSL ?

    Bonjour,

    Je suis sur un problème de sécurité.

    Je voudrais interdire à quiconque, de faire des intrusions dans le système en modifiant les feuilles XSLT.
    Or ces dernières, sont délivrer par les clients, donc faire en sorte que seuls du XSLT « standard » soit autorisé.
    Je fais des tests d'intrusion.

    Voici un exemple de XML :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?xml version="1.0" encoding="UTF-8"?>
    <pipo>
      <toto>dudu</toto>
    </pipo>
    Le XSL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsl:stylesheet version="1.0"
      xmlns:runtime="http://xml.apache.org/xalan/java/java.lang.Runtime"
      xmlns:process="http://xml.apache.org/xalan/java/java.lang.Process"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     
      <xsl:output method="xml" encoding="UTF-8" indent="yes"/>
     
      <xsl:variable name="xslVendor" select="system-property('xsl:vendor')" />
      <xsl:variable name="xslVendorUrl" select="system-property('xsl:vendor-url')" />
      <xsl:variable name="xslVersion" select="system-property('xsl:version')" />
     
      <xsl:template match="/">
        <xsl:apply-templates select="pipo" />
      </xsl:template>
     
      <xsl:template match="pipo">
        <bidon>
          <xsl:variable name="rtobject" select="runtime:getRuntime()" />
          <xsl:variable name="process" select="runtime:exec($rtobject, 'ping 999.999.999.999')" />
          <xsl:variable name="waiting" select="process:waitFor($process)" />
          <xsl:value-of select="$process" />
          <infos>
            <process><xsl:value-of select="$process" /></process>
            <vendor><xsl:value-of select="$xslVendor" /></vendor>
            <url><xsl:value-of select="$xslVendorUrl" /></url>
            <version><xsl:value-of select="$xslVersion" /></version>
          </infos>
        </bidon>
      </xsl:template>
     
    </xsl:stylesheet>
    où l'adresse IP (999.999.999.999) est celle d'un autre ordinateur à attaquer.

    J'exécute ce code sur UNIX avec la librairie « saxon-8.7.1.jar ».

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java -cp saxon-8.7.1.jar net.sf.saxon.Transform test.xml test.xsl
    Ce qui me donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Warning: Running an XSLT 1.0 stylesheet with an XSLT 2.0 processor
    <?xml version="1.0" encoding="UTF-8"?>
    <bidon xmlns:runtime="http://xml.apache.org/xalan/java/java.lang.Runtime"
           xmlns:process="http://xml.apache.org/xalan/java/java.lang.Process">java.lang.UNIXProcess@a1a0a1a<infos>
          <process>java.lang.UNIXProcess@a1a0a1a</process>
          <vendor>SAXON 8.7.1 from Saxonica</vendor>
          <url>http://www.saxonica.com/</url>
          <version>2.0</version>
       </infos>
    et on voit qu'un process a été créé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    # ps
          PID    TTY  TIME CMD
     27918356  pts/0  0:00 -ksh
     58589424  pts/0  0:00 ping 999.999.999.999
      8716572  pts/0  0:00 ps
    Je voudrais que cela ne soit plus possible.

    Pour cela, d'après ce que j'ai vu sur le NET, il faudrait valoriser http://javax.xml.XMLConstants/feature/secure-processing à true.

    Or, si je fais cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java -Dhttp://javax.xml.XMLConstants/feature/secure-processing="true" -cp saxon-8.7.1.jar net.sf.saxon.Transform test.xml test.xsl
    J'obtiens la même chose !
    Ca ne marche pas !?

    Quelqu'un peut-il m'aider ?
    Merci.

  2. #2
    Membre chevronné
    Inscrit en
    octobre 2011
    Messages
    1 098
    Détails du profil
    Informations forums :
    Inscription : octobre 2011
    Messages : 1 098
    Points : 1 903
    Points
    1 903

    Par défaut

    Si on se content de poser la question d'une portée restreinte, dit, pour saxon en vue d'extension xslt en java, on peut faire une réponse plus précise comme suite. Dans saxon, on a une option disponible interdisant toutes extensions en java (-ext:off, défaut -ext:on).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java -cp saxon-8.7.1.jar net.sf.saxon.Transform -ext:off -s:test.xml -xsl:test.xsl
    édition: le nom du paramètre -xsl remis à bon

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    septembre 2004
    Messages
    11 312
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : septembre 2004
    Messages : 11 312
    Points : 19 172
    Points
    19 172

    Par défaut

    Citation Envoyé par domiq44 Voir le message
    Pour cela, d'après ce que j'ai vu sur le NET, il faudrait valoriser http://javax.xml.XMLConstants/feature/secure-processing à true.
    Nope. Ça c'est pour le XML en général, éviter des attaques genre plusieurs téra-octets d'entité extérieures à importer par explosion combinatoire, ou juste importer des entités extérieures auprès de serveurs qui mettent 5 heures à répondre.
    D'ailleurs ce n'est pas vraiment une mauvaise idée d'utiliser ce réglage si tu n'as pas confiance dans un XML que tu traites, quel qu'il soit. Car c'est assez simple de faire une attaque de déni de service sans lui.

    Mais ça n'a aucun rapport avec XSLT.

    La commande indiquée par tsuji désactive les extensions qui permettent d'appeler du code Java.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre habitué Avatar de domiq44
    Homme Profil pro
    Inscrit en
    novembre 2005
    Messages
    298
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : novembre 2005
    Messages : 298
    Points : 134
    Points
    134

    Par défaut

    Merci à tsuji pour ton aide sur l'option à utiliser

    Merci aussi à thelvin pour l'explication du pourquoi l'option que j'avais choisi n'est pas appropriée

    Concernant la version de saxon que j'utilise:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    Saxon 8.7.1J from Saxonica
    Usage: java net.sf.saxon.Transform [options] source-doc style-doc {param=value}...
    Options:
      -a              Use xml-stylesheet PI, not style-doc argument
      -c              Indicates that style-doc is a compiled stylesheet
      -cr classname   Use specified collection URI resolver class
      -ds             Use linked tree data structure
      -dt             Use tiny tree data structure (default)
      -im modename    Start transformation in specified mode
      -it template    Start transformation by calling named template
      -l              Retain line numbers in source document tree
      -o filename     Send output to named file or directory
      -m classname    Use specified Emitter class for xsl:message output
      -novw           Suppress warning when running with an XSLT 1.0 stylesheet
      -r classname    Use specified URIResolver class
      -p              Recognize Saxon file extensions and query parameters
      -sa             Schema-aware transformation
      -sall           Strip all whitespace text nodes
      -signorable     Strip ignorable whitespace text nodes (default)
      -snone          Strip no whitespace text nodes
      -t              Display version and timing information
      -T              Set standard TraceListener
      -TJ             Trace calls to external Java functions
      -TL classname   Set a specific TraceListener
      -u              Names are URLs not filenames
      -v              Validate source documents using DTD
      -val            Validate source documents using schema
      -vlax           Lax validation of source documents using schema
      -vw             Treat validation errors on result document as warnings
      -w0             Recover silently from recoverable errors
      -w1             Report recoverable errors and continue (default)
      -w2             Treat recoverable errors as fatal
      -x classname    Use specified SAX parser for source file
      -y classname    Use specified SAX parser for stylesheet
      -1.1            Allow XML 1.1 documents
      -?              Display this message
      param=value     Set stylesheet string parameter
      +param=file     Set stylesheet document parameter
      !option=value   Set serialization option
    Du coup, j'ai utilisé la ligne de commande suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java -cp saxon-8.7.1.jar net.sf.saxon.Transform -noext test.xml test.xsl
    Et ça fonctionne, car j'obtiens alors le message suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Warning: Running an XSLT 1.0 stylesheet with an XSLT 2.0 processor
    Error on line 23 of file:test.xsl:
      Cannot find a matching 0-argument function named
      {http://xml.apache.org/xalan/java/java.lang.Runtime}getRuntime(). Note: external function
      calls have been disabled
    Transformation failed: Run-time errors were reported

Discussions similaires

  1. Comment activer les SSI ?
    Par Olivier Regnier dans le forum OVH
    Réponses: 0
    Dernier message: 23/01/2008, 20h46
  2. Comment activer les boutons d'un JSpinner à distance.
    Par jeanlouis_lecodeur dans le forum AWT/SWING
    Réponses: 1
    Dernier message: 06/08/2007, 18h37
  3. IE7 : comment activer les ActiveX
    Par m-mas dans le forum IE
    Réponses: 3
    Dernier message: 31/03/2006, 12h14
  4. Réponses: 2
    Dernier message: 24/01/2006, 10h41
  5. Réponses: 4
    Dernier message: 03/02/2005, 15h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo