评估()。这很危险吗?
EVAL(). Is this dangerous?
好吧,几乎所有人都说 eval
是邪恶的,这在 99% 的情况下都是正确的...但我来这里是想问一下我写的一些代码使用 eval
,所以,这很危险吗?
我尝试尽可能多地清理数据,同时保持原始功能,但这利用了 eval
并且可能会出错:
import os
try:
if os.environ["LANG"].rstrip('''\n''')[5:] == ".UTF-8":
Language = str(os.environ["LANG"].rstrip('''\n''').rstrip(os.environ["LANG"].rstrip('''\n''')[5:]))
eval (str("LP." + Language + "()"))
else:
raise Exception("Not an UTF-8 locale")
except KeyError:
LP.Fallback()
except AttributeError:
LP.Fallback()
首先,这段代码应该运行 在 UNIX 和派生系统下。
写在 python2.7.
这是调用LP
class中的一些方法。
我已经尝试将我的 LANG
系统变量更改为任何可能损害我的 PC 的字符串,例如 rm -rf /
或类似的字符串,但是,因为我的代码删除了LANG
var & 的最后 5 个字符在开头添加 LP.
并在结尾添加 ()
,结果是这样的,没有提到它从头开始检查是否最后 5 个字符字符串是 UTF-8
,但如果我删除那个条件,这应该是 "harmful" 命令:
LP.rm -r()
到目前为止,我注意到任何超过 5 个字符的命令都无法绕过 "remove last 5 characters" 代码行,并且添加的 LP.
& ()
应该足以抵消任何伤害企图。
到现在为止,我将保留“.UTF-8”以避免任何严重错误...
我在这里根本看不出 eval
的任何理由。
您正在尝试获取 LP
上与 LANGUAGE 设置相对应的方法。所以,你可以使用 getattr
:
meth = getattr(LP, Language)
result = meth()
请注意,无需多次执行 rstrip
操作:
lang = os.environ["LANG"].rstrip('''\n''')
if lang.endswith(".UTF-8"):
...
好吧,几乎所有人都说 eval
是邪恶的,这在 99% 的情况下都是正确的...但我来这里是想问一下我写的一些代码使用 eval
,所以,这很危险吗?
我尝试尽可能多地清理数据,同时保持原始功能,但这利用了 eval
并且可能会出错:
import os
try:
if os.environ["LANG"].rstrip('''\n''')[5:] == ".UTF-8":
Language = str(os.environ["LANG"].rstrip('''\n''').rstrip(os.environ["LANG"].rstrip('''\n''')[5:]))
eval (str("LP." + Language + "()"))
else:
raise Exception("Not an UTF-8 locale")
except KeyError:
LP.Fallback()
except AttributeError:
LP.Fallback()
首先,这段代码应该运行 在 UNIX 和派生系统下。
写在 python2.7.
这是调用LP
class中的一些方法。
我已经尝试将我的 LANG
系统变量更改为任何可能损害我的 PC 的字符串,例如 rm -rf /
或类似的字符串,但是,因为我的代码删除了LANG
var & 的最后 5 个字符在开头添加 LP.
并在结尾添加 ()
,结果是这样的,没有提到它从头开始检查是否最后 5 个字符字符串是 UTF-8
,但如果我删除那个条件,这应该是 "harmful" 命令:
LP.rm -r()
到目前为止,我注意到任何超过 5 个字符的命令都无法绕过 "remove last 5 characters" 代码行,并且添加的 LP.
& ()
应该足以抵消任何伤害企图。
到现在为止,我将保留“.UTF-8”以避免任何严重错误...
我在这里根本看不出 eval
的任何理由。
您正在尝试获取 LP
上与 LANGUAGE 设置相对应的方法。所以,你可以使用 getattr
:
meth = getattr(LP, Language)
result = meth()
请注意,无需多次执行 rstrip
操作:
lang = os.environ["LANG"].rstrip('''\n''')
if lang.endswith(".UTF-8"):
...