0

我正在构建一个多用户 Web 应用程序。每个用户都可以在我的应用程序下拥有自己的站点。我正在考虑如何允许用户在没有安全问题的情况下修改模板?我已经评估了一些 python 模板引擎。例如,genshi,它是一个非常棒的模板引擎,但是允许用户修改 genshi 模板可能是危险的。它有这样的语法:

<?python

?>

这种语法允许你运行任何你想要 python 可以做的事情。我注意到它似乎可以通过传递一些参数来关闭。但仍有很多潜在的问题。例如,用户可以访问内置函数和传递变量的方法。例如,如果我将 ORM 对象传递给模板。它可能包含一些我不想让用户触摸它的方法和变量。可能是这样的:

site.metadata.connection.execute("drop table xxx")

所以我的问题是如何允许用户在没有安全问题的情况下修改他们网站的模板?可以使用任何 python 模板引擎。

谢谢。

4

4 回答 4

5

Jinja2 是一个具有沙盒功能的 Django 模板系统。我从未尝试过使用沙盒,但我非常喜欢 Jinja2 作为 Django 模板的替代品。它仍然促进模板与业务逻辑的分离,但有更多的 Pythonic 调用约定、命名空间等。

Jinja2 沙盒

于 2009-02-15T06:56:10.297 回答
1

看看Django 模板引擎。它不支持任意 python 代码的执行,所有可访问的变量都必须显式地传递到模板中。这应该是构建用户可定制页面的良好基础。请注意,您仍然需要处理用户偶尔的语法错误。

于 2009-02-15T05:18:01.577 回答
0

在铁轨中有一种叫做液体的东西。你可以看看那个以获得一些想法。另一个想法:至少,您可以做的一件事是将您的对象转换为简单的字典 - 类似于 json 表示,然后传递给您的模板。

于 2009-02-15T05:25:28.517 回答
-1

简短的回答可能是“你不能”。

您可能做的最好的事情就是将单个用户困在虚拟机或沙箱中。

于 2009-02-15T04:49:51.097 回答