पायथन हमलावरों को टकराने से रोकने के लिए एक यादृच्छिक हैश बीज का उपयोग करता है ताकि आप टकराने के लिए डिज़ाइन की गई चाबियों को भेजकर अपने आवेदन को रोक सकें। मूल भेद्यता प्रकटीकरण देखें । एक यादृच्छिक बीज (स्टार्टअप पर एक बार सेट) के साथ हैश को ऑफसेट करके हमलावर अब अनुमान नहीं लगा सकते हैं कि चाबियाँ क्या टकराएंगी।
आप एक निश्चित बीज सेट कर सकते हैं या PYTHONHASHSEED
पर्यावरण चर सेट करके सुविधा को अक्षम कर सकते हैं ; डिफ़ॉल्ट है, random
लेकिन आप 0
पूरी तरह से सुविधा को अक्षम करने के साथ, इसे एक निश्चित सकारात्मक पूर्णांक मान पर सेट कर सकते हैं।
पायथन संस्करण 2.7 और 3.2 में डिफ़ॉल्ट रूप से अक्षम सुविधा है ( इसे सक्षम करने के लिए -R
स्विच या सेट PYTHONHASHSEED=random
का उपयोग करें); यह Python 3.3 और उसके बाद डिफ़ॉल्ट रूप से सक्षम है।
यदि आप पायथन सेट में चाबियों के क्रम पर भरोसा कर रहे हैं, तो नहीं। पायथन इन प्रकारों को लागू करने के लिए एक हैश तालिका का उपयोग करता है और उनका क्रम सम्मिलन और विलोपन इतिहास के साथ-साथ यादृच्छिक हैश बीज पर निर्भर करता है । ध्यान दें कि पायथन 3.5 और पुराने में, यह शब्दकोशों पर भी लागू होता है।
object.__hash__()
विशेष विधि प्रलेखन भी देखें :
नोट : डिफ़ॉल्ट रूप से, __hash__()
str, बाइट्स और डेटाइम ऑब्जेक्ट्स के मान एक अप्रत्याशित यादृच्छिक मूल्य के साथ "नमकीन" हैं। यद्यपि वे एक व्यक्तिगत पायथन प्रक्रिया के भीतर स्थिर रहते हैं, वे पायथन के बार-बार होने वाले आक्रमणों के बीच अनुमानित नहीं हैं।
इसका उद्देश्य सावधानी से चुने गए इनपुट के कारण एक इनकार-सेवा के खिलाफ सुरक्षा प्रदान करना है जो एक तानाशाही प्रविष्टि, ओ (एन ^ 2) जटिलता के सबसे खराब मामले के प्रदर्शन का फायदा उठाते हैं। देखें http://www.ocert.org/advisories/ocert-2011-003.html जानकारी के लिए।
हैश मानों को बदलने से dicts, सेट और अन्य मैपिंग के पुनरावृति क्रम प्रभावित होते हैं। पायथन ने इस आदेश के बारे में कभी गारंटी नहीं दी है (और यह आमतौर पर 32-बिट और 64-बिट बिल्ड के बीच भिन्न होता है)।
यह भी देखें PYTHONHASHSEED
।
यदि आपको एक स्थिर हैश कार्यान्वयन की आवश्यकता है, तो आप संभवतः hashlib
मॉड्यूल को देखना चाहते हैं ; यह क्रिप्टोग्राफ़िक हैश फ़ंक्शन को कार्यान्वित करता है। Pybloom परियोजना इस दृष्टिकोण का उपयोग करता है ।
चूंकि ऑफसेट में एक उपसर्ग और एक प्रत्यय होता है (प्रारंभ मूल्य और क्रमशः अंतिम XORed मूल्य,) आप ऑफसेट को स्टोर नहीं कर सकते, दुर्भाग्य से। प्लस साइड पर, इसका मतलब है कि हमलावर आसानी से समय के हमलों के साथ ऑफसेट का निर्धारण नहीं कर सकते हैं।