我正在构建一个多用户Web应用程序。每个用户都可以在我的应用程序下拥有自己的站点我正在考虑如何允许用户修改模板而没有安全问题?我已经评估了一些python模板引擎。例如,genshi,它是一个非常精彩的模板引擎,但是允许用户修改genshi模板可能是危险的。它有这样的语法:
<?python
?>
这种语法允许你运行python可以做的任何事情。我注意到它似乎可以通过传递一些参数来关闭。但仍存在许多潜在问题。例如,用户可以访问内置函数和传递变量的方法。例如,如果我将ORM对象传递给模板。它可能包含一些我不想让用户触摸它的方法和变量。可能是这样的:
site.metadata.connection.execute("drop table xxx")
所以我的问题是如何在没有安全问题的情况下允许用户修改其网站的模板?可以使用任何python模板引擎。
感谢。
答案 0 :(得分:4)
Jinja2是一个具有沙盒功能的Django-ish模板系统。我从未试图使用沙盒,但我非常喜欢Jinja2作为Django模板的替代品。它仍然促进模板与业务逻辑的分离,但具有更多的Pythonic调用约定,命名空间等。
答案 1 :(得分:1)
看看Django templte engine。它不支持执行任意python代码,所有可访问的变量必须传递给模板明确。这应该是构建用户可自定义页面的良好基础。请注意,您仍然需要处理来自用户的偶然语法错误。
答案 2 :(得分:0)
在rails中有一些名为liquid的东西。您可以看看它以获得一些想法。另一个想法:至少,你可以做的一件事是将你的对象转换成简单的字典 - 比如json表示,然后传递给你的模板。
答案 3 :(得分:-1)
简短的回答可能是“你做不到”。
您可以做的最好的事情是将各个用户捕获到虚拟机或沙箱中。