为了账号安全,请及时绑定邮箱和手机立即绑定

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

/ 猿问

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

幕布斯6054654 2019-07-22 09:40:28

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)没有自定义词典在大多数情况下是不安全的。


查看完整描述

3 回答

?
慕运维8079593

您不能用这样的黑名单方法来确保val的安全。看见伊瓦尔真的很危险对于将对CPython解释器进行分段故障的输入示例,请提供对您喜欢的任何类的访问,以此类推。


查看完整回答
反对 回复 2019-07-22
?
春华秋衣

你可以去os使用内置功能:__import__('os').

对于python 2.6+,AST模块可能有帮助;特别是ast.literal_eval虽然这完全取决于你想要的是什么。


查看完整回答
反对 回复 2019-07-22

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信