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

इनपुट () फ़ंक्शन में पायथन भेद्यता

इस लेख में, हम संस्करण 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 में इनपुट () फ़ंक्शन का उपयोग करते समय सभी मुद्दों और खामियों का क्या सामना करना पड़ता है। जरूरत है।


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

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

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

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

  1. इंटरसेक्शन () फ़ंक्शन पायथन

    इस लेख में, हम चौराहे () फ़ंक्शन के बारे में जानेंगे जो किसी दिए गए सेट पर किया जा सकता है। गणित के अनुसार प्रतिच्छेदन का अर्थ है दो समुच्चयों से उभयनिष्ठ तत्वों का पता लगाना। सिंटैक्स <set name>.intersection(<set a1> <set a2> ……..) रिटर्न वैल्यू सेट में सामान्य त