2015-02-23 82 views
3

我在Django中创建了一个小型SaaS应用程序。它收集来自不同组织的网络服务器的数据。偶尔它会自动发送通知邮件给他们的客户(域名所有者)。让用户编辑电子邮件中应用程序中的电子邮件Django模板是否安全?

我想让我们的用户(主持人)在发送邮件之前将电子邮件模板更改为他们的喜好/需求。电子邮件模板是普通的Django模板,包括一些可用的变量。所以,我为电子邮件模板创建了一个模型。用户可以通过表单进行编辑。每个电子邮件模板都可以访问有限数量的模板变量。

我需要注意哪些安全问题/风险?或者是建议这种方法。

我的方法目前是针对电子邮件的服务器端渲染。我还检查了一些客户端渲染解决方案,比如Dust.js,但我还不确定它会对我有帮助。

回答

0

我相信这里已经有很多答案了,但要总结一下我发现的东西:这样做是“安全的”,但要小心你向用户公开的变量/对象(即包含在要呈现的模板上下文中)。

render_to_string('template_name.txt', {'user': Users})将是非常糟糕的:)

+0

感谢您的快速回复。直到现在,我还没有找到任何直接的答案,因此,我发布了这个问题。 – 2015-02-23 14:41:59

+0

...关于你的代码片段,上下文被设置为一组变量。用户只能使用该组来编辑'template_name.txt'。注射有危险吗? – 2015-02-23 14:43:21

+0

当然,如果您使用我的代码示例,他们可以'注入'user.objects.all并获取所有用户信息。所以唯一的危险是你在上下文变量中提供的内容。只要你小心,不应该有任何真正的风险。 – 2015-02-23 15:21:56

-1

这一切都取决于其中的模板将被评估的情况下,只要确保不变量传递应考虑私有。

此外,如果在Django模板系统中发现安全错误,您的Web应用程序将面临风险。你将不得不验证输入,但你不能这样做,因为输入没有任何特定的结构。

因此,如果可以的话,尝试从应用程序的其余部分进行沙盒处理。或者只是问问自己,这个功能是否真的有必要,如果你不能通过使用清单或类似的东西让用户指定包含在信息中的内容。此时,验证输入变得微不足道,您不必将完整的模板公开给用户。