13.6 为什么执行exec()没有问题
之前的节中讨论了eval(),需要对exec()做同样的考虑。
一般地,globals()的可用集合被严格控制了。对os模块或import()函数的访问,可通过将它们从globals中移除来代替,globals提供给了exec()。
如果有恶意程序员要破坏配置文件,记住他们对所有的Python源文件都是有访问权限的。那么,他们为什么要浪费时间来修改配置,而不直接去改代码?
一个常见的问题是:“如果有人认为,他们可以通过配置文件注入代码进而修改补丁破坏应用程序,那么会怎样呢?”这个人只是在迫使应用的其他部分更聪明。避免使用Python配置文件不能够阻止恶意程序员使用不明智的方式做一些事情。当然还有很多潜在的缺点,完全不担心exec()函数就使用的话不会带来实际好处。
在一些情况下,有必要改变全局的结构。一个高度可自定义的应用可能实际上是一个框架,而不是一个简洁的、完整的应用。
