django中模板的html自动转意方法
作者:南窗客斯黄 时间:2023-06-28 15:33:49
一、需求来源:
如果用户在文本框中填了一段<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这种方式,进行转意输出。
来源:https://blog.csdn.net/nunchakushuang/article/details/52029521
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
如何解决attachEvent函数时,this指向被绑定的元素的问题?
Python爬虫实例——scrapy框架爬取拉勾网招聘信息
![](https://img.aspxhome.com/file/2023/2/131212_0s.png)
Python matplotlib实现折线图的绘制
![](https://img.aspxhome.com/file/2023/1/93621_0s.png)
Highcharts 图表中图例显示状态存储的功能设计详解
关于Python卷积函数详解
![](https://img.aspxhome.com/file/2023/7/133667_0s.jpg)
有趣的python小程序分享
![](https://img.aspxhome.com/file/2023/7/98787_0s.png)
Python之批量创建文件的实例讲解
MAC系统IDEA颜值插件MaterialThemeUI
![](https://img.aspxhome.com/file/2023/8/132428_0s.jpg)
asp.net cookie清除的代码
DreamweaverMX Ultradev探索:技巧荟萃
python修改全局变量可以不加global吗?
![](https://img.aspxhome.com/file/2023/1/97541_0s.png)
asp如何读取服务器上的驱动器?
Python之lambda匿名函数及map和filter的用法
Python计算一个点到所有点的欧式距离实现方法
浅析Python的命名空间与作用域
简介Django中内置的一些中间件
关于pytorch多GPU训练实例与性能对比分析
![](https://img.aspxhome.com/file/2023/0/93490_0s.jpg)