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设计模式编程中对抽象工厂模式的运用
Mar 02 Python
Linux下通过python访问MySQL、Oracle、SQL Server数据库的方法
Apr 23 Python
用yum安装MySQLdb模块的步骤方法
Dec 15 Python
python用模块zlib压缩与解压字符串和文件的方法
Dec 16 Python
django站点管理详解
Dec 12 Python
创建Django项目图文实例详解
Jun 06 Python
python 读取修改pcap包的例子
Jul 23 Python
Flask框架模板继承实现方法分析
Jul 31 Python
kafka-python 获取topic lag值方式
Dec 23 Python
Matplotlib自定义坐标轴刻度的实现示例
Jun 18 Python
python 实现&quot;神经衰弱&quot;翻牌游戏
Nov 09 Python
Python 绘制多因子柱状图
May 11 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
手冲咖啡应该是现代精品咖啡店的必备选项吗?
2021/03/03 冲泡冲煮
详解PHP中的Traits
2015/07/29 PHP
详解PHP的Yii框架中组件行为的属性注入和方法注入
2016/03/18 PHP
实例讲解通过​PHP创建数据库
2019/01/20 PHP
Prototype RegExp对象 学习
2009/07/19 Javascript
zeroclipboard复制到剪切板的flash
2010/08/04 Javascript
给页面渲染时间加速 干掉Dom Level 0 Event
2012/12/19 Javascript
JS实现模仿微博发布效果实例代码
2013/12/16 Javascript
JavaScript实现设计模式中的单例模式的一些技巧总结
2016/05/17 Javascript
jQuery EasyUI 入门必看
2016/06/03 Javascript
原生js实现class的添加和删除简单代码
2016/07/12 Javascript
一个仿微博登陆邮箱提示框js开发案例
2016/07/28 Javascript
jQuery替换节点用法示例(使用replaceWith方法)
2016/09/08 Javascript
angular基于路由控制ui-router实现系统权限控制
2016/09/27 Javascript
详解mpvue scroll-view自动回弹bug解决方案
2018/10/01 Javascript
jQuery内容过滤选择器与子元素过滤选择器用法实例分析
2019/02/20 jQuery
[06:23]2014DOTA2西雅图国际邀请赛 小组赛7月12日TOPPLAY
2014/07/12 DOTA
实例说明Python中比较运算符的使用
2015/05/13 Python
Python实现计算两个时间之间相差天数的方法
2017/05/10 Python
使用python serial 获取所有的串口名称的实例
2019/07/02 Python
对python中url参数编码与解码的实例详解
2019/07/25 Python
浅谈keras.callbacks设置模型保存策略
2020/06/18 Python
python按顺序重命名文件并分类转移到各个文件夹中的实现代码
2020/07/21 Python
武汉东之林科技有限公司机试
2013/09/17 面试题
一套带网友答案的.NET笔试题
2016/12/06 面试题
工厂门卫岗位职责
2013/11/25 职场文书
党员批评与自我批评
2014/02/12 职场文书
争当四好少年演讲稿
2014/09/13 职场文书
党员学习群众路线心得体会
2014/11/04 职场文书
2014年护士工作总结范文
2014/11/11 职场文书
社区安全温馨提示语
2015/07/14 职场文书
暑假生活随笔
2015/08/15 职场文书
关于mysql中时间日期类型和字符串类型的选择
2021/11/27 MySQL
Java并发编程之原子性-Atomic的使用
2022/03/16 Java/Android
微信小程序 根据不同用户切换不同TabBar
2022/04/21 Javascript
Mysql表数据比较大情况下修改添加字段的方法实例
2022/06/28 MySQL