input()函数中的Python漏洞
在本文中,我们将学习在版本2.x中输入函数如何以不良方式运行。或更早。在2.x版中。raw_input()函数可替换该input()
函数。在较新的版本3.x中。或稍后,将两个功能的所有所需特征和功能合并到该input()
方法中。
首先,让我们看一下在Python2.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 ("你猜对了。") break else: print ("OOPS! try it next time.") continue
解释-如果用户提供整数输入,则将根据条件表达式计算所需的输出。
如果用户提供了一个字符串输入,即与变量名相同,在该变量名中我们使用random模块存储了由色子生成的随机整数,那么还将计算输出。但这不一定是我们要计算的期望输出。实际上,当输入字符串时,它必须引发一个错误,错误的输入类型。它认为变量名称等效于用户直接输入的数字,该表达式产生True布尔值,游戏结束。相反,如果我改用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"
说明
正如我们在前面的ILLUSTRATION中讨论的那样,如果提供的输入为整数类型,则该函数正常工作。但是在任何情况下,用户提供与函数的返回值相同的输入,条件变为True并产生输出。
在处理重要且机密的信息(例如密码和密码)的情况下使用,这非常危险。这可以通过使用Python2.x中提供的raw_input()来克服。
从以上两个说明中可以很明显地看出,输入函数使程序可以直接进行变量攻击。
结论
在本文中,我们了解了input()
在Python2.x中使用该函数时遇到的所有问题和漏洞。需要。