
पायथन वेब अनुप्रयोगों में सुरक्षा कमजोरियों का पता लगाने के लिए एक स्थैतिक विश्लेषण उपकरण
.. 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
मार्च 2020 अपडेट: कृपया अद्भुत Pysa ट्यूटोरियल_ देखें, जो आपको अपने पायथन कोडबेस में सुरक्षा कमजोरियाँ खोजने में तेज़ी से सक्षम बनाएगा।
Facebook का Pyre_ एक शानदार प्रोजेक्ट है जिसका उज्ज्वल भविष्य है और उस पर कई बुद्धिमान लोग काम कर रहे हैं।
मेरा सुझाव है, यदि आप प्रोग्राम विश्लेषण के बारे में अधिक नहीं जानते हैं, तो आप Pyre में गोता लगाने से पहले समझें कि PyT कैसे काम करता है। अधिकांश निर्देशिकाओं में README_ के साथ, मूल मास्टर थीसिस_ और कुछ स्लाइड्स_ हैं।
इसके साथ ही, मैं पुल रिक्वेस्ट की समीक्षा करने और यदि आप कुछ से अधिक करते हैं तो आपको लिखने की अनुमति देने में प्रसन्न हूं।
इस परियोजना में कई महान योगदानकर्ता थे, मैं भविष्य में detect-secrets_ जैसी अन्य परियोजनाओं (जैसे अंततः Pyre) पर काम करने की योजना बना रहा हूं, यदि आप फिर से साथ काम करना चाहते हैं :)
यदि आप एक सुरक्षा इंजीनियर हैं जिनके पास, उदाहरण के लिए, टाइप एनोटेशन के बिना एक पायथन कोडबेस है, जिसे Pyre संभाल नहीं पाएगा, तो मैं सुझाव दूंगा कि आप अपने सिंक को एक सुरक्षित रैपर (जैसे defusedxml) से बदल दें, और मानक सिंक के किसी भी उपयोग पर अलर्ट करें। आप इसके लिए Bandit का उपयोग कर सकते हैं क्योंकि डेटा प्रवाह विश्लेषण की आवश्यकता नहीं है, लेकिन उच्च गलत-सकारात्मक दर के कारण आपको इसे बहुत ट्रिम करना होगा।
.. _Pysa tutorial: https://github.com/facebook/pyre-check/tree/master/pysa_tutorial#pysa-tutorial .. _Pyre: https://github.com/facebook/pyre-check .. _README's in most directories: https://github.com/python-security/pyt/tree/master/pyt#how-it-works .. _Master's Thesis: https://projekter.aau.dk/projekter/files/239563289/final.pdf .. _some slides: 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
पायथन वेब अनुप्रयोगों का स्थैतिक विश्लेषण, सैद्धांतिक आधारों पर आधारित (नियंत्रण प्रवाह ग्राफ, फिक्स्ड पॉइंट, डेटा प्रवाह विश्लेषण)
कमांड इंजेक्शन, SSRF, SQL इंजेक्शन, XSS, डायरेक्टरी ट्रैवर्सल आदि का पता लगाएं।
बहुत अधिक अनुकूलन संभव
हालिया परिवर्तनों के लिए, कृपया changelog_ देखें।
.. _changelog: https://github.com/python-security/pyt/blob/master/CHANGELOG.md
उपयोग और आउटपुट का उदाहरण:
.. image:: https://raw.githubusercontent.com/KevinHock/rtdpyt/master/readme_static_files/pyt_example.png
जारी रखने से पहले, सुनिश्चित करें कि आपके पास python3.6 या 3.7 स्थापित है।
.. code-block:: python
pip install python-taint
✨🍰✨
PyT को स्रोत से भी स्थापित किया जा सकता है। ऐसा करने के लिए, रिपॉजिटरी को क्लोन करें, और फिर चलाएं:
.. code-block:: python
python3 setup.py install
जल्द ही आपको pyt/ फ़ोल्डर में हर निर्देशिका में एक README.rst_ मिलेगा, यहाँ से शुरू करें_.
.. _README.rst: https://github.com/python-security/pyt/tree/master/pyt .. _start here: https://github.com/python-security/pyt/tree/master/pyt
-a विकल्प यह निर्धारित करता है कि किन फ़ंक्शनों के आर्गुमेंट्स दूषित होंगे_, डिफ़ॉल्ट रूप से यह Flask है।
स्रोतों और सिंक को निर्दिष्ट करने के लिए -t विकल्प का उपयोग करें, डिफ़ॉल्ट रूप से यह फ़ाइल उपयोग की जाती है_.
बिल्टिन या लाइब्रेरीज़ के फ़ंक्शनों के लिए, जैसे url_for या os.path.join, -m विकल्प का उपयोग करके निर्दिष्ट करें कि क्या वे दूषित इनपुट दिए जाने पर दूषित मान लौटाते हैं, डिफ़ॉल्ट रूप से यह फ़ाइल उपयोग की जाती है_.
.. _The -a option determines which functions will have their arguments tainted: https://github.com/python-security/pyt/tree/master/pyt/web_frameworks#web-frameworks .. _this file is used: https://github.com/python-security/pyt/blob/master/pyt/vulnerability_definitions/all_trigger_words.pyt .. _default this file is used: 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 ...]
आवश्यक तर्क: targets स्रोत फ़ाइल(एं) या निर्देशिका(एं) जिन्हें स्कैन किया जाना है
महत्वपूर्ण वैकल्पिक तर्क: -a ADAPTOR, --adaptor ADAPTOR एक वेब फ्रेमवर्क अनुकूलक चुनें: Flask(डिफ़ॉल्ट), Django, Every या Pylons
-t TRIGGER_WORD_FILE, --trigger-word-file TRIGGER_WORD_FILE
स्रोतों और सिंक की सूची वाली इनपुट फ़ाइल
-m BLACKBOX_MAPPING_FILE, --blackbox-mapping-file BLACKBOX_MAPPING_FILE
इनपुट ब्लैकबॉक्स मैपिंग फ़ाइल
वैकल्पिक तर्क: -pr PROJECT_ROOT, --project-root PROJECT_ROOT प्रोजेक्ट रूट जोड़ें, केवल तब महत्वपूर्ण जब एंट्री फ़ाइल प्रोजेक्ट के रूट पर नहीं है।
-b BASELINE_JSON_FILE, --baseline BASELINE_JSON_FILE
तुलना के लिए बेसलाइन रिपोर्ट का पथ (केवल JSON-स्वरूपित फ़ाइलें स्वीकार की जाती हैं)
-j, --json रिपोर्ट के बजाय JSON प्रिंट करता है।
-i, --interactive भेद्यता श्रृंखलाओं में प्रत्येक ब्लैकबॉक्स फ़ंक्शन कॉल के बारे में पूछेगा।
-o OUTPUT_FILE, --output OUTPUT_FILE
रिपोर्ट को फ़ाइल नाम में लिखें
--ignore-nosec # nosec टिप्पणियों वाली पंक्तियों को छोड़ें नहीं
-r, --recursive उपनिर्देशिकाओं में फ़ाइलें खोजें और संसाधित करें
-x EXCLUDED_PATHS, --exclude EXCLUDED_PATHS
फ़ाइलों को कॉमा से अलग करें
--dont-prepend-root प्रोजेक्ट रूट में, उदा. /app, आयात app.* से प्रीपेंड नहीं किए जाते
--no-local-imports यदि सेट किया गया, तो निरपेक्ष आयात प्रोजेक्ट रूट के सापेक्ष होने चाहिए।
यदि सेट नहीं किया गया, तो उसी निर्देशिका में मौजूद मॉड्यूल को केवल उनके नामों से आयात किया जा सकता है।
इसे उपयोगकर्ता की तरह चलाना python3 -m pyt examples/vulnerable_code/XSS_call.py
परीक्षण चलाना python3 -m tests
एक व्यक्तिगत परीक्षण फ़ाइल चलाना python3 -m unittest tests.import_test
एक व्यक्तिगत परीक्षण चलाना python3 -m unittest tests.import_test.ImportTest.test_import
हमारे स्लैक समूह में शामिल हों: https://pyt-dev.slack.com/ - निमंत्रण के लिए पूछें: [email protected]
दिशानिर्देश_
.. _Guidelines: https://github.com/python-security/pyt/blob/master/CONTRIBUTIONS.md
वर्चुअल एनवायरनमेंट और प्रोजेक्ट रखने के लिए एक निर्देशिका बनाएं
mkdir ~/a_folder
cd ~/a_folder
प्रोजेक्ट को निर्देशिका में क्लोन करें
git clone https://github.com/python-security/pyt.git
वर्चुअल एनवायरनमेंट बनाएं
python3 -m venv ~/a_folder/
जांचें कि आपके पास सही संस्करण हैं
python3 --version नमूना आउटपुट Python 3.6.0
pip --version नमूना आउटपुट pip 9.0.1 from /Users/kevinhock/a_folder/lib/python3.6/site-packages (python 3.6)
प्रोजेक्ट निर्देशिका में बदलें
cd pyt
भविष्य में, विकास शुरू करने के लिए बस source ~/a_folder/bin/activate टाइप करें।