Python在不受信任字符串上的val()安全性?

Python在不受信任字符串上的val()安全性?

如果我正在使用val()计算Python字符串,并且有一个类,如下所示:

class Foo(object):
    a = 3
    def bar(self, x): return x + a

如果我不信任字符串,安全风险是什么?特别是:

  1. eval(string, {"f": Foo()}, {})

    不安全?也就是说,您能从foo实例中找到os或sys或不安全的东西吗?
  2. eval(string, {}, {})

    不安全?也就是说,我可以完全从len和list之类的内置程序中访问os或sys吗?
  3. 是否有一种方法可以使内建物在val上下文中完全不存在?

有一些不安全的字符串,如“[0]*100000000”,我不关心,因为最坏的情况下,它们会减慢/停止程序。我主要关心的是保护程序外部的用户数据。

显然,eval(string)没有自定义词典在大多数情况下是不安全的。


幕布斯6054654
浏览 625回答 3
3回答

慕运维8079593

您不能用这样的黑名单方法来确保val的安全。看见伊瓦尔真的很危险对于将对CPython解释器进行分段故障的输入示例,请提供对您喜欢的任何类的访问,以此类推。
打开App,查看更多内容
随时随地看视频慕课网APP