Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
tools-python — Une bibliothèque Python pour analyser, valider et créer des documents SPDX. | Kitploit
Outils/GitHubGitHub/spdx/tools-python
Utilitaires GénérauxDevSecOpsSécurité de la Chaîne Logistique
GitHubspdx/tools-python

tools-python

Une bibliothèque Python pour analyser, valider et créer des documents SPDX.

Voir le dépôtSite web
254162il y a 5 moisVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Bibliothèque Python pour analyser, valider et créer des documents SPDX

Statut CI (Linux, macOS et Windows) : Install and Test

Changements majeurs v0.7 -> v0.8

Veuillez noter que la prochaine version 0.8 a subi un refactoring important en préparation de la prochaine version SPDX v3.0, entraînant des changements majeurs dans l'API. Veuillez vous référer au guide de migration pour mettre à jour votre code existant.

Les principales fonctionnalités de v0.8 sont :

  • validation complète des documents SPDX par rapport aux spécifications v2.2 et v2.3
  • prise en charge du format RDF de SPDX avec toutes les fonctionnalités v2.3
  • prise en charge expérimentale de la prochaine spécification SPDX v3. Notez toutefois que cette prise en charge n'est ni complète ni stable à ce stade, car la spécification est encore en évolution. Le code lié à SPDX3 est contenu dans un sous-package séparé « spdx3 » et son utilisation est facultative. Nous déconseillons de l'utiliser dans du code de production pour le moment.

Notez que v0.8 ne prend en charge que l'écriture, et non la lecture, des documents SPDX 3.0. Voir #760 pour plus de détails.

Informations

Cette bibliothèque implémente des analyseurs, convertisseurs, validateurs et gestionnaires SPDX en Python.

  • Accueil : https://github.com/spdx/tools-python
  • Problèmes : https://github.com/spdx/tools-python/issues
  • PyPI : https://pypi.python.org/pypi/spdx-tools
  • Parcourir l'API : https://spdx.github.io/tools-python

Les mises à jour importantes concernant cette bibliothèque sont partagées via la liste de diffusion SPDX tech : https://lists.spdx.org/g/Spdx-tech.

Licence

Apache-2.0

Fonctionnalités

  • API pour créer et manipuler des documents SPDX v2.2 et v2.3
  • Analyser, convertir, créer et valider des fichiers SPDX
  • Formats pris en charge : Tag/Value, RDF, JSON, YAML, XML
  • Visualiser la structure d'un document SPDX en créant un AGraph. Remarque : il s'agit d'une fonctionnalité facultative qui nécessite l'installation de dépendances facultatives supplémentaires

Prise en charge expérimentale de SPDX 3.0

  • Créer des éléments et des payloads v3.0
  • Convertir des documents v2.2/v2.3 en v3.0
  • Sérialiser en JSON-LD

Voir Démarrage rapide avec SPDX 3.0 plus bas. L'implémentation est basée sur les fichiers Markdown descriptifs du dépôt https://github.com/spdx/spdx-3-model (commit : a5372a3c145dbdfc1381fc1f791c68889aafc7ff). Le dernier modèle SPDX 3.0 est disponible à l'adresse https://spdx.github.io/spdx-spec/v3.0/serializations/.

Installation

Comme toujours, vous devriez travailler dans un virtualenv (venv). Vous pouvez installer un clone local de ce dépôt avec yourenv/bin/pip install . ou l'installer depuis PyPI (vérifiez la dernière version et installez-la comme yourenv/bin/pip install spdx-tools==0.8.3). Notez que sur Windows, ce serait Scripts au lieu de bin.

Comment l'utiliser

Utilisation en ligne de commande

  1. ANALYSE/VALIDATION (pour analyser n'importe quel format) :

    • Utilisez pyspdxtools -i <filename> où <filename> est l'emplacement du fichier. Le format d'entrée est déduit automatiquement de l'extension du fichier.

    • Si vous utilisez une distribution source, essayez d'exécuter : pyspdxtools -i tests/spdx/data/SPDXJSONExample-v2.3.spdx.json

  2. CONVERSION (pour convertir un format vers un autre) :

    • Utilisez pyspdxtools -i <input_file> -o <output_file> où <input_file> est l'emplacement du fichier à convertir et <output_file> est l'emplacement du fichier de sortie. Les formats d'entrée et de sortie sont déduits automatiquement des extensions des fichiers.

    • Si vous utilisez une distribution source, essayez d'exécuter : pyspdxtools -i tests/spdx/data/SPDXJSONExample-v2.3.spdx.json -o output.tag

    • Si vous souhaitez ignorer le processus de validation, fournissez l'option --novalidation, comme ceci : pyspdxtools -i tests/spdx/data/SPDXJSONExample-v2.3.spdx.json -o output.tag --novalidation (à utiliser avec prudence : notez que des documents invalides non détectés peuvent entraîner un comportement inattendu de l'outil)

Utilisation de la bibliothèque

  1. MODÈLE DE DONNÉES

    • Le package spdx_tools.spdx.model constitue le modèle de données interne de SPDX v2.3 (v2.2 en est simplement un sous-ensemble). Toutes les classes pertinentes pour la création de documents SPDX sont exposées dans le __init__.py situé ici.
    • Les objets SPDX sont implémentés via @dataclass_with_properties, une extension personnalisée de @dataclass.
    • Chaque classe commence par une liste de ses propriétés et de leurs types possibles. Lorsqu'aucune valeur par défaut n'est fournie, la propriété est obligatoire et doit être définie lors de l'initialisation.
    • Grâce aux indications de type, la vérification des types est appliquée lors de l'initialisation d'une nouvelle instance ou lors de la définition/lecture d'une propriété sur une instance (des types incorrects lèveront respectivement ConstructorTypeError ou TypeError). Cela permet de détecter facilement les propriétés invalides dès le début et de ne construire que des documents valides.
    • Remarque : les manipulations en place comme list.append(item) contournent la vérification des types (un TypeError sera tout de même levé à la lecture de list). Nous recommandons d'utiliser à la place.

Exemple

Voici quelques exemples de cas d'utilisation possibles pour vous aider à démarrer rapidement avec spdx-tools. Si vous voulez plus d'exemples, comme la création d'un document SPDX à partir de zéro, jetez un œil au dossier exemples.

root@kitploit:~
import logging

from license_expression import get_spdx_licensing

from spdx_tools.spdx.model import (Checksum, ChecksumAlgorithm, File,
                                   FileType, Relationship, RelationshipType)
from spdx_tools.spdx.parser.parse_anything import parse_file
from spdx_tools.spdx.validation.document_validator import validate_full_spdx_document
from spdx_tools.spdx.writer.write_anything import write_file

# read in an SPDX document from a file
document = parse_file("spdx_document.json")

# change the document's name
document.creation_info.name = "new document name"

# define a file and a DESCRIBES relationship between the file and the document
checksum = Checksum(ChecksumAlgorithm.SHA1, "71c4025dd9897b364f3ebbb42c484ff43d00791c")

file = File(name="./fileName.py", spdx_id="SPDXRef-File", checksums=[checksum],
            file_types=[FileType.TEXT],
            license_concluded=get_spdx_licensing().parse("MIT and GPL-2.0"),
            license_comment="licenseComment", copyright_text="copyrightText")

relationship = Relationship("SPDXRef-DOCUMENT", RelationshipType.DESCRIBES, "SPDXRef-File")

# add the file and the relationship to the document
# (note that we do not use "document.files.append(file)" as that would circumvent the type checking)
document.files = document.files + [file]
document.relationships = document.relationships + [relationship]

# validate the edited document and log the validation messages
# (depending on your use case, you might also want to utilize the validation_message.context)
validation_messages = validate_full_spdx_document(document)
for validation_message in validation_messages:
    logging.warning(validation_message.validation_message)

# if there are no validation messages, the document is valid
# and we can safely serialize it without validating again
if not validation_messages:
    write_file(document, "new_spdx_document.rdf", validate=False)

Démarrage rapide avec SPDX 3.0

Contrairement à SPDX v2, tous les éléments sont désormais des sous-classes de la classe centrale Element. Cela inclut les packages, fichiers, snippets, relations, annotations, mais aussi les SBOM, les SpdxDocument, et plus encore. À des fins de sérialisation, tous les éléments qui doivent être sérialisés dans le même fichier sont regroupés dans un Payload. Il s'agit simplement d'un dictionnaire qui associe le SpdxId de chaque élément à lui-même. Utilisez les fonctions write_payload() pour sérialiser un payload. Il existe actuellement deux options :

  • Le module spdx_tools.spdx3.writer.json_ld.json_ld_writer génère un fichier JSON-LD du payload.
  • Le module spdx_tools.spdx3.writer.console.payload_writer affiche une sortie de débogage dans la console. Notez qu'il ne s'agit pas d'une partie officielle de la spécification SPDX et que cette fonctionnalité sera probablement abandonnée dès qu'un meilleur standard émergera.

Vous pouvez convertir un document SPDX v2 en v3 via le module spdx_tools.spdx3.bump_from_spdx2.spdx_document. La fonction bump_spdx_document() renverra un payload contenant un élément SpdxDocument et un élément pour chaque package, fichier, snippet, relation ou annotation contenu dans le document v2.

Dépendances

  • PyYAML : https://pypi.org/project/PyYAML/ pour la gestion du YAML.
  • xmltodict : https://pypi.org/project/xmltodict/ pour la gestion du XML.
  • rdflib : https://pypi.python.org/pypi/rdflib/ pour la gestion du RDF.
  • ply : https://pypi.org/project/ply/ pour la gestion du tag-value.
  • click : https://pypi.org/project/click/ pour la création de l'interface CLI.
  • beartype : https://pypi.org/project/beartype/ pour la vérification des types.
  • uritools : https://pypi.org/project/uritools/ pour la validation des URI.
  • license-expression : https://pypi.org/project/license-expression/ pour la gestion des expressions de licence SPDX.

Support

  • Soumettez vos problèmes, questions ou retours à l'adresse https://github.com/spdx/tools-python/issues
  • Rejoignez le chat à https://gitter.im/spdx-org/Lobby
  • Participez à la discussion sur https://lists.spdx.org/g/spdx-tech et https://spdx.dev/participate/tech/

Contribution

Les contributions sont les bienvenues ! Consultez CONTRIBUTING.md pour les instructions sur la façon de contribuer à la base de code.

Historique

Ceci est le résultat d'une contribution initiale GSoC de @ah450 (ou https://github.com/a-h-i) et est maintenu par une communauté d'adoptants et de passionnés de SPDX. Afin de préparer la sortie de SPDX v3.0, le dépôt a subi une refonte majeure entre 11/2022 et 07/2023.

Télécharger l’outil
  • Pour obtenir de l'aide, utilisez pyspdxtools --help

  • GÉNÉRATION DE GRAPHES (fonctionnalité facultative)

    • Cette fonctionnalité génère un graphe représentant tous les éléments du document SPDX et leurs connexions en fonction des relations fournies. Le graphe peut être rendu sous forme d'image. Voici un exemple pour le fichier tests/spdx/data/SPDXJSONExample-v2.3.spdx.json : SPDXJSONExample-v2.3.spdx.png

    • Assurez-vous d'installer les dépendances facultatives networkx et pygraphviz. Pour ce faire, exécutez pip install ".[graph_generation]".

    • Utilisez pyspdxtools -i <input_file> --graph -o <output_file> où <output_file> est un nom de fichier de sortie au format valide pour pygraphviz (consultez la documentation ici).

    • Si vous utilisez une distribution source, essayez d'exécuter pyspdxtools -i tests/spdx/data/SPDXJSONExample-v2.3.spdx.json --graph -o SPDXJSONExample-v2.3.spdx.png pour générer un png avec un aperçu de la structure du fichier d'exemple.

  • list = list + [item]
  • Le point d'entrée principal d'un document SPDX est la classe Document du module document.py, qui renvoie à toutes les autres classes.
  • Pour la gestion des licences, la bibliothèque license_expression est utilisée.
  • Remarque sur documentDescribes et hasFiles : ces champs seront convertis en relations dans le modèle de données interne. Comme ils sont obsolètes, ces champs ne seront pas écrits dans la sortie.
  • ANALYSE

    • Utilisez parse_file(file_name) du module parse_anything.py pour analyser un fichier arbitraire avec l'une des extensions de fichier prises en charge.
    • Une analyse réussie renverra une instance de Document. Une analyse infructueuse lèvera SPDXParsingError avec une liste de tous les problèmes rencontrés.
  • VALIDATION

    • Utilisez validate_full_spdx_document(document) pour valider une instance de la classe Document.
    • Cela renverra une liste d'objets ValidationMessage, chacun composé d'une chaîne décrivant l'invalidité et d'un ValidationContext pour identifier la source de l'erreur de validation.
    • La validation dépend de la version SPDX du document. Notez que seules les versions SPDX-2.2 et SPDX-2.3 sont prises en charge par cet outil.
  • ÉCRITURE

    • Utilisez write_file(document, file_name) du module write_anything.py pour écrire une instance de Document dans le fichier spécifié. Le format de sérialisation est déterminé à partir de l'extension du nom de fichier.
    • La validation est effectuée par défaut avant le processus d'écriture, qui est annulé si le document est invalide. Vous pouvez ignorer la validation via write_file(document, file_name, validate=False). Attention : seuls les documents valides peuvent être sérialisés de manière fiable ; la sérialisation de documents invalides n'est pas prise en charge.