在内部桌面应用程序中使用eval有多危险。我理解网络应用中的问题。这是桌面胖客户端应用程序中的一个问题。
我们有一个场景,我们允许用户使用内部DSL创建查询,并使用eval动态编译成python代码
答案 0 :(得分:1)
正如评论所说,这取决于你所说的“安全”。从安全的角度来看,eval
是所有希望的终结;一旦你拥有它,就没有回头路,用户可以做任何他想做的事。
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()
,你就处于危险之中。甚至不要试图正确地逃避用户提供的输入。