我想在 python raw_input 中分配一个字符串变量
I want to assign a string variable inside python raw_input
---现实---
a = "email@gmail.com"
b = raw_input()
> a # enter
结果:一个
---想要的答案---
a = "email@gmail.com"
b = raw_input()
> a # enter
结果:“电子邮件@gmail.com”
当我用它作为输入时,它正常工作,但是当我使用raw_input时,为什么会得到这样的结果?解决方案是什么?
谢谢。
如果你给输入,它被认为是字符串。
您可以使用字典来保存您的 e-mail,然后使用输入字符串作为键来获取值(Python3 代码):
your_dict = {'a': 'email@gmail.com'}
b = input()
print(your_dict[b])
#email@gmail.com
对于玩具问题,只需使用 input()
。这相当于 eval(raw_input())
。即使您有可能不信任输入,也不要这样做。控制输入的任何人都可以在您的程序中执行任意代码。所以这是一个主要的安全漏洞。
为获得更安全的方法,请将您希望访问的所有值放入一个字典中,然后根据您的输入键入该字典。这样做的原因是用户只能 select 来自你给他们的预定义键。
例如
values = {'a': 1, 'b': 2}
key = raw_input()
result = values[key]
print(result)
中途之家可能会使用 globals()
或 locals()
。 globals()
returns 模块的全局字典,locals()
将所有局部变量收集到字典中。这将允许用户 select 任何一组名称中的任何名称。因此他们可能 select 您想保密的值。
例如
password = 'foo'
a = 1
b = 2
key = raw_input() # password would be a valid input here
result = vars()[key]
print(result) # so here we would leak the value of password
附带说明一下,您使用的是 Python 2。Python 2 早已过期,不再接收安全更新。理想情况下,所有新项目都应使用 Python 3 的最新版本之一(例如 3.10)。 Python 3只有input()
,但它的行为是Python中的raw_input()
2.
您通过 input() 函数收到的内容将是 string.so 您只是要求打印该字符串。
您可以从此处阅读有关 globals()
动态分配变量的更多信息。
How can you dynamically create variables?
您可以像这样使用 globals()
功能。
(对 Python 3 使用 input()
。)
a = "email@gmail.com"
print(globals()[input()])
一个
电子邮件@gmail.com
---现实---
a = "email@gmail.com"
b = raw_input()
> a # enter
结果:一个
---想要的答案---
a = "email@gmail.com"
b = raw_input()
> a # enter
结果:“电子邮件@gmail.com”
当我用它作为输入时,它正常工作,但是当我使用raw_input时,为什么会得到这样的结果?解决方案是什么?
谢谢。
如果你给输入,它被认为是字符串。
您可以使用字典来保存您的 e-mail,然后使用输入字符串作为键来获取值(Python3 代码):
your_dict = {'a': 'email@gmail.com'}
b = input()
print(your_dict[b])
#email@gmail.com
对于玩具问题,只需使用 input()
。这相当于 eval(raw_input())
。即使您有可能不信任输入,也不要这样做。控制输入的任何人都可以在您的程序中执行任意代码。所以这是一个主要的安全漏洞。
为获得更安全的方法,请将您希望访问的所有值放入一个字典中,然后根据您的输入键入该字典。这样做的原因是用户只能 select 来自你给他们的预定义键。
例如
values = {'a': 1, 'b': 2}
key = raw_input()
result = values[key]
print(result)
中途之家可能会使用 globals()
或 locals()
。 globals()
returns 模块的全局字典,locals()
将所有局部变量收集到字典中。这将允许用户 select 任何一组名称中的任何名称。因此他们可能 select 您想保密的值。
例如
password = 'foo'
a = 1
b = 2
key = raw_input() # password would be a valid input here
result = vars()[key]
print(result) # so here we would leak the value of password
附带说明一下,您使用的是 Python 2。Python 2 早已过期,不再接收安全更新。理想情况下,所有新项目都应使用 Python 3 的最新版本之一(例如 3.10)。 Python 3只有input()
,但它的行为是Python中的raw_input()
2.
您通过 input() 函数收到的内容将是 string.so 您只是要求打印该字符串。
您可以从此处阅读有关 globals()
动态分配变量的更多信息。
How can you dynamically create variables?
您可以像这样使用 globals()
功能。
(对 Python 3 使用 input()
。)
a = "email@gmail.com"
print(globals()[input()])
一个
电子邮件@gmail.com