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中为什么要用self探讨
Apr 14 Python
利用Python画ROC曲线和AUC值计算
Sep 19 Python
Python多进程原理与用法分析
Aug 21 Python
Python开发虚拟环境使用virtualenvwrapper的搭建步骤教程图解
Sep 19 Python
浅谈python下tiff图像的读取和保存方法
Dec 04 Python
Python中Numpy ndarray的使用详解
May 24 Python
PyQt5重写QComboBox的鼠标点击事件方法
Jun 25 Python
python操作gitlab API过程解析
Dec 27 Python
python统计字符的个数代码实例
Feb 07 Python
python之MSE、MAE、RMSE的使用
Feb 24 Python
PyCharm+Pipenv虚拟环境开发和依赖管理的教程详解
Apr 16 Python
Selenium+BeautifulSoup+json获取Script标签内的json数据
Dec 07 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
php导出csv数据在浏览器中输出提供下载或保存到文件的示例
2014/04/24 PHP
PHP 7.0.2 正式版发布
2016/01/08 PHP
yii2中结合gridview如何使用modal弹窗实例代码详解
2016/06/12 PHP
JS option location 页面跳转实现代码
2008/12/27 Javascript
jQuery + Flex 通过拖拽方式动态改变图片的代码
2011/08/03 Javascript
[JSF]使用DataModel处理表行事件的实例代码
2013/08/05 Javascript
js中精确计算加法和减法示例
2014/03/28 Javascript
jquery 根据name名获取元素的value值
2015/02/27 Javascript
jquery实现兼容IE8的异步上传文件
2015/06/15 Javascript
javascript 动态修改css样式方法汇总(四种方法)
2015/08/27 Javascript
学习javascript的闭包,原型,和匿名函数之旅
2015/10/18 Javascript
js倒计时抢购实例
2015/12/20 Javascript
动态加载css方法实现和深入解析
2017/01/18 Javascript
angular select 默认值设置方法
2017/06/23 Javascript
详解使用element-ui table组件的筛选功能的一个小坑
2018/11/02 Javascript
新手快速入门微信小程序组件库 iView Weapp
2019/06/24 Javascript
Javascript原型链及instanceof原理详解
2020/05/25 Javascript
Python socket编程实例详解
2015/05/27 Python
自己使用总结Python程序代码片段
2015/06/02 Python
12步入门Python中的decorator装饰器使用方法
2016/06/20 Python
通过pykafka接收Kafka消息队列的方法
2018/12/27 Python
python做反被爬保护的方法
2019/07/01 Python
去除python中的字符串空格的简单方法
2020/12/22 Python
前端隐藏出边界内容的实现方法
2016/04/14 HTML / CSS
HTML5使用DOM进行自定义控制示例代码
2013/06/08 HTML / CSS
UNDONE手表官网:世界领先的定制手表品牌
2018/11/13 全球购物
美国排名第一的葡萄酒俱乐部:Firstleaf Wine Club
2020/01/02 全球购物
统计学专业毕业生的自我评价分享
2013/11/28 职场文书
课改先进个人汇报材料
2014/01/26 职场文书
模范家庭事迹材料
2014/02/10 职场文书
幼儿园安全生产月活动总结
2014/07/05 职场文书
党的群众路线对照检查材料
2014/08/27 职场文书
简单租房协议书
2014/10/21 职场文书
毕业论文致谢信
2015/05/14 职场文书
2015年新农村建设工作总结
2015/05/22 职场文书
Python+Matplotlib图像上指定坐标的位置添加文本标签与注释
2022/04/11 Python