【发布时间】:2016-11-30 09:01:31
【问题描述】:
嗯,几乎每个人都说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 类中的一些方法。
我已经尝试弄乱我的电脑,试图将我的LANG 系统变量更改为任何可能损害我的电脑的字符串,例如rm -rf / 或类似的,但是,因为我的代码删除了最后 5 个字符LANG var & 在开头添加LP. 并在末尾添加(),结果是这样的,没有提到它从头开始检查字符串的最后5个字符是否为UTF-8,但是如果我删除它条件这应该是“有害”命令:
LP.rm -r()
到目前为止,我已经注意到任何超过 5 个字符的命令都无法绕过“删除最后 5 个字符”的代码行,并且添加的 LP. 和 () 应该足以抵消任何企图伤害。
到目前为止,我会保留“.UTF-8”以避免任何严重错误...
【问题讨论】:
标签: python python-2.7 internationalization eval rm