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 列表(List)操作方法详解
Mar 11 Python
python提示No module named images的解决方法
Sep 29 Python
Python引用类型和值类型的区别与使用解析
Oct 17 Python
python实现对求解最长回文子串的动态规划算法
Jun 02 Python
python 多线程重启方法
Feb 18 Python
在cmd中查看python的安装路径方法
Jul 03 Python
Python实现投影法分割图像示例(二)
Jan 17 Python
Python基于类路径字符串获取静态属性
Mar 12 Python
django 扩展user用户字段inlines方式
Mar 30 Python
matplotlib设置颜色、标记、线条,让你的图像更加丰富(推荐)
Sep 25 Python
详解基于python的全局与局部序列比对的实现(DNA)
Oct 07 Python
Python利用FlashText算法实现替换字符串
Mar 31 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
曾在DC漫画界反派角色扮演的演员,谁才是你心目中的小丑之王?
2020/04/09 欧美动漫
laravel excel 上传文件保存到本地服务器功能
2019/11/14 PHP
jQuery动态添加的元素绑定事件处理函数代码
2011/08/02 Javascript
jquery动态加载select下拉框示例代码
2013/12/10 Javascript
js键盘事件的keyCode
2014/07/29 Javascript
json字符串之间的相互转换示例代码
2014/08/21 Javascript
详解jquery中$.ajax方法提交表单
2014/11/03 Javascript
node.js中的fs.readSync方法使用说明
2014/12/17 Javascript
nodejs实现获取当前url地址及url各种参数值
2015/06/25 NodeJs
javascript 数组的正态分布排序的问题
2016/07/31 Javascript
jQuery图片轮播(二)利用构造函数和原型创建对象以实现继承
2016/12/06 Javascript
AngularJS实现动态添加Option的方法
2017/05/17 Javascript
vue中简单弹框dialog的实现方法
2018/02/26 Javascript
webpack+vue-cil中proxyTable处理跨域的方法
2018/07/20 Javascript
antd中table展开行默认展示,且不需要前边的加号操作
2020/11/02 Javascript
python基础教程之字典操作详解
2014/03/25 Python
python cx_Oracle的基础使用方法(连接和增删改查)
2017/11/19 Python
Django 反向生成url实例详解
2019/07/30 Python
python3.8 微信发送服务器监控报警消息代码实现
2019/11/05 Python
Python pickle模块实现对象序列化
2019/11/22 Python
分享PyCharm最新激活码(真永久激活方法)不用每月找安装参数或最新激活码了
2020/12/27 Python
利用纯CSS3实现文字向右循环闪过效果实例(可用于移动端)
2017/06/15 HTML / CSS
瑞典领先的汽车零部件网上零售商:bildelaronline24.se
2017/01/12 全球购物
经理助理岗位职责
2014/03/05 职场文书
男女朋友协议书
2014/04/23 职场文书
违章停车检讨书
2014/10/21 职场文书
2014年远程教育工作总结
2014/12/09 职场文书
寒山寺导游词
2015/02/03 职场文书
师德师风个人总结
2015/02/06 职场文书
暑期社会实践个人总结
2015/03/06 职场文书
2015年体育部工作总结
2015/04/02 职场文书
英语投诉信范文
2015/07/03 职场文书
停车场管理制度范本
2015/08/05 职场文书
2016学习医德医风心得体会
2016/01/25 职场文书
2019企业文化管理制度范本!
2019/08/06 职场文书
Python必备技巧之字符数据操作详解
2022/03/23 Python