在胖客户端桌面应用程序中,python的eval是否更安全

时间:2016-04-22 16:00:46

标签: python

在内部桌面应用程序中使用eval有多危险。我理解网络应用中的问题。这是桌面胖客户端应用程序中的一个问题。

我们有一个场景,我们允许用户使用内部DSL创建查询,并使用eval动态编译成python代码

1 个答案:

答案 0 :(得分:1)

正如评论所说,这取决于你所说的“安全”。从安全的角度来看,eval是所有希望的终结;一旦你拥有它,就没有回头路,用户可以做任何他想做的事。

例如

Consider

eval('(lambda fc=(lambda n: [c for c in ().__class__.__bases__[0].__subclasses__() if c.__name__ == n][0]): fc("function")(fc("code")(0,0,0,0,"KABOOM",(), (),(),"","",0,""),{})())()')

会破坏CPython2(参见?没有手!)。它也可能用猫图覆盖你的操作系统或解决NP与P并将你的电脑变成黑洞。关键是,一旦你可能允许用户提供的输入进入eval(),你就处于危险之中。甚至不要试图正确地逃避用户提供的输入。