इस लेख में, हम संस्करण 2.x में इस बारे में जानेंगे कि इनपुट फ़ंक्शन अवांछनीय तरीके से कैसे व्यवहार करता है। या जल्दी। संस्करण 2.x में। raw_input() फ़ंक्शन इनपुट() फ़ंक्शन के प्रतिस्थापन के रूप में कार्य करता है। नए संस्करणों में 3.x. या बाद में दोनों कार्यों की सभी वांछनीय विशेषताओं और कार्यात्मकताओं को इनपुट () फ़ंक्शन में मिला दिया जाता है।
सबसे पहले आइए Python 2.x में इनपुट लेने के लिए इनपुट प्रकार के बिल्ट-इन फ़ंक्शंस को देखें।
उदाहरण
# Input Given : String str1 = raw_input("Output of raw_input() function: ") print type(str1) str2 = input("Output of input() function: ") print type(str2) # Input Given : Float str3 = raw_input("Output of raw_input() function: ") print type(str3) str4 = input("Output of input() function: ") print type(str4) # Input Given : Integer str5 = raw_input("Output of raw_input() function: ") print type(str5) str6 = input("Output of input() function: ") print type(str6)
आउटपुट
Output of raw_input() function: Output of input() function: Output of raw_input() function: Output of input() function: Output of raw_input() function: Output of input() function:
स्पष्टीकरण - आउटपुट से, यह बिल्कुल स्पष्ट है कि raw_input फ़ंक्शन स्पष्ट रूप से इनपुट को स्ट्रिंग प्रकार में परिवर्तित करता है, भले ही प्रदान किए गए इनपुट का प्रकार कुछ भी हो। इसके विपरीत, इनपुट फ़ंक्शन उसी डेटा प्रकार को बनाए रखता है जैसा इनपुट के दौरान प्रदान किया जाता है।
अब उपरोक्त उदाहरण को देखने के बाद आप सोच रहे होंगे कि यदि इनपुट फ़ंक्शन डेटा प्रकार को बरकरार रखता है तो यह असुरक्षित क्यों है? आइए एक दृष्टांत का उपयोग करके इसे स्पष्ट करें -
चित्र 1:आइए अब यादृच्छिक मॉड्यूल का उपयोग करके एक पासा खेल बनाते हैं।
उदाहरण
import random as rd number = random.randint(1,6) print ("Pick a number between 1 to 6") while True: user_input = input("Guess the number: ") if user_input==number: print ("You guessed it right.") break else: print ("OOPS! try it next time.") continue
स्पष्टीकरण - यदि उपयोगकर्ता एक पूर्णांक इनपुट प्रदान करता है तो सशर्त अभिव्यक्तियों के अनुसार वांछित आउटपुट की गणना तदनुसार की जाएगी।
यदि उपयोगकर्ता एक स्ट्रिंग इनपुट प्रदान करता है अर्थात चर नाम के समान जिसमें हम यादृच्छिक मॉड्यूल का उपयोग करके पासा द्वारा उत्पन्न यादृच्छिक पूर्णांक को संग्रहीत करते हैं, तो आउटपुट की भी गणना की जाती है। लेकिन यह वांछित आउटपुट नहीं होना चाहिए जिसे हम गणना करना चाहते हैं। असल में, जब एक स्ट्रिंग इनपुट गलत इनपुट प्रकार वाली त्रुटि उत्पन्न करनी चाहिए। यह उपयोगकर्ता द्वारा सीधे दर्ज की गई संख्या के बराबर चर नाम पर विचार करता है, अभिव्यक्ति एक ट्रू बूलियन मान उत्पन्न करती है और खेल अंत तक पहुंच जाता है। इसके विपरीत, अगर मैं इसके बजाय raw_input() का उपयोग करता हूं, तो ऐसी कोई समस्या नहीं आती है।
यदि हम लॉगिन क्रेडेंशियल, उपयोगकर्ता विवरण और खाता पासवर्ड संग्रहीत कर रहे हैं तो यह भेद्यता घातक साबित हो सकती है।
चित्र 1:अब एक सिस्टम बनाते हैं जो पिन मांगता है और संग्रहीत मूल्य के साथ तुलना करता है।
उदाहरण
stored_value = 7863 def return_function(): return stored_value inp = input() if inp == stored_value: print "You Entered Correctly" else: print "Oops! It's Incorrect"
स्पष्टीकरण
जैसा कि हमने पिछले चित्रण में चर्चा की थी कि यदि प्रदान किया गया इनपुट पूर्णांक प्रकार पर है, तो फ़ंक्शन सामान्य रूप से काम करता है। लेकिन किसी भी मामले में उपयोगकर्ता फ़ंक्शन के वापसी मूल्य के समान इनपुट प्रदान करता है, सशर्त सत्य हो जाता है और आउटपुट उत्पन्न होता है।
पिन और पासवर्ड जैसी महत्वपूर्ण और गोपनीय जानकारी को संभालने के मामले में इसका उपयोग करना बहुत खतरनाक है। इसे Python 2.x में प्रदान किए गए raw_input() का उपयोग करके दूर किया जा सकता है।
ऊपर दिए गए दो इलस्ट्रेशन से, यह बिल्कुल स्पष्ट है कि इनपुट फ़ंक्शन प्रोग्राम को डायरेक्ट वेरिएबल अटैक के लिए तैयार करता है।
निष्कर्ष
इस लेख में, हमने सीखा कि पायथन 2.x में इनपुट () फ़ंक्शन का उपयोग करते समय सभी मुद्दों और खामियों का क्या सामना करना पड़ता है। जरूरत है।