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 错误和异常小结
Oct 09 Python
python实现博客文章爬虫示例
Feb 26 Python
Python的SQLAlchemy框架使用入门
Apr 29 Python
python选择排序算法实例总结
Jul 01 Python
用Python下载一个网页保存为本地的HTML文件实例
May 21 Python
python多进程使用及线程池的使用方法代码详解
Oct 24 Python
Django管理员账号和密码忘记的完美解决方法
Dec 06 Python
django与vue的完美结合_实现前后端的分离开发之后在整合的方法
Aug 12 Python
Python3操作Excel文件(读写)的简单实例
Sep 02 Python
python绘制规则网络图形实例
Dec 09 Python
Python爬虫实现HTTP网络请求多种实现方式
Jun 19 Python
Python 阶乘详解
Oct 05 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框架Session与Cookie使用方法示例
2019/10/14 PHP
web的各种前端打印方法之jquery打印插件PrintArea实现网页打印
2013/01/09 Javascript
js获取页面及个元素高度、宽度的代码
2016/04/26 Javascript
判断是否存在子节点的实现代码
2016/05/18 Javascript
JavaScript必知必会(二) null 和undefined
2016/06/08 Javascript
JS定时器实现数值从0到10来回变化
2016/12/09 Javascript
解决同一页面中两个iframe互相调用jquery,js函数的方法
2016/12/12 Javascript
Javascript中return的使用与闭包详解
2017/01/11 Javascript
用move.js库实现百叶窗特效
2017/02/08 Javascript
BootStrap实现鼠标悬停下拉列表功能
2017/02/17 Javascript
js实现文字跑马灯效果
2017/02/23 Javascript
Vue写一个简单的倒计时按钮功能
2018/04/20 Javascript
微信小程序实现红包功能(后端PHP实现逻辑)
2018/07/11 Javascript
jQuery实现监听下拉框选中内容发生改变操作示例
2018/07/13 jQuery
js实现跟随鼠标移动的小球
2019/08/26 Javascript
jQuery实现中奖播报功能(让文本滚动起来) 简单设置数值即可
2020/03/20 jQuery
JavaScript实现跟随鼠标移动的盒子
2021/01/28 Javascript
[01:34]2014DOTA2展望TI 剑指西雅图VG战队专访
2014/06/30 DOTA
Python实现对字符串的加密解密方法示例
2017/04/29 Python
Python AES加密模块用法分析
2017/05/22 Python
详解python的webrtc库实现语音端点检测
2017/05/31 Python
Python数据抓取爬虫代理防封IP方法
2018/12/23 Python
Python使用reportlab模块生成PDF格式的文档
2019/03/11 Python
python使用yield压平嵌套字典的超简单方法
2019/11/02 Python
在Django下创建项目以及设置settings.py教程
2019/12/03 Python
python和php学习哪个更有发展
2020/06/17 Python
python在地图上画比例的实例详解
2020/11/13 Python
10个示例带你掌握python中的元组
2020/11/23 Python
Probikekit日本:自行车套件,跑步和铁人三项装备
2017/04/03 全球购物
真正的英国宝藏:Mappin & Webb
2019/05/05 全球购物
大学生个人推荐信范文
2013/11/25 职场文书
办公室前台岗位职责范本
2013/12/10 职场文书
大学毕业自我鉴定范文
2014/02/03 职场文书
实习公司领导推荐函
2014/05/21 职场文书
抖音短视频(douyin)去水印工具的实现代码
2021/03/30 Javascript
Java并发编程之Executor接口的使用
2021/06/21 Java/Android