
Un outil d'analyse statique pour détecter les vulnérabilités de sécurité dans les applications web Python.
.. image:: https://travis-ci.org/python-security/pyt.svg?branch=master :target: https://travis-ci.org/python-security/pyt
.. image:: https://readthedocs.org/projects/pyt/badge/?version=latest :target: http://pyt.readthedocs.io/en/latest/?badge=latest
.. image:: https://codeclimate.com/github/python-security/pyt/badges/coverage.svg :target: https://codeclimate.com/github/python-security/pyt/coverage
.. image:: https://badge.fury.io/py/python-taint.svg :target: https://badge.fury.io/py/python-taint
.. image:: https://img.shields.io/badge/PRs-welcome-ff69b4.svg :target: https://github.com/python-security/pyt/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22+
.. image:: https://img.shields.io/badge/python-v3.6-blue.svg :target: https://pypi.org/project/python-taint/
.. image:: https://img.shields.io/badge/Donate-Charity-orange.svg :target: https://www.againstmalaria.com/donation.aspx
Mise à jour mars 2020 : Allez voir l'incroyable tutoriel Pysa_ qui vous permettra de trouver rapidement des vulnérabilités de sécurité dans votre code Python.
Pyre_ de Facebook est un projet fantastique qui a un avenir radieux et auquel travaillent de nombreuses personnes intelligentes.
Je suggère, si vous ne connaissez pas grand-chose à l'analyse de programmes, de comprendre comment PyT fonctionne avant de plonger dans Pyre. Avec les README dans la plupart des répertoires, il y a le Mémoire de Master original et quelques diapositives_.
Cela dit, je suis heureux de relire les pull requests et de vous donner les droits d'écriture si vous en faites plus que quelques-unes.
Il y a eu beaucoup d'excellents contributeurs sur ce projet, je prévois de travailler sur d'autres projets comme detect-secrets_ et d'autres (par ex. Pyre finalement) à l'avenir si vous souhaitez collaborer plus :)
Si vous êtes un ingénieur en sécurité avec, par exemple, une base de code Python sans annotations de type, que Pyre ne gérera pas, je vous suggère de remplacer vos sinks par un wrapper sécurisé (quelque chose comme defusedxml), et d'alerter sur toute utilisation du sink standard. Vous pouvez utiliser Bandit pour cela car l'analyse de flux de données n'est pas nécessaire, mais vous devrez le tailler beaucoup, en raison du taux élevé de faux positifs.
.. _tutoriel Pysa: https://github.com/facebook/pyre-check/tree/master/pysa_tutorial#pysa-tutorial .. _Pyre: https://github.com/facebook/pyre-check .. _README dans la plupart des répertoires: https://github.com/python-security/pyt/tree/master/pyt#how-it-works .. _Mémoire de Master: https://projekter.aau.dk/projekter/files/239563289/final.pdf .. _quelques diapositives: https://docs.google.com/presentation/d/1JfAykAxR0DcJwwGfHmhrz1RhhKqYsnt5x_GY8CbTp7s .. _detect-secrets: https://github.com/Yelp/detect-secrets/blob/master/CHANGELOG.md#whats-new .. _defusedxml: https://pypi.org/project/defusedxml/ .. _Bandit: https://github.com/PyCQA/bandit
Analyse statique d'applications web Python basée sur des fondements théoriques (graphes de flot de contrôle, point fixe, analyse de flux de données)
Détection d'injection de commandes, SSRF, injection SQL, XSS, traversée de répertoire, etc.
Beaucoup de personnalisation possible
Pour un aperçu des modifications récentes, veuillez consulter le journal des modifications_.
.. _journal des modifications: https://github.com/python-security/pyt/blob/master/CHANGELOG.md
Exemple d'utilisation et de sortie :
.. image:: https://raw.githubusercontent.com/KevinHock/rtdpyt/master/readme_static_files/pyt_example.png
Avant de continuer, assurez-vous d'avoir python3.6 ou 3.7 installé.
.. code-block:: python
pip install python-taint
✨🍰✨
PyT peut également être installé depuis les sources. Pour ce faire, clonez le dépôt, puis exécutez :
.. code-block:: python
python3 setup.py install
Bientôt vous trouverez un README.rst_ dans chaque répertoire du dossier pyt/, commencez ici_.
.. _README.rst: https://github.com/python-security/pyt/tree/master/pyt .. _commencez ici: https://github.com/python-security/pyt/tree/master/pyt
L'option -a détermine quelles fonctions verront leurs arguments contaminés_, par défaut c'est Flask.
Utilisez l'option -t pour spécifier les sources et les sinks, par défaut ce fichier est utilisé_.
Pour les fonctions des builtins ou des bibliothèques, par ex. url_for ou os.path.join, utilisez l'option -m pour spécifier si elles renvoient des valeurs contaminées à partir d'entrées contaminées, par défaut ce fichier est utilisé_.
.. _L'option -a détermine quelles fonctions verront leurs arguments contaminés: https://github.com/python-security/pyt/tree/master/pyt/web_frameworks#web-frameworks .. _ce fichier est utilisé: https://github.com/python-security/pyt/blob/master/pyt/vulnerability_definitions/all_trigger_words.pyt .. _défaut ce fichier est utilisé: https://github.com/python-security/pyt/blob/master/pyt/vulnerability_definitions/blackbox_mapping.json
.. code-block::
usage: python -m pyt [-h] [-a ADAPTOR] [-pr PROJECT_ROOT] [-b BASELINE_JSON_FILE] [-j] [-t TRIGGER_WORD_FILE] [-m BLACKBOX_MAPPING_FILE] [-i] [-o OUTPUT_FILE] [--ignore-nosec] [-r] [-x EXCLUDED_PATHS] [--dont-prepend-root] [--no-local-imports] targets [targets ...]
required arguments: targets source file(s) or directory(s) to be scanned
important optional arguments: -a ADAPTOR, --adaptor ADAPTOR Choose a web framework adaptor: Flask(Default), Django, Every or Pylons
-t TRIGGER_WORD_FILE, --trigger-word-file TRIGGER_WORD_FILE
Input file with a list of sources and sinks
-m BLACKBOX_MAPPING_FILE, --blackbox-mapping-file BLACKBOX_MAPPING_FILE
Input blackbox mapping file
optional arguments: -pr PROJECT_ROOT, --project-root PROJECT_ROOT Add project root, only important when the entry file is not at the root of the project.
-b BASELINE_JSON_FILE, --baseline BASELINE_JSON_FILE
Path of a baseline report to compare against (only
JSON-formatted files are accepted)
-j, --json Prints JSON instead of report.
-i, --interactive Will ask you about each blackbox function call in
vulnerability chains.
-o OUTPUT_FILE, --output OUTPUT_FILE
Write report to filename
--ignore-nosec Do not skip lines with # nosec comments
-r, --recursive Find and process files in subdirectories
-x EXCLUDED_PATHS, --exclude EXCLUDED_PATHS
Separate files with commas
--dont-prepend-root In project root e.g. /app, imports are not prepended
with app.*
--no-local-imports If set, absolute imports must be relative to the
project root. If not set, modules in the same
directory can be imported just by their names.
Utilisation comme un utilisateur python3 -m pyt examples/vulnerable_code/XSS_call.py
Exécution des tests python3 -m tests
Exécution d'un fichier de test individuel python3 -m unittest tests.import_test
Exécution d'un test individuel python3 -m unittest tests.import_test.ImportTest.test_import
Rejoignez notre groupe Slack : https://pyt-dev.slack.com/ - demandez une invitation : [email protected]
Directives_
.. _Directives: https://github.com/python-security/pyt/blob/master/CONTRIBUTIONS.md
Créez un répertoire pour contenir l'environnement virtuel et le projet
mkdir ~/a_folder
cd ~/a_folder
Clonez le projet dans le répertoire
git clone https://github.com/python-security/pyt.git
Créez l'environnement virtuel
python3 -m venv ~/a_folder/
Vérifiez que vous avez les bonnes versions
python3 --version exemple de sortie Python 3.6.0
pip --version exemple de sortie pip 9.0.1 from /Users/kevinhock/a_folder/lib/python3.6/site-packages (python 3.6)
Déplacez-vous dans le répertoire du projet
cd pyt
À l'avenir, tapez simplement source ~/a_folder/bin/activate pour commencer à développer.