Python新型字符串格局缝隙分析 8090安适门户
本文对Python引入的一种格局化字符串的新型语法的安适缝隙进行了深入的分析,并供给了相应的安适解决方案。
当我们对不成信的用户输入使用str.format的时候,将会带来安适隐患——对付这个问题,其实我早就知道了,但是直到今天我才真正意识到它的严重性。因为打击者可以操作它来绕过Jinja2沙盒,这会造成严重的信息泄露问题。同时,我在本文最后部分为str.format供给了一个新的安适版本。
需要提醒的是,这是一个相当严重的安适隐患,这里之所以撰文介绍,是因为大大都人很可能不知道它是何等容易被操作。
核心问题
从Python 2.6开始,Python受.NET启发而引入了一种格局化字符串的新型语法。固然,除了Python之外,Rust及其他一些编程语言也撑持这种语法。借助于.format()要领,该语法可以应用到字节和unicode字符串(在Python 3中,只能用于unicode字符串)上面,别的,它还能映射为越发具有可定制性的string.Formatter API。
该语法的一个特点是,人们可以通过它确定出字符串格局的位置和关键字参数,并且随时可以显式对数据项从头排序。别的,它甚至可以访谒东西的属性和数据项——这是导致这里的安适问题的根来源根底因。
总的来说,人们可以操作它来进行以下工作:
本色上,任何能够控制格局字符串的人都有可能访谒东西的各类内部下性。
问题出在哪里?
第一个问题是,如何控制格局字符串。可以从下列处所下手:
1.字符串文件中不成信的翻译器。我们很可能通过它们到手,因为许多被翻译成多种语言的应用措施城市用到这种新式Python字符串格局化要领,但是并非所有人城市对输入的所有字符串进行全面的审查。
2.用户袒露的配置。 由于一些系统用户可以对某些行为进行配置,而这些配置有可能以格局字符串的形式被袒露出来。需要出格提示的是,我就见过某些用户可以通过Web应用措施来配置通知邮件、日志动静格局或其他根基模板。
危险品级
如果只是向该格局字符勾串报C解释器东西的话,却是不会有太大的危险,因为这样的话,你最多会袒露一些整数类之类的对象。
然而,一旦Python东西被通报给这种格局字符串的话,那就麻烦了。这是因为,能够从Python函数袒露的对象的数量是相当惊人的。 下面是假想的Web应用措施的情形,这种情况下能够泄露密钥:
如果用户可以在这里注入format_string,那么他们就能发明下面这样的奥秘字符串:
{event.__init__.__globals__[CONFIG][SECRET_KEY]}将格局化作沙箱化措置惩罚惩罚
那么,如果需要让其他人供给格局化字符串,那该怎么办呢? 其实,可以操作某些未果然的内部机制来转变字符串格局化行为。
温馨提示: 本文由杰米博客推荐,转载请保留链接: https://www.jmwww.net/file/pc/12748.html