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神器对付12306变态验证码
Jan 05 Python
Python时间模块datetime、time、calendar的使用方法
Jan 13 Python
全面了解Nginx, WSGI, Flask之间的关系
Jan 09 Python
Python简单实现的代理服务器端口映射功能示例
Apr 08 Python
解决csv.writer写入文件有多余的空行问题
Jul 06 Python
From CSV to SQLite3 by python 导入csv到sqlite实例
Feb 14 Python
python seaborn heatmap可视化相关性矩阵实例
Jun 03 Python
python 最简单的实现适配器设计模式的示例
Jun 30 Python
使用Python+Appuim 清理微信的方法
Jan 26 Python
Python基础之函数嵌套知识总结
May 23 Python
python中os.path.join()函数实例用法
May 26 Python
Python图像处理库PIL详细使用说明
Apr 06 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
回帖脱衣服的图片实现代码
2014/02/15 PHP
ThinkPHP采用原生query实现关联查询left join实例
2014/12/02 PHP
php使用pdo连接报错Connection failed SQLSTATE的解决方法
2014/12/15 PHP
Laravel路由设定和子路由设定实例分析
2016/03/30 PHP
ThinkPHP 5 AJAX跨域请求头设置实现过程解析
2020/10/28 PHP
JavaScript的eval JSON object问题
2009/11/15 Javascript
js 通用javascript函数库整理
2011/08/14 Javascript
jQuery获取样式中的背景颜色属性值/颜色值
2012/12/17 Javascript
JavaScript保留两位小数的2个自定义函数
2014/05/05 Javascript
60个很实用的jQuery代码开发技巧收集
2014/12/15 Javascript
JQuery实现展开关闭层的方法
2015/02/17 Javascript
jQuery实现动态添加和删除一个div
2015/08/12 Javascript
javascript中错误使用var造成undefined
2016/03/31 Javascript
jquery使用Cookie和JSON记录用户最近浏览历史
2016/04/19 Javascript
jQ处理xml文件和xml字符串的方法(详解)
2016/11/22 Javascript
js实现随机抽选效果、随机抽选红色球效果
2017/01/13 Javascript
javascript 实现文本使用省略号替代(超出固定高度的情况)
2017/02/21 Javascript
jQuery实现使用sort方法对json数据排序的方法
2018/04/17 jQuery
layerUI下的绑定事件实例代码
2018/08/17 Javascript
Vue从TodoList中学父子组件通信
2019/02/05 Javascript
微信小程序下拉框搜索功能的实现方法
2019/07/31 Javascript
js+canvas实现简单扫雷小游戏
2021/01/22 Javascript
python Django连接MySQL数据库做增删改查
2013/11/07 Python
Python自定义主从分布式架构实例分析
2016/09/19 Python
Python文件监听工具pyinotify与watchdog实例
2018/10/15 Python
python实现多层感知器MLP(基于双月数据集)
2019/01/18 Python
python判断字符串或者集合是否为空的实例
2019/01/23 Python
Win10下python 2.7与python 3.7双环境安装教程图解
2019/10/12 Python
关于Python3 lambda函数的深入浅出
2019/11/27 Python
Python log模块logging记录打印用法解析
2020/01/20 Python
python 基于Apscheduler实现定时任务
2020/12/15 Python
HTML5 video 上传预览图片视频如何设置、预览视频某秒的海报帧
2018/08/28 HTML / CSS
门诊挂号室室长岗位职责
2013/11/27 职场文书
王老吉广告词
2014/03/20 职场文书
Python Socket编程详解
2021/04/25 Python
使用Python开发贪吃蛇游戏 SnakeGame
2022/04/30 Python