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获取DLL和EXE文件版本号的方法
Mar 10 Python
pygame学习笔记(2):画点的三种方法和动画实例
Apr 15 Python
python实现自动登录
Sep 17 Python
CentOS 7下安装Python3.6 及遇到的问题小结
Nov 08 Python
Python创建字典的八种方式
Feb 27 Python
Python面向对象程序设计多继承和多态用法示例
Apr 08 Python
python3 pygame实现接小球游戏
May 14 Python
python用requests实现http请求代码实例
Oct 31 Python
python 普通克里金(Kriging)法的实现
Dec 19 Python
tf.concat中axis的含义与使用详解
Feb 07 Python
Python sep参数使用方法详解
Feb 12 Python
python3 字符串str和bytes相互转换
Mar 23 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
十天学会php之第三天
2006/10/09 PHP
114啦源码(114la)不能生成地方房产和地方报刊问题4级页面0字节的解决方法
2012/01/12 PHP
php绘图中显示不出图片的原因及解决
2014/03/05 PHP
nginx+thinkphp下解决不支持pathinfo模式
2015/07/01 PHP
PHP中JSON的应用技巧
2015/10/10 PHP
微信红包随机生成算法php版
2016/07/21 PHP
详解PHP使用Redis存储session时的一个Warning定位
2017/07/05 PHP
Yii框架小部件(Widgets)用法实例详解
2020/05/15 PHP
雄兵连第三季海报曝光,艾妮熙德成主角,蔷薇新造型
2021/03/09 国漫
表单提交验证类
2006/07/14 Javascript
Mootools 1.2教程 滑动效果(Slide)
2009/09/15 Javascript
基于JQuery实现异步刷新的代码(转载)
2011/03/29 Javascript
jquery ajax 同步异步的执行 return值不能取得的解决方案
2012/01/08 Javascript
18个非常棒的jQuery代码片段
2015/11/02 Javascript
jQuery中$.ajax()方法参数解析
2016/10/22 Javascript
AngularJS extend用法详解及实例代码
2016/11/15 Javascript
详解获取jq ul第一个li定位的四种解决方案
2016/11/23 Javascript
jQuery中页面返回顶部的方法总结
2016/12/30 Javascript
ES6新特性四:变量的解构赋值实例
2017/04/21 Javascript
详解webpack编译多页面vue项目的配置问题
2017/12/11 Javascript
Vue 报错TypeError: this.$set is not a function 的解决方法
2018/12/17 Javascript
用原生 JS 实现 innerHTML 功能实例详解
2019/04/03 Javascript
layui动态绑定事件的方法
2019/09/20 Javascript
使用p5.js临摹动态图形
2019/10/23 Javascript
vue 手机物理监听键+退出提示代码
2020/09/09 Javascript
vue打开子组件弹窗都刷新功能的实现
2020/09/21 Javascript
在Python中进行自动化单元测试的教程
2015/04/15 Python
Python datetime包函数简单介绍
2019/08/28 Python
python中的itertools的使用详解
2020/01/13 Python
Python 实现自动完成A4标签排版打印功能
2020/04/09 Python
纯CSS3编写的的精美动画进度条(无flash/无图像/无脚本/附源码)
2013/01/07 HTML / CSS
探讨HTML5移动开发的几大特性(必看)
2015/12/30 HTML / CSS
英国家用电器折扣网站:Electrical Discount UK
2018/09/17 全球购物
事业单位鉴定材料
2014/05/25 职场文书
关于颐和园的导游词
2015/01/30 职场文书
python和Appium的移动端多设备自动化测试框架
2022/04/26 Python