Django防止XSS攻击的几种方式

一、什么是XSS攻击
XSS即跨站脚本攻击,XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。
二、防止XSS攻击的两种方式
1、对单一变量进行转义过滤。可以使用escape过滤器,无需转义时使用safe过滤器
例如:a变量为“你好

Hello {{ a|escape }} # 转义
{{a}} # 转义
{{a|safe}} # 认为a安全,不进行转义

HTML渲染结果为
你好
你好

2、利用django的HTML自动转义,无需autoescape 标签,django中的HTML文档会自动转义。

< 转化为 <
> 转化为 >
' 转化为 &#39;
" 转化为 "
& 转化为 &

三、停止django的HTML自动转义
autoescape标签的参数是on或者off,如果{% autoescape off %}标签中有需要转义的内容,则可以在该标签中嵌套使用{% autoescape on %},
name为“李雷

{% autoescape off %}
    Hello {{ name }}
{% endautoescape %}

输出为
李雷
如果想要在escape关闭的情况下,对某个变量进行转义,可以用escape过滤器

{% autoescape off %}
    Hello {{ name|escape }}
{% endautoescape %}

输出为:
李雷

注意:父模板中的转义规则会被子模板继承。
例如:
父模板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!

你可能感兴趣的:(django)