Django-自动HTML转义
一、自动HTML转义
从模板生成HTML时,总会有变量包含影响最终HTML的字符风险,例如,考虑这个模板的片段:
Hello, {{ name }}
起初,这是一种显示用户名的无害方式,但考虑用户输入他们的名字时,输入:
<script>alert('')</script>
使用该名称值的时候,模板在显示的时候:
Hello, <script>alert('hello')</script>
这意味着浏览器会弹出一个JavaScript警告框!
显然,用户提交的数据不应该盲目地被信任,并且直接插入到您的网页中,因为恶意用户可能会使用这种漏洞来做可能不好的事情。这种类型的安全漏洞被称为 跨站点脚本(XSS)攻击。
为了避免这个问题,你有两个选择:
- 一,你可以确保通过
escape过滤器运行每个不受信任的变量 (如下文档所述),将可能有害的HTML字符转换为无害的字符。这是在Django的最初几年默认的解决方案,但问题是,它把责任推给你,开发者/模板作者,以确保您逃避一切。忘记逃离数据很容易。 - 二,你可以利用Django的自动HTML转义。
默认情况下,在Django中,每个模板都会自动转义每个变量标签的输出。具体来说,这五个字符是逃脱的:
<转换为<>转换为>'(单引号)转换为'"(双引号)转换为"&转换为&
我们再次强调,这种行为默认是开启的。如果您使用的是Django的模板系统,那么您将受到保护。
二、如何关闭它
如果您不希望数据被自动转义,请在每个站点,每个模板级别或每个变量级别上进行自动转义,您可以通过多种方式将其关闭。
你为什么要关闭它?因为有时候,模板变量会包含您打算以原始HTML呈现的数据,在这种情况下,您不希望其内容被转义。例如,您可能会在您的数据库中存储一块HTML,并希望将其直接嵌入到您的模板中。或者,您可能正在使用Django的模板系统来生成不是 HTML的文本- 比如电子邮件。
对于个体变量
要禁用单个变量的自动转义,请使用safe 过滤器:
This will be escaped: {{ data }}
This will not be escaped: {{ data|safe }}
认为安全是避免进一步转义的安全手段,或者可以安全地解释为HTML。在这个例子中,如果data包含'<b>',输出将是:
This will be escaped: <b>
This will not be escaped: <b>
对于模板块
要控制模板的自动转义,请将模板(或模板的特定部分)包装到autoescape标记中,如下所示:
{% autoescape off %}
Hello {{ name }}
{% endautoescape %}
该autoescape标签采用两种on或off作为其参数。有时,您可能需要强制自动转义,否则会被禁用。这是一个示例模板:
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 %}
自动转义标签将其效果传递到扩展当前include标签的模板以及通过标签包含的模板,就像所有块标签一样。
由于在基本模板中关闭了自动转义,因此它也将在子模板中关闭,导致在greeting变量包含字符串时呈现以下呈现的HTML <b>Hello!</b>:
<h1>This & that</h1>
<b>Hello!</b>
Django-自动HTML转义的更多相关文章
- 是否采用Sybase形式的自动字符串转义(用 '' 表示 ')
;; 关于php.ini ;; ; 这个文件必须命名为'php.ini'并放置在httpd.conf中PHPINIDir指令指定的目录中. ; 最新版本的php.ini可以在下面两个位置查看: ; h ...
- django中的转义
什么是html转义? 所谓html转义就是将 html关键字(包括标签,特殊字符等) 进行过滤替换.过滤替换格式如下: 接下来我们通过实例演示django中转义的细节以及如何关闭转义 一 dja ...
- django模板语言转义处理
模板变量的内容,如果含html的话,django的模板系统默认会对输出进行转义,比如把<p>转义成了<p> ,然后再显示出来的时候就如实地显示为<p>.要解决这个问 ...
- Django如何使文件在django自动执行
1. Django admin源码中 admin.py from django.contrib import admin # Register your models here. 在admin源码中 ...
- 用Django自动生成表遇到问题
因为以前在数据库中已经生成过Django 叫App01下的表,所以无法生成,在数据库中执行这个命令 DELETE FROM django_migrations WHERE app='App01';然后 ...
- Django关闭html转义
我们在views定义的html语句传递到html文件会按照原样式输出,并把我们定义的html标签页输出了,这是因为django模板默认帮我们开起了html转义功能 {{ lp}} <hr> ...
- Django自动获取项目中的全部URL
import re from collections import OrderedDict from django.conf import settings from django.utils.mod ...
- 关于webpy模板自动HTML转义的问题
注意: web.py 将会转义任何任何用到的变量,所以当你将 name 的值设为是一段 HTML 时,它会被转义显示成纯文本.如果要关闭该选项,可以写成 $:name 来代替 $name. 如果我们想 ...
- django自动生成接口文档
我们在实际项目中,会需要将我们的一些接口的信息返回给前端,便于前后端的交互,在实际使用中,这种自动生成接口文档的模块很多,我主要是用REST framework自动生成接口文档,这个需要用到的是cor ...
- eclipse 粘贴字符串自动添加转义符
eclipse -> Window -> Preferences -> Java -> Editor -> Typing -> 勾选{Escape text whe ...
随机推荐
- ML科普向
转载自http://www.cnblogs.com/qscqesze/ Basis(基础): MSE(Mean Square Error 均方误差),LMS(LeastMean Square 最小均方 ...
- 【刷题】BZOJ 2816 [ZJOI2012]网络
Description http://www.lydsy.com/JudgeOnline/upload/zjoi2012.pdf Solution 维护树上联通块的信息,支持动态加边删边 LCT 总共 ...
- 【2018ICPC沈阳】
哈密顿距离转切比雪夫距离,多种颜色跟两种颜色没有区别,记录最大最小次大次小即可. 圆求交点.
- Android Layout: TableLayout
TableLayout<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" andr ...
- nth-of-type和nth-child
一.nth-of-type.nth-child :nth-of-type(n) 选择器匹配属于父元素的特定类型的第 N 个子元素的每个元素. :nth-child(n) 选择器匹配属于其父元素的第 N ...
- 音视频处理之FFmpeg+SDL视频播放器20180409
一.FFmpeg视频解码器 1.视频解码知识 1).纯净的视频解码流程 压缩编码数据->像素数据. 例如解码H.264,就是“H.264码流->YUV”. 2).一般的视频解码流程 视频码 ...
- SenseTime Ace Coder Challenge 暨 商汤在线编程挑战赛 D. 白色相簿
从某一点开始,以层次遍历的方式建树若三点a.b.c互相连接,首先必先经过其中一点a,然后a可以拓展b.c两点,b.c两点的高度是相同的,若b(c)拓展时找到高度与之相同的点,则存在三点互相连接 //等 ...
- git<commit和分支>
commit: 在执行提交命令git commit之前,一定要git add要修改的文件,这样才能将更改的内容更新到本地. 在Git 中提交时,会保存一个提交(commit)对象,它包含一个指向暂存内 ...
- R安装时出现辑程包不存在,解决方法
R > -------------------------------------------------[解决方案]1.使用命令单独安装caret,安装的时间很长.install.packag ...
- Spring知识总结
一.Spring简述 Spring是一个分层的JavaSE/EEfull-stack(一站式)轻量级开源框架,Spring致力于提供一种方法管理你的业务对象,Spring的主要目的是使JavaE ...