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 相关文章推荐
举例讲解Django中数据模型访问外键值的方法
Jul 21 Python
详解Python中的Descriptor描述符类
Jun 14 Python
Python中 Lambda表达式全面解析
Nov 28 Python
Python实现的rsa加密算法详解
Jan 24 Python
python如何读写json数据
Mar 21 Python
python使用tensorflow深度学习识别验证码
Apr 03 Python
PyQt5每天必学之QSplitter实现窗口分隔
Apr 19 Python
python3+PyQt5+Qt Designer实现堆叠窗口部件
Apr 20 Python
Python selenium模块实现定位过程解析
Jul 09 Python
python操作toml文件的示例代码
Nov 27 Python
python的scipy.stats模块中正态分布常用函数总结
Feb 19 Python
Python进阶学习之带你探寻Python类的鼻祖-元类
May 08 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
Yii实现复选框批量操作实例代码
2017/03/15 PHP
Aster vs KG BO3 第二场2.18
2021/03/10 DOTA
javascript实现的鼠标链接提示效果生成器代码
2007/06/28 Javascript
JQuery实现的在新窗口打开链接的方法小结
2010/04/22 Javascript
自写的一个jQuery圆角插件
2010/10/26 Javascript
一个javascript图片阅览组件
2010/11/09 Javascript
js下将字符串当函数执行的方法
2011/07/13 Javascript
jquery ajax请求实例深入解析
2012/11/26 Javascript
JS文本框默认值处理详解
2013/07/10 Javascript
Jquery遍历节点的方法小集
2014/01/22 Javascript
jQuery读取XML文件内容的方法
2015/03/09 Javascript
微信小程序 购物车简单实例
2016/10/24 Javascript
javascript中Number的方法小结
2016/11/21 Javascript
w3c编程挑战_初级脚本算法实战篇
2017/06/23 Javascript
canvas轨迹回放功能实现
2017/12/20 Javascript
js变量值传到php过程详解 将php解析成数据
2019/06/26 Javascript
浅谈Vue组件单元测试究竟测试什么
2020/02/05 Javascript
JS实现移动端可折叠导航菜单(现代都市风)
2020/07/07 Javascript
react-intl实现React国际化多语言的方法
2020/09/27 Javascript
解决vue打包报错Unexpected token: punc的问题
2020/10/24 Javascript
vant 解决tab切换插件标题样式自定义的问题
2020/11/13 Javascript
python将字符串转换成数组的方法
2015/04/29 Python
Python3中的2to3转换工具使用示例
2015/06/12 Python
python中类和实例如何绑定属性与方法示例详解
2017/08/18 Python
Python使用Selenium模块模拟浏览器抓取斗鱼直播间信息示例
2018/07/18 Python
python通过ffmgep从视频中抽帧的方法
2018/12/05 Python
StubHub哥伦比亚:购买和出售您的门票
2016/10/20 全球购物
Born鞋子官网:Born Shoes
2017/04/06 全球购物
Zooplus罗马尼亚:宠物食品和配件
2019/11/02 全球购物
俄罗斯设计师家具购物网站:The Furnish
2019/12/01 全球购物
如果Session Bean得Remove方法一直都不被调用会怎么样
2012/07/14 面试题
建龙钢铁面试总结
2014/04/15 面试题
英文自荐信格式
2013/11/28 职场文书
学校节水倡议书
2015/04/29 职场文书
反腐倡廉主题教育活动总结
2015/05/07 职场文书
2016教师政治学习心得体会
2016/01/23 职场文书