【问题标题】:Is it (un)safe to let users edit email Django templates in your app for emails?让用户在您的电子邮件应用程序中编辑电子邮件 Django 模板是否(不)安全?
【发布时间】:2015-04-24 21:23:10
【问题描述】:

我正在 Django 中创建一个小型 SaaS 应用程序。它从不同组织的网络服务器收集数据。有时它会自动向其客户(域所有者)发送通知邮件。

我想让我们的用户(网络托管商)根据自己的喜好/需要更改电子邮件模板,然后再发送出去。电子邮件模板是普通的 Django 模板,包括许多可用的变量。所以,我为电子邮件模板创建了一个模型。用户可以通过表单对其进行编辑。每个电子邮件模板可以访问数量有限的模板变量。

是否有任何我需要注意的安全问题/风险?还是推荐这种方法。

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

【问题讨论】:

    标签: python django email templates


    【解决方案1】:

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

    render_to_string('template_name.txt', {'user': Users}) 会很糟糕:)

    【讨论】:

    • 感谢您的快速回复。到目前为止,我还没有找到任何直接的答案,因此,我发布了这个问题。
    • ...关于您的代码 sn-p,上下文设置为一组变量。用户只能使用该集合编辑“template_name.txt”。注射有什么危险吗?
    • 当然,如果您使用我的代码示例,他们可以“注入”user.objects.all 并获取所有用户信息。因此,唯一的危险是您在上下文变量中提供的内容。只要您小心,就不会有任何真正的风险。
    • 我现在使用 Pystache 来呈现电子邮件模板。这样,用户就有了一种更简单的方式来“编程”他们的电子邮件。我可以转义文本,并过滤任何标签。非常适合我。感谢您的回答。
    • 不知道你为什么要使用 Pystache...据我所见,这正是你使用 django 的渲染引擎所做的。
    【解决方案2】:

    这完全取决于评估模板的上下文,只要确保没有传递任何应该被视为私有的变量。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-17
      • 2011-05-03
      • 1970-01-01
      • 1970-01-01
      • 2010-12-18
      • 2011-01-04
      相关资源
      最近更新 更多