1、XSS攻击
Cross-Site Scripting 的缩写。黑客通过提交脚本代码到服务器,恶意篡改正常用户的页面,从而获取正常用户的cookie等信息。
2、防护原理
过滤输入和转义输出。对用户提交的数据进行严格的过滤和危险字符串的验证;在输出时对用户输入的信息进行html转义,使得其无法作为脚本执行。
3、XSS攻击成功的条件
向web页面中注入恶意代码,这些代码能被浏览器成功执行。
4、Django XSS防护机制
模板中Django中默认阻止了,以字符串的形式显示,例如:{{ name }}。以下几种方式会使Django取消防御:
①safe:{{ name|safe }};
②autoescape:{% autoescape off %}{{ name }}{% endautoescape %}
③mark_safe:from django.utils.safestring import mark_safe
name=mark_safe(name)
④format_html: from django.utils.html import format_html
format_html('<span>{}</span>', name)
尽量不使用safe标记,若需要使用则应该先在后台对进行用户提交的数据进行转义处理。方法如下:
from django.template.defaultfilters imort escape
name=escape(name)
5、我的防御方案
①在用户提交表单时首先对用户提交的数据进行危险字符串过滤和数据格式验证,而对于某些可能包含有“<”、">"等的数据进行转义,再存储到数据库中。
②在模板中尽量不适用safe标记,若需要使用首先要确保该数据不包含有用户提交的脚本代码或此处无法执行脚本代码。