让用户在您的电子邮件应用程序中编辑电子邮件 Django 模板是否(不)安全?
Is it (un)safe to let users edit email Django templates in your app for emails?
我正在 Django 中创建一个小型 SaaS 应用程序。它从不同组织的网络服务器收集数据。有时它需要自动向他们的客户(域所有者)发送通知邮件。
我想让我们的用户(网站托管商)在发送之前将电子邮件模板更改为他们的likings/needs。电子邮件模板是普通的 Django 模板,包括许多可用变量。因此,我为电子邮件模板创建了一个模型。用户可以通过表单对其进行编辑。他们可以访问每个电子邮件模板的有限数量的模板变量。
有什么我需要注意的安全问题 issues/risks 吗?或者是否推荐这种方法。
我的方法目前针对电子邮件的服务器端呈现。我还检查了一些用于客户端呈现的解决方案,例如 Dust.js,但我还不确定它是否会对我有所帮助。
我相信这里已经有很多关于这个的答案;但总结一下我发现的内容:"safe" 这样做,但要注意 variables/objects 您向用户公开的内容(即包含在要呈现的模板的上下文中)。
render_to_string('template_name.txt', {'user': Users})
会很糟糕:)
这完全取决于评估模板的上下文,只要确保没有传递应被视为私有的变量即可。
此外,如果在 Django 模板系统中发现安全漏洞,您的 Web 应用程序将面临风险。您必须验证输入,但您不能真正做到这一点,因为输入没有任何特定结构。
因此,如果可以的话,请尝试将应用程序其余部分的进程沙盒化。或者简单地问问自己是否真的需要此功能,以及您是否不能让用户使用清单或类似的东西指定要在消息中包含的内容。到那时,验证输入变得微不足道,您不必向用户公开完整的模板。
我正在 Django 中创建一个小型 SaaS 应用程序。它从不同组织的网络服务器收集数据。有时它需要自动向他们的客户(域所有者)发送通知邮件。
我想让我们的用户(网站托管商)在发送之前将电子邮件模板更改为他们的likings/needs。电子邮件模板是普通的 Django 模板,包括许多可用变量。因此,我为电子邮件模板创建了一个模型。用户可以通过表单对其进行编辑。他们可以访问每个电子邮件模板的有限数量的模板变量。
有什么我需要注意的安全问题 issues/risks 吗?或者是否推荐这种方法。
我的方法目前针对电子邮件的服务器端呈现。我还检查了一些用于客户端呈现的解决方案,例如 Dust.js,但我还不确定它是否会对我有所帮助。
我相信这里已经有很多关于这个的答案;但总结一下我发现的内容:"safe" 这样做,但要注意 variables/objects 您向用户公开的内容(即包含在要呈现的模板的上下文中)。
render_to_string('template_name.txt', {'user': Users})
会很糟糕:)
这完全取决于评估模板的上下文,只要确保没有传递应被视为私有的变量即可。
此外,如果在 Django 模板系统中发现安全漏洞,您的 Web 应用程序将面临风险。您必须验证输入,但您不能真正做到这一点,因为输入没有任何特定结构。
因此,如果可以的话,请尝试将应用程序其余部分的进程沙盒化。或者简单地问问自己是否真的需要此功能,以及您是否不能让用户使用清单或类似的东西指定要在消息中包含的内容。到那时,验证输入变得微不足道,您不必向用户公开完整的模板。