django中模板的html自动转意方法


Posted in Python onMay 27, 2018

一、需求来源:

如果用户在文本框中填了一段<script>alert(xxx);</script>代码,然后我们还保存在了数据库中,下次模板加载数据的时候,将这段代码显示在浏览器,将会弹出一个警告框。因此,这是XSS(跨域脚本)攻击的一种方式,我们肯定不能允许这种事件发生,因此django默认给我们启动了自动转意的功能。将这段代码转换成普通的文本进行展示。

二、如何关闭:

你肯定会问既然自动转意可以关闭XSS漏洞为什么需要关闭呢?原因很简单,如果你数据库中保存了一段可信任的HTML代码,那么你肯定想将他插在页面文档中,这时候你肯定不想被当成字符串处理。这时候你就可以针对某些模块进行关闭,django提供了两种方式进行关闭:

对单独的变量,用safe过滤器为单独的变量关闭自动转意,比如:

这个data将会被转意:{{ data }}
这个data不会被转意:{{ data|safe }}

对模板块,可以使用autoescape进行统一管理,他有两个参数off和on分别用来关闭和打开自动转意,比如以下代码关闭一整段代码的自动转意:

{% autoescape off %}
 name: {{ name }}
 age: {{ age }}
{% endautoescape %}

以下代码先关闭自动转意再打开自动转意功能:

Auto-escaping is on by default. Hello {{ name }}
{% autoescape off %}
 This will not be auto-escaped: {{ data }}.
 Nor this: {{ other_data }}
 {% autoescape on %}
  Auto-escaping applies again: {{ name }}
 {% endautoescape %}
{% endautoescape %}

注意事项:autoescape标签的作用域不仅可以影响到当前模板还可以通过include标签以及block标签影响到其他的模板。这个一定要切记!

三:过滤器参数里的字符串常量的自动转意:

{{ data|default:"no data" }}

分析以上代码,如果视图函数提供了data数据,则会显示data,如果没有提供,则默认会显示no data。如果你要默认显示带有/,<,",',&也不会进行转意,因此如果你要显示3<1这样带有特殊字符的,将对html文档产生结构上的影响。但是你可以通过3<1这种方式,进行转意输出。

以上这篇django中模板的html自动转意方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python检测lvs real server状态
Jan 22 Python
Python获取央视节目单的实现代码
Jul 25 Python
python爬虫入门教程--HTML文本的解析库BeautifulSoup(四)
May 25 Python
tensorflow实现图像的裁剪和填充方法
Jul 27 Python
Python实现拷贝/删除文件夹的方法详解
Aug 29 Python
对PyQt5中的菜单栏和工具栏实例详解
Jun 20 Python
Django Aggregation聚合使用方法解析
Aug 01 Python
python实现广度优先搜索过程解析
Oct 19 Python
python selenium循环登陆网站的实现
Nov 04 Python
使用Python的networkx绘制精美网络图教程
Nov 21 Python
TensorFlow梯度求解tf.gradients实例
Feb 04 Python
python批量更改目录名/文件名的方法
Apr 18 Python
Django读取Mysql数据并显示在前端的实例
May 27 #Python
django加载本地html的方法
May 27 #Python
《与孩子一起学编程》python自测题
May 27 #Python
儿童python练习实例
May 27 #Python
django输出html内容的实例
May 27 #Python
Python中判断输入是否为数字的实现代码
May 26 #Python
用PyInstaller把Python代码打包成单个独立的exe可执行文件
May 26 #Python
You might like
真正面向对象编程:PHP5.01发布
2006/10/09 PHP
简单的PHP多图上传小程序代码
2011/07/17 PHP
php比较两个绝对时间的大小
2014/01/31 PHP
php中file_get_contents与curl性能比较分析
2014/11/08 PHP
Yii2压缩PHP中模板代码的输出问题
2018/08/28 PHP
PHP快速排序算法实现的原理及代码详解
2019/04/03 PHP
IE无法设置短域名下Cookie
2010/09/23 Javascript
js实现页面跳转重定向的几种方式
2014/05/29 Javascript
JavaScript学习笔记整理_简单实现枚举类型,扑克牌应用
2016/09/19 Javascript
JavaScript 函数节流详解及方法总结
2017/02/09 Javascript
用原生JS实现简单的多选框功能
2017/06/12 Javascript
利用Vue.js实现求职在线之职位查询功能
2017/07/03 Javascript
一个手写的vue放大镜效果
2019/08/09 Javascript
JS实现简易图片自动轮播
2020/10/16 Javascript
vue使用element-ui实现表单验证
2020/12/13 Vue.js
巧用Python装饰器 免去调用父类构造函数的麻烦
2012/05/18 Python
Python代码解决RenderView窗口not found问题
2016/08/28 Python
解决pycharm界面不能显示中文的问题
2018/05/23 Python
Python+Pandas 获取数据库并加入DataFrame的实例
2018/07/25 Python
python递归实现快速排序
2018/08/18 Python
使用Tensorflow实现可视化中间层和卷积层
2020/01/24 Python
python扫描线填充算法详解
2020/02/19 Python
Python爬虫爬取百度搜索内容代码实例
2020/06/05 Python
Python利用Faiss库实现ANN近邻搜索的方法详解
2020/08/03 Python
python中Django文件上传方法详解
2020/08/05 Python
分享unittest单元测试框架中几种常用的用例加载方法
2020/12/02 Python
浅析HTML5中的download属性使用
2019/03/13 HTML / CSS
京东奢侈品:全球奢侈品牌
2018/03/17 全球购物
软件工程师面试题
2012/06/25 面试题
安全生产承诺书
2014/03/26 职场文书
实习指导老师评语
2014/04/26 职场文书
机械系毕业生求职信
2014/05/28 职场文书
党员批评与自我批评发言
2014/10/02 职场文书
教师工作表现评语
2014/12/31 职场文书
学校党风廉政建设调研报告
2015/01/01 职场文书
JavaScript实现简单拖拽效果
2021/09/15 Javascript