Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Python

पायथन में input() फंक्शन की भेद्यता


इस लेख में, हम जानेंगे कि कैसे input फंक्शन संस्करण 2.x या उससे पहले में अवांछनीय तरीके से व्यवहार करता है। संस्करण 2.x में raw_input() फंक्शन input() फंक्शन के प्रतिस्थापन के रूप में काम करता है। नए संस्करण 3.x या बाद में दोनों फंक्शन्स की सभी वांछनीय विशेषताओं और कार्यक्षमताओं को input() फंक्शन में मर्ज कर दिया गया है।

सबसे पहले आइए पायथन 2.x में इनपुट लेने के लिए बिल्ट-इन फंक्शन्स के इनपुट टाइप को देखते हैं।

उदाहरण

# दिया गया इनपुट: स्ट्रिंग
str1 = raw_input("Output of raw_input() function: ")
print(type(str1))
str2 = input("Output of input() function: ")
print(type(str2))
# दिया गया इनपुट: फ्लोट
str3 = raw_input("Output of raw_input() function: ")
print(type(str3))
str4 = input("Output of input() function: ")
print(type(str4))
# दिया गया इनपुट: इंटीजर
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 फंक्शन इनपुट के प्रकार की परवाह किए बिना इनपुट को स्पष्ट रूप से स्ट्रिंग प्रकार में परिवर्तित करता है। इसके विपरीत, input फंक्शन इनपुट के दौरान प्रदान किए गए समान डेटा प्रकार को बरकरार रखता है।

अब उपरोक्त उदाहरण देखने के बाद आप सोच रहे होंगे कि अगर 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() का उपयोग किया होता, तो ऐसी कोई समस्या नहीं होती।

यह भेद्यता घातक साबित हो सकती है यदि हम लॉगिन क्रेडेंशियल्स, उपयोगकर्ता विवरण और खाता पासवर्ड स्टोर कर रहे हैं।

चित्रण 2: अब आइए एक सिस्टम बनाते हैं जो पिन मांगता है और संग्रहीत मान से तुलना करता है।

उदाहरण

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")

व्याख्या

जैसा कि हमने पिछले चित्रण में चर्चा की कि यदि प्रदान किया गया इनपुट पूर्णांक प्रकार का है, तो फंक्शन सामान्य रूप से काम करता है। लेकिन किसी भी स्थिति में उपयोगकर्ता फंक्शन के रिटर्न मान के समान इनपुट प्रदान करता है, तो सशर्त ट्रू हो जाता है और आउटपुट उत्पन्न होता है।

पिन और पासवर्ड जैसी महत्वपूर्ण और गोपनीय जानकारी को संभालने के मामले में इसका उपयोग करना बहुत खतरनाक है। इसे पायथन 2.x में प्रदान किए गए raw_input() का उपयोग करके दूर किया जा सकता है।

उपरोक्त दो चित्रणों से, यह काफी स्पष्ट है कि input फंक्शन प्रोग्राम को सीधे वेरिएबल अटैक के लिए तैयार करता है।

निष्कर्ष

इस लेख में, हमने पायथन 2.x में input() फंक्शन का उपयोग करते समय आने वाले सभी मुद्दों और खामियों के बारे में सीखा।

  1. पायथन टिंकर में फ़ंक्शन बाइंडिंग पायथन टिंकर में फ़ंक्शन बाइंडिंग

    पायथन में टिंकर एक GUI लाइब्रेरी है जिसका उपयोग विभिन्न GUI प्रोग्रामिंग के लिए किया जा सकता है। ऐसे एप्लिकेशन डेस्कटॉप एप्लिकेशन बनाने के लिए उपयोगी होते हैं। इस लेख में हम GUI प्रोग्रामिंग के एक पहलू को देखेंगे जिसे बाइंडिंग फ़ंक्शन कहा जाता है। यह इवेंट को फ़ंक्शन और मेथड से बांधने के बारे में है

  1. पायथन में issubset() फंक्शन पायथन में issubset() फंक्शन

    इस लेख में, हम पायथन स्टैंडर्ड लाइब्रेरी में उपलब्ध issubset() फंक्शन के कार्यान्वयन और उपयोग के बारे में जानेंगे।issubset() मेथड बूलियन True वापस करता है जब एक सेट के सभी तत्व दूसरे सेट में मौजूद होते हैं (जिसे तर्क के रूप में पारित किया जाता है) अन्यथा, यह बूलियन False वापस करता है।नीचे दिए गए चित

  1. पायथन में intersection() फ़ंक्शन पायथन में intersection() फ़ंक्शन

    इस लेख में, हम intersection() फ़ंक्शन के बारे में सीखेंगे जिसे किसी भी दिए गए सेट पर किया जा सकता है। गणित के अनुसार, intersection का अर्थ दो सेट्स से सामान्य तत्वों को ढूंढना है। सिंटैक्स .intersection( ...) वापसी मान तर्क के रूप में पास किए गए सेट्स में सामान्य तत्व। उदाहरण set_1 = {t,u,t,o