Mako templates and security
我有一个将模板放入数据库中的想法,并为设计人员提供了直接从CMS面板编辑模板的可能性。 但是困扰我的是安全问题。 如果我们能够直接在模板中放置python命令,那怎么可能是安全的。 如果我在mako模板中有这样的内容:
1 2 3 4 5 | <%! import os os.system('rm /var/www/env/harmless.txt') %> |
它将成功执行,并且harmless.txt将被删除。 我应该寻找除Mako之外的其他模板引擎,还是可以以某种方式配置Mako以防止有害代码注入? 另一方面,在模板中使用某些python命令非常有用,例如内联if语句。
仍有可能做您想做的事。 mako引擎可让您将预处理器添加到模板。我目前无法测试,因此无法确定,但是您可能会遇到类似以下情况:
此处:http://docs.makotemplates.org/en/latest/usage.html#mako.template.Template.params.preprocessor
1 2 3 4 5 | def removeImports(source): # remove whatever you don't want inside the template return new_source tpl = Template(...., preprocessor=removeImports) |
如果您使用的是
出于安全考虑,如果您想采用这种方式,因为我个人认为Mako是非常好的引擎。您应该在预处理器上做一组很好的测试用例。我非常确定可以在内联python
因此,如果您担心要在模板中运行python,可以考虑使用其他模板,例如Chameleon,Jinja2 ...
如果他们有自己的CMS单独实例,那就像Loic指出的一样。但是,如果它们处于某些共享环境中,则最好使用另一个模板引擎。问题Python中的不受信任的模板-使用什么安全库?建议使用Django模板和Jinja2。