EVAL()。这有危险吗?

时间:2016-11-30 09:01:31

标签: python python-2.7 internationalization eval rm

好吧,几乎每个人都说eval是邪恶的,99%的情况都是如此......但我在这里问一些代码我和#39; ve写道使用eval,SO,这有危险吗?

我尽可能地尽可能地清理数据,同时保持原有的功能,但是这会使用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 /或类似的,但是,因为我的代码删除了LANG var&的最后5个字符在开头添加LP.,在结尾添加(),结果是这样的,没有提到它从头开始检查字符串的最后5个字符是UTF-8,但如果我删除这种情况应该是"有害的"命令:

LP.rm -r()

到目前为止,我已经注意到任何超过5个字符的命令都无法绕过"删除最后5个字符"代码行,以及添加的LP.& ()应足以抵消任何伤害企图。

直到现在,我将保留" .UTF-8"避免任何严重错误...

1 个答案:

答案 0 :(得分:3)

我根本看不到eval的任何原因。

您正试图在LP上获取与LANGUAGE设置相对应的方法。因此,您可以使用getattr

meth = getattr(LP, Language)
result = meth()

请注意,没有必要多次执行rstrip内容:

lang = os.environ["LANG"].rstrip('''\n''')
if lang.endswith(".UTF-8"):
    ...
相关问题