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&lt;1这种方式,进行转意输出。

来源:https://blog.csdn.net/nunchakushuang/article/details/52029521

标签:django,html,转义
0
投稿

猜你喜欢

  • 如何解决attachEvent函数时,this指向被绑定的元素的问题?

    2024-04-28 09:33:29
  • Python爬虫实例——scrapy框架爬取拉勾网招聘信息

    2023-01-20 19:06:45
  • Python matplotlib实现折线图的绘制

    2022-05-03 11:14:58
  • Highcharts 图表中图例显示状态存储的功能设计详解

    2023-05-30 02:01:09
  • 关于Python卷积函数详解

    2023-06-14 01:09:27
  • 有趣的python小程序分享

    2023-11-27 20:31:55
  • Python之批量创建文件的实例讲解

    2021-04-10 15:17:08
  • MAC系统IDEA颜值插件MaterialThemeUI

    2022-12-26 00:29:07
  • asp.net cookie清除的代码

    2023-07-19 15:24:37
  • DreamweaverMX Ultradev探索:技巧荟萃

    2010-07-13 12:10:00
  • python修改全局变量可以不加global吗?

    2021-01-11 08:10:56
  • asp如何读取服务器上的驱动器?

    2009-11-18 20:50:00
  • Python之lambda匿名函数及map和filter的用法

    2021-01-14 02:11:18
  • Python计算一个点到所有点的欧式距离实现方法

    2023-03-29 21:19:11
  • 浅析Python的命名空间与作用域

    2022-11-27 04:19:04
  • 简介Django中内置的一些中间件

    2023-03-16 19:20:27
  • 关于pytorch多GPU训练实例与性能对比分析

    2022-05-23 18:18:12
  • python避免死锁方法实例分析

    2023-08-04 04:32:59
  • 国内常用的js类库大全(CDN公共库)

    2024-05-11 10:23:29
  • python 合并文件的具体实例

    2022-03-12 03:18:26
  • asp之家 网络编程 m.aspxhome.com