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实现的二维码生成小软件
Jul 11 Python
Python中使用HTMLParser解析html实例
Feb 08 Python
pygame 精灵的行走及二段跳的实现方法(必看篇)
Jul 10 Python
Python爬虫小技巧之伪造随机的User-Agent
Sep 13 Python
Python设计模式之原型模式实例详解
Jan 18 Python
PyQt5 实现给窗口设置背景图片的方法
Jun 13 Python
Python企业编码生成系统总体系统设计概述
Jul 26 Python
flask框架url与重定向操作实例详解
Jan 25 Python
python实现字符串和数字拼接
Mar 02 Python
Python API len函数操作过程解析
Mar 05 Python
plt.figure()参数使用详解及运行演示
Jan 08 Python
Python写情书? 10行代码展示如何把情书写在她的照片里
Apr 21 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
php4的彩蛋
2006/10/09 PHP
PHP产生随机字符串函数
2006/12/06 PHP
一些被忽视的PHP函数(简单整理)
2010/04/30 PHP
SCP远程VPS快速搬家和WDCP升级php5.3安装memcached和eaccelerator教程
2017/07/27 PHP
PHP基于rabbitmq操作类的生产者和消费者功能示例
2018/06/16 PHP
深入理解 PHP7 中全新的 zval 容器和引用计数机制
2018/10/15 PHP
PHP中散列密码的安全性分析
2019/07/26 PHP
firefox下frameset取不到值的解决方法
2010/09/06 Javascript
jquery 使用点滴函数代码
2011/05/20 Javascript
php与js的区别是什么
2013/08/05 Javascript
jQuery实现带有洗牌效果的动画分页实例
2015/08/31 Javascript
Javascript打印局部页面实例
2016/06/21 Javascript
JSONP和批量操作功能的实现方法
2016/08/21 Javascript
Javascript发送AJAX请求实例代码
2016/08/21 Javascript
JS自定义函数对web前端上传的文件进行类型大小判断
2016/10/19 Javascript
JQueryMiniUI按照时间进行查询的实现方法
2017/06/07 jQuery
微信小程序scroll-view横向滑动嵌套for循环的示例代码
2018/09/20 Javascript
jquery+php后台实现省市区联动功能示例
2019/05/23 jQuery
微信小程序 简易计算器实现代码实例
2019/09/02 Javascript
Openlayers实现距离面积测量
2020/09/28 Javascript
[08:53]DOTA2-DPC中国联赛 正赛 PSG.LGD vs LBZS 选手采访
2021/03/11 DOTA
python错误:AttributeError: 'module' object has no attribute 'setdefaultencoding'问题的解决方法
2014/08/22 Python
Python基于回溯法子集树模板解决数字组合问题实例
2017/09/02 Python
python实现简易数码时钟
2021/02/19 Python
Python自动化完成tb喵币任务的操作方法
2019/10/30 Python
Python selenium文件上传下载功能代码实例
2020/04/13 Python
使用scrapy ImagesPipeline爬取图片资源的示例代码
2020/09/28 Python
css3发光搜索表单分享
2014/04/11 HTML / CSS
装潢设计实习自我鉴定
2013/09/19 职场文书
计算机网络专业推荐信
2013/11/24 职场文书
读群众路线心得体会
2014/03/07 职场文书
干部作风建设心得体会
2014/10/22 职场文书
2016秋季运动会前导词
2015/11/25 职场文书
关于感恩的作文
2019/08/26 职场文书
python DataFrame中stack()方法、unstack()方法和pivot()方法浅析
2022/04/06 Python
Win10开机修复磁盘错误怎么跳过?Win10关闭开机磁盘检查的方法
2022/09/23 数码科技