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将文本转换成图片输出的方法
Apr 28 Python
python通过索引遍历列表的方法
May 04 Python
shell命令行,一键创建 python 模板文件脚本方法
Mar 20 Python
Python实现合并同一个文件夹下所有txt文件的方法示例
Apr 26 Python
Python爬虫实现全国失信被执行人名单查询功能示例
May 03 Python
Python项目 基于Scapy实现SYN泛洪攻击的方法
Jul 23 Python
Python-接口开发入门解析
Aug 01 Python
利用 PyCharm 实现本地代码和远端的实时同步功能
Mar 23 Python
在python里使用await关键字来等另外一个协程的实例
May 04 Python
如何用python开发Zeroc Ice应用
Jan 29 Python
Python  Asyncio模块实现的生产消费者模型的方法
Mar 01 Python
Python中Schedule模块使用详解 周期任务神器
Apr 19 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常用代码
2006/11/23 PHP
PHP单例模式模拟Java Bean实现方法示例
2018/12/07 PHP
jquery制作多功能轮播图插件
2015/04/02 Javascript
强大Vue.js组件浅析
2016/09/12 Javascript
谈谈target=_new和_blank的不同之处
2016/10/25 Javascript
jQuery 插件封装的方法
2016/11/16 Javascript
微信小程序 配置文件详细介绍
2016/12/14 Javascript
JavaScript优化以及前段开发小技巧
2017/02/02 Javascript
微信小程序顶部可滚动导航效果
2017/10/31 Javascript
响应式框架Bootstrap栅格系统的实例
2017/12/19 Javascript
使用vue-router beforEach实现判断用户登录跳转路由筛选功能
2018/06/25 Javascript
从零开始学习搭建React脚手架项目
2018/08/23 Javascript
详解vue beforeRouteEnter 异步获取数据给实例问题
2019/08/09 Javascript
微信小程序之 catalog 切换实现解析
2019/09/12 Javascript
Vue实现多页签组件
2021/01/14 Vue.js
[01:34]DOTA2 7.22版本新增神杖效果一览(敏捷英雄篇)
2019/05/28 DOTA
Python的一些用法分享
2012/10/07 Python
python使用urllib模块和pyquery实现阿里巴巴排名查询
2014/01/16 Python
python目录与文件名操作例子
2016/08/28 Python
python正则分析nginx的访问日志
2017/01/17 Python
详解Django之admin组件的使用和源码剖析
2018/05/04 Python
Python爬虫——爬取豆瓣电影Top250代码实例
2019/04/17 Python
keras获得某一层或者某层权重的输出实例
2020/01/24 Python
使用Python快速打开一个百万行级别的超大Excel文件的方法
2021/03/02 Python
电气自动化大学生求职信
2013/10/16 职场文书
四年级语文教学反思
2014/02/05 职场文书
企业军训感言
2014/02/08 职场文书
个人借款担保书
2014/04/02 职场文书
文明之星事迹材料
2014/05/09 职场文书
李培根演讲稿
2014/05/22 职场文书
承诺书格式范文
2014/06/03 职场文书
学校副校长四风对照检查材料整改措施
2014/09/25 职场文书
2014年电话客服工作总结
2014/12/09 职场文书
学校推普周活动总结
2015/05/07 职场文书
22句经典语录:送给优柔寡断和胡思乱想的朋友们
2019/12/13 职场文书
基于Redis延迟队列的实现代码
2021/05/13 Redis