Django是否有类似Rails的安全用户可编辑模板语言?
Django有没有一种用户可以编辑的模板语言,像Rails的Liquid那样安全?
也就是说,普通用户不能通过修改模板代码来输出一些危险的内容,从而攻击网站。
2 个回答
1
Liquid 是从 Django 的模板语言发展而来的,所以答案是肯定的。你可以渲染用户提交的模板,并按照自己的方式处理它们。不过,安全性是开发者需要关注的问题。如果你想让用户输入的内容直接影响你的程序,而不进行清理和验证,模板工具是无法保护你的。
这里有一些不错的阅读材料:
http://www.djangobook.com/en/2.0/chapter04/
http://www.djangobook.com/en/2.0/chapter09/
http://loopj.com/2009/05/23/a-django-developers-views-on-rails/
2
如果你正确使用模板语言:是的。
看看Django的模板标签和过滤器:
- http://docs.djangoproject.com/en/1.2/ref/templates/builtins/#escape
- http://docs.djangoproject.com/en/1.2/ref/templates/builtins/#autoescape
- http://docs.djangoproject.com/en/1.2/ref/templates/builtins/#escapejs
举个例子:
{{ evil_userinput }}
这段代码会直接打印出用户输入的内容。
{{ evil_userinput|escape }}
这段代码会对所有的HTML实体进行转义,这样就无法在你的HTML页面中插入危险的代码了。