如果我正在使用 eval() 评估 Python 字符串,并且有一个类似的类:
class Foo(object): a = 3 def bar(self, x): return x + a
如果我不信任该字符串,会有哪些安全风险?尤其是:
eval(string, {"f": Foo()}, {})
eval(string, {}, {})
有一些不安全的字符串,例如“[0] * 100000000”我不在乎,因为在最坏的情况下它们会减慢/停止程序。我主要关心保护程序外部的用户数据。
显然,eval(string)在大多数情况下,没有自定义词典是不安全的。
eval(string)
您无法使用这样的黑名单方法保护 eval。请参阅Eval对于会导致 CPython 解释器段错误、允许访问您喜欢的任何类等的输入示例确实很危险。