Django如何实现防止XSS攻击_python

来源:脚本之家  责任编辑:小易  

初学django,在安装2113的时候遇到一个小问题:运行>django-admin.py startproject hello 一直5261以下的错4102误D:\python\Scripts>python django-admin.py startproject helloTraceback (most recent call last):File "django-admin.py", line 2, in <module>from django.core import managementFile "D:\python\lib\site-packages\django\core\management\__init__.py", line 54except ImportError,eSyntaxError: invalid syntax也许很多人也有过同样的困恼1653,后来在网上查找了一下资料,才知道django目前不太支持python3.0以上的版本www.zgxue.com防采集请勿采集本网。

一、什么是XSS攻击

xss攻击:----->web注入

  xss跨站脚本攻击(Cross site script,简称xss)是一种“HTML注入”,由于攻击的脚本多数时候是跨域的,所以称之为“跨域脚本”。

  我们常常听到“注入”(Injection),如SQL注入,那么到底“注入”是什么?注入本质上就是把输入的数据变成可执行的程序语句。SQL注入是如此,XSS也如此,只不过XSS一般注入的是恶意的脚本代码,这些脚本代码可以用来获取合法用户的数据,如Cookie信息。

PS: 把用户输入的数据以安全的形式显示,那只能是在页面上显示字符串。

django框架中给数据标记安全方式显示(但这种操作是不安全的!):  - 模版页面上对拿到的数据后写上safe. ----> {{XXXX|safe}}  - 在后台导入模块:from django.utils.safestring import mark_safe

  把要传给页面的字符串做安全处理 ----> s = mark_safe(s)

二、测试代码

实施XSS攻击需要具备两个条件:

  一、需要向web页面注入恶意代码;

  二、这些恶意代码能够被浏览器成功的执行。

解决办法:

  1、一种方法是在表单提交或者url参数传递前,对需要的参数进行过滤。

  2、在后台对从数据库获取的字符串数据进行过滤,判断关键字。

  3、设置安全机制。

  django框架:内部机制默认阻止了。它会判定传入的字符串是不安全的,就不会渲染而以字符串的形式显示。如果手贱写了safe,那就危险了,若想使用safe,那就必须在后台对要渲染的字符串做过滤了。所以在开发的时候,一定要慎用安全机制。尤其是对用户可以提交的并能渲染的内容!!!

这里是不存在xss漏洞的写法,因为django已经做了防攻击措施

index.html

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title></head><body><h1>评论</h1>{% for item in msg %}{# <div>{{ item|safe }}</div>#} #这里被注释的,是因为,|safe 加了这个就认为是安全的了,写入 <script> alert(123)</script> 就会恶意加载 <div>{{ item}}</div>{% endfor %}</body></html>

conment.html

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title></head><body><form action="/comment/" method="POST"> <input type="text" name="content"> <input type="submit" value="提交"></form></body></html>

views.py

from django.shortcuts import render,HttpResponse# Create your views here.msg = []def comment(request): if request.method == "GET": return render(request,"comment.html") else: v = request.POST.get("content") msg.append(v) return render(request,"comment.html")def index(request): return render(request,"index.html",{"msg":msg})########################################################def test(request): from django.utils.safestring import mark_safe temp = "<a href='http://www.baidu.com'>百度</a>" newtemp = mark_safe(temp) #这里相当于加了 |safe ,把字符串认为是安全的,执行代码,如果不加 test.html里面 {{ temp }} 就只会显示出字符串,而不是 a 标签 return render(request,'test.html',{'temp':newtemp})

urls.py

from app01 import viewsurlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^index/', views.index), url(r'^comment/',views.comment),]

------------------------------------######################_-------------------------------

以下是做了用户输入判断,检测是否有特殊字符

views.py

from django.shortcuts import render,HttpResponse# Create your views here.msg = []def comment(request): if request.method == "GET": return render(request,"comment.html") else: v = request.POST.get("content") if "script" in v: return render(request, "comment.html",{'error':'小比崽子'}) else: msg.append(v) return render(request,'comment.html')def index(request): return render(request,"index.html",{"msg":msg})

index.html

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title></head><body><h1>评论</h1>{% for item in msg %} <div>{{ item|safe }}</div>{# <div>{{ item}}</div>#}{% endfor %}</body></html>

comment.html

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title></head><body><form action="/comment/" method="POST"> <input type="text" name="content"> <input type="submit" value="提交">{{ error }}</form></body></html>

这和溢出防范很困难一个道理。是系统问题,单靠“工具”不容易解决内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • 详解django-channels 实现websocket实例
  • 基于python神经卷积网络的人脸识别
  • 讲解python中for循环下的索引变量的作用域
  • torch 中各种图像格式转换的实现方法
  • python爬豆瓣电影实例
  • pygame实现飞机大战
  • python实现爬虫从网络上下载文档的实例代码
  • 浅谈keras中的目标函数和优化函数mse用法
  • python实现基于socket的udp传输与接收功能详解
  • python实现爬虫爬取nba数据功能示例
  • 有了python django的自动转码,就可以挡住xss了吗
  • 有了python django的自动转码,就可以挡住xss了吗
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全vbsdos/bathtahtcpythonperl游戏相关vba远程脚本coldfusionruby专题autoitseraphzonepowershelllinux shellluagolangerlang其它首页django框架防止xss注入的方法分析使用django简单编写一个xss平台的方法步骤django项目创建及管理实现流程详解django form常用功能及代码示例django auth用户认证组件实现代码django modelform组件原理及用法详解django限制api访问频率常用方法解析社区版pycharm创建django项目的方法(pycharm的newproject左侧没有项目选项)详解django-channels 实现websocket实例基于python神经卷积网络的人脸识别讲解python中for循环下的索引变量的作用域torch 中各种图像格式转换的实现方法python爬豆瓣电影实例pygame实现飞机大战浅谈keras中的目标函数和优化函数mse用法python实现基于socket的udp传输与接收功能详解python实现爬虫爬取nba数据功能示例python入门教程 超详细1小时学会pycharm 2020最新永久激活码(附python 列表(list)操作方法详解python 元组(tuple)操作详解python 字典(dictionary)操作详解pycharm 使用心得(一)安装和首python strip()函数 介绍python 中文乱码问题深入分析python中使用xlrd、xlwt操作excepython逐行读取文件内容的三种方python线程指南详细介绍python设计模式中单例模式的实现及在torncentos安装pillow报错的解决方法python实现对图片进行旋转,放缩,裁剪的功python爬虫_自动获取seebug的poc实例python中django 后台自定义表单控件python 字典中的所有方法及用法python中字符串前面加r的作用python万年历实现代码 含运行结果浅谈python爬取网页的编码处理
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved