# Modules de traitement XML

Code source: Lib/xml/

Les interfaces de Python de traitement de XML sont regroupées dans le paquet `xml`.

Note

If you need to parse untrusted or unauthenticated data, see XML security.

It is important to note that modules in the `xml` package require that there be at least one SAX-compliant XML parser available. The Expat parser is included with Python, so the `xml.parsers.expat` module will always be available.

La documentation des interfaces vers DOM et SAX se trouve dans `xml.dom` et `xml.sax`.

Les sous-modules de traitement XML sont :

- `xml.etree.ElementTree` : l'API ElementTree, un processeur simple et léger

- `xml.dom` : la définition de l'API DOM

- `xml.dom.minidom` : une implémentation minimale de DOM

- `xml.dom.pulldom` : gestion de la construction partielle des arbres DOM

- `xml.sax` : classes mères SAX2 et fonctions utilitaires

- `xml.parsers.expat` : l'interface de l'analyseur Expat

This module also defines utility functions.

xml.is_valid_name(name)

  Return `True` if the string is a valid element or attribute name, `False` otherwise.

  Almost all characters are permitted in names, except control characters and those which either are or reasonably could be used as delimiters. Characters like ":", "-", ".", "_", and "·" are permitted, but "<", "/", "!", "?", and "=" are forbidden. The name cannot start with a digit or a character like "-", ".", and "·".

  Ajouté dans la version 3.15.

xml.is_valid_text(data)

  Return `True` if the string is a sequence of legal XML 1.0 characters, `False` otherwise.

  Almost all characters are permitted in XML 1.0 documents, except C0 control characters (excluding TAB, CR and LF), surrogate characters and special Unicode characters U+FFFE and U+FFFF.

  Ajouté dans la version 3.15.

## XML security

An attacker can abuse XML features to carry out denial of service attacks, access local files, generate network connections to other machines, or circumvent firewalls when attacker-controlled XML is being parsed, in Python or elsewhere.

The built-in XML parsers of Python rely on the library libexpat, commonly called Expat, for parsing XML.

By default, Expat itself does not access local files or create network connections.

Expat versions lower than 2.7.2 may be vulnerable to the "billion laughs", "quadratic blowup" and "large tokens" vulnerabilities, or to disproportional use of dynamic memory. Python bundles a copy of Expat, and whether Python uses the bundled or a system-wide Expat, depends on how the Python interpreter `has been configured` in your environment. Python may be vulnerable if it uses such older versions of Expat. Check `pyexpat.EXPAT_VERSION`.

`xmlrpc` is vulnerable to the "decompression bomb" attack.

billion laughs / exponential entity expansion

  L'attaque Billion Laughs – aussi connue comme exponential entity expansion – utilise de multiples niveaux d'entités imbriquées. Chaque entité se réfère à une autre entité de multiple fois. L'entité finale contient une chaîne courte. Le résultat de l'expansion exponentielle génère plusieurs gigaoctets de texte et consomme beaucoup de mémoire et de temps processeur.

quadratic blowup entity expansion

  Une attaque quadratic blowup est similaire à l'attaque Billion Laughs ; il s'agit également d'un abus d'extension d'entités. Au lieu d'utiliser des entités imbriquées, cette attaque répète encore et encore une seule entité de plusieurs milliers de caractères. Cette attaque n'est pas aussi efficace que la version exponentielle mais contourne les contre-mesures de l'analyseur qui interdit les entités imbriquées de multiples fois.

decompression bomb

  Des bombes de décompression (ou ZIP bomb) sont valables pour toutes les bibliothèques XML qui peuvent analyser des flux XML compressés comme des flux HTTP gzip ou des fichiers compressés LZMA. Pour L'attaquant, cela permet de réduire d'une magnitude d'ordre 3 ou plus la quantité de données transmises.

large tokens

  Expat needs to re-parse unfinished tokens; without the protection introduced in Expat 2.6.0, this can lead to quadratic runtime that can be used to cause denial of service in the application parsing XML. The issue is known as CVE 2023-52425.