noi*_*oio 7 security django django-templates
让用户使用一组预定义的变量制作自己的Django模板,然后在服务器上渲染这个模板是否安全?我只会传递一组非常有限的参数render,所有参数都是字符串.模板将是这样的:
hey, my name is {{name}}.
Run Code Online (Sandbox Code Playgroud)
所以,问题是,是否有任何django模板标签可以被滥用来获取用户不应该得到的信息?我最担心的是{% url %}标签.
在填写标题后我注意到了这个问题,但是,我的问题略有不同.我可能根本不允许使用HTML/javascript,使用Textile/Markdown,或者找到一种方法将HTML限制为一组非常基本的标签.
有三个主要风险:
用户修改数据.例如,渲染{{ request.user.kill }}将kill()在值查找期间触发调用.为防止这种情况,您应该kill.alters_data = True在模型代码中进行设置.所有修改数据的内置模型方法都已标记,因此风险仅与您自己的方法或由写得不好的第三方应用程序提供的方法相关联.
用户直接访问他们看不到的数据.何时RequestContext使用(大多数情况下),模板渲染上下文中添加了许多变量.添加用户定义的模板,您将获得非常危险的混合,因为用户可以查看任何上下文处理器添加的任何内容.
访问数据的用户不应通过关系查看.当您将模型实例传递给模板时,它的关系可以比您预期的更进一步: {{ current_user.corporate_account.owner.ssn }} Oops ...一个好的预防措施是仔细检查您的模型关系,以确保您不会暴露敏感的东西.
总的来说,只要您了解上述风险并将用户提供的字符串与常规模板分开呈现,我就会说它是安全的.并确保您明确禁止{% debug %}, {% include %}. {% ssi %}模板标签,因为它们可以泄露相当敏感的信息.也许你可以安全地玩,只允许变量和过滤器,并完全禁止控制标签.
| 归档时间: |
|
| 查看次数: |
1509 次 |
| 最近记录: |