一、什么是XSS攻击
XSS即跨站脚本攻击,XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。
二、防止XSS攻击的两种方式
1、对单一变量进行转义过滤。可以使用escape过滤器,无需转义时使用safe过滤器
例如:a变量为“你好”
Hello {{ a|escape }} # 转义
{{a}} # 转义
{{a|safe}} # 认为a安全,不进行转义
HTML渲染结果为
<b>你好</b>
你好
2、利用django的HTML自动转义,无需autoescape 标签,django中的HTML文档会自动转义。
< 转化为 <
> 转化为 >
' 转化为 '
" 转化为 "
& 转化为 &
三、停止django的HTML自动转义
autoescape标签的参数是on或者off,如果{% autoescape off %}标签中有需要转义的内容,则可以在该标签中嵌套使用{% autoescape on %},
name为“李雷”
{% autoescape off %}
Hello {{ name }}
{% endautoescape %}
输出为
李雷
如果想要在escape关闭的情况下,对某个变量进行转义,可以用escape过滤器
{% autoescape off %}
Hello {{ name|escape }}
{% endautoescape %}
输出为:
<b>李雷</b>
注意:父模板中的转义规则会被子模板继承。
例如:
父模板base.html内容如下:
{% autoescape off %}
<h1>{% block title %}{% endblock %}</h1>
{% block content %}
{% endblock %}
{% endautoescape %}
子模板child.html内容如下:
{% extends "base.html" %}
{% block title %}This & that{% endblock %}
{% block content %}{{ greeting }}{% endblock %}
则页面渲染结果为:
This & that
Hello!