Django XSS攻击


XSS(cross-site scripting跨域脚本攻击)攻击是最常见的web攻击,其特点是“跨域”和“客户端执行”,XSS攻击分为三种:

  1. Reflected XSS(基于反射的XSS攻击)
  2. Stored XSS(基于存储的XSS攻击)
  3. DOM-based or local XSS(基于DOM或本地的XSS攻击)

Reflected XSS

基于反射的XSS攻击,主要依靠站点服务端返回脚本,在客户端触发执行从而发起Web攻击。

例子:

1. 做个假设,当亚马逊在搜索书籍,搜不到书的时候显示提交的名称。

2. 在搜索框搜索内容,填入“<script>alert('handsome boy')</script>”, 点击搜索。

3. 当前端页面没有对返回的数据进行过滤,直接显示在页面上, 这时就会alert那个字符串出来。

4. 进而可以构造获取用户cookies的地址,通过QQ群或者垃圾邮件,来让其他人点击这个地址:

结论:

如果只是1、2、3步做成功,那也只是自己折腾自己而已,如果第4步能做成功,才是个像样的XSS攻击。

开发安全措施:

1. 前端在显示服务端数据时候,不仅是标签内容需要过滤、转义,就连属性值也都可能需要。

2. 后端接收请求时,验证请求是否为攻击请求,攻击则屏蔽。

例如:

标签:

<span><script>alert('handsome boy')</script></span>

转义为:

<span><script>alert('handsome boy')</script&gt</span>

属性:

如果一个input的value属性值是:

琅琊榜" onclick="javascript:alert('handsome boy')  

就可能出现:

<input type="text" value="琅琊榜" onclick="javascript:alert('handsome boy')">

点击input导致攻击脚本被执行,解决方式可以对script或者双引号进行过滤。  


Stored XSS

基于存储的XSS攻击,是通过发表带有恶意跨域脚本的帖子/文章,从而把恶意脚本存储在服务器,每个访问该帖子/文章的人就会触发执行。

例子:

1. 发一篇文章,里面包含了恶意脚本

今天天气不错啊!<script>alert('handsome boy')</script>

2. 后端没有对文章进行过滤,直接保存文章内容到数据库。

3. 当其他看这篇文章的时候,包含的恶意脚本就会执行。

PS:因为大部分文章是保存整个HTML内容的,前端显示时候也不做过滤,就极可能出现这种情况。

结论:

后端尽可能对提交数据做过滤,在场景需求而不过滤的情况下,前端就需要做些处理了。

开发安全措施:

1. 首要是服务端要进行过滤,因为前端的校验可以被绕过。

2. 当服务端不校验时候,前端要以各种方式过滤里面可能的恶意脚本,例如script标签,将特殊字符转换成HTML编码。


DOM-based or local XSS  

基于DOM或本地的XSS攻击。一般是提供一个免费的wifi,但是提供免费wifi的网关会往你访问的任何页面插入一段脚本或者是直接返回一个钓鱼页面,从而植入恶意脚本。这种直接存在于页面,无须经过服务器返回就是基于本地的XSS攻击。

例子1:

1. 提供一个免费的wifi。

1. 开启一个特殊的DNS服务,将所有域名都解析到我们的电脑上,并把Wifi的DHCP-DNS设置为我们的电脑IP。

2. 之后连上wifi的用户打开任何网站,请求都将被我们截取到。我们根据http头中的host字段来转发到真正服务器上。

3. 收到服务器返回的数据之后,我们就可以实现网页脚本的注入,并返回给用户。

4. 当注入的脚本被执行,用户的浏览器将依次预加载各大网站的常用脚本库。

图片来源:https://www.cnblogs.com/index-html/p/wifi_hijack_3.html

这个其实就是wifi流量劫持,中间人可以看到用户的每一个请求,可以在页面嵌入恶意代码,使用恶意代码获取用户的信息,可以返回钓鱼页面。

例子2:

1. 还是提供一个免费wifi

2. 在我们电脑上进行抓包

3. 分析数据,可以获取用户的微信朋友圈、邮箱、社交网站帐号数据(HTTP)等

结论:

这攻击其实跟网站本身没有什么关系,只是数据被中间人获取了而已,而由于HTTP是明文传输的,所以是极可能被窃取的。

开发安全措施:

1. 使用HTTPS!HTTPS会在请求数据之前进行一次握手,使得客户端与服务端都有一个私钥,服务端用这个私钥加密,客户端用这个私钥解密,这样即使数据被人截取了,也是加密后的数据。


总结

XSS攻击的特点就是:尽一切办法在目标网站上执行非目标网站上原有的脚本(某篇文章说的)。本地的XSS攻击的示例2其实不算XSS攻击,只是简单流量劫持。前两种XSS攻击是我们开发时候要注意的,而流量劫持的则可以使用HTTPS提高安全性,

文章转自:http://www.cnblogs.com/lovesong/p/5199623.html


Django过滤XSS攻击的方法

Django的web应用中,

对于用户输入的字段,要考虑防止出现xss攻击;Django有自带的处理方式,总结为如下两种:

1.后台view或model中

from django.utils.html import escape

首先引入lxml库中的escape方法,对可能出现xss对字段调用该方法,前端可避免出现攻击;

2.前端html模版中,对可能出现攻击的字段增加escape过滤,例如:

{{user.team|escape}}

此外,在前端js中,避免出现将后台传过来的值采用字符串拼接的方式赋值。

 var value=$("#team span").text();
 $("team").append("<input id='tean-input' class='input-control' value='"+value+"'><a id='team-save'><i class='fa fa-save'></i></a>");

应当采用严格的赋值方式:

var value=$("#team span").text();
$("team").append("<input id='tean-input' class='input-control'><a id='team-save'><i class='fa fa-save'></i></a>");
$("team-input").val(value)

参考文章:http://www.jianshu.com/p/af9d465cb8b9  

Django XSS攻击的更多相关文章

  1. [oldboy-django][2深入django]xss攻击 + csrf

    1 xss攻击 xss攻击(跨站脚本攻击,用户页面提交数据来盗取cookie) - 慎用safe, 和mark_safe -- 如果要用,必须要过滤 - 定义: 用户提交内容,在页面展示用html显示 ...

  2. 第三百九十二节,Django+Xadmin打造上线标准的在线教育平台—sql注入攻击,xss攻击,csrf攻击

    第三百九十二节,Django+Xadmin打造上线标准的在线教育平台—sql注入攻击,xss攻击,csrf攻击 sql注入攻击 也就是黑客通过表单提交的地方,在表单里输入了sql语句,就是通过SQL语 ...

  3. Django之XSS攻击

    一.什么是XSS攻击 xss攻击:----->web注入    xss跨站脚本攻击(Cross site script,简称xss)是一种“HTML注入”,由于攻击的脚本多数时候是跨域的,所以称 ...

  4. Django是如何防止注入攻击-XSS攻击-CSRF攻击

    注入攻击-XSS攻击-CSRF攻击介绍请访问:https://www.cnblogs.com/hwnzy/p/11219475.html Django防止注入攻击 Django提供一个抽象的模型层来组 ...

  5. Django项目开发,XSS攻击,图片防盗链,图片验证码,kindeditor编辑器

    目录 一.Django项目开发 1. 项目开发流程 2. auth模块的补充 (1)django的admin可视化管理页面 (2)将admin可视化管理页面的模型表显示成中文 (3)auth模块的用户 ...

  6. XSS攻击&CSRF攻击 ----Django解决方案

    XSS攻击: XSS又叫CSS (Cross Site Script) ,跨站脚本攻击.它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执 ...

  7. xss攻击和sq注入

    xss攻击跟SQL注入的原理还是挺简单的,都是利用web是使用字符串进行操作的原理,通过伪造分隔符或者结束符号,来让网页或者服务端来运行输入的代码 一般防御的方法就是在对一些分隔符进行转义,djang ...

  8. PHP防止SQL注入和XSS攻击

    PHP防止SQL注入和XSS攻击PHP防范SQL注入是一个非常重要的安全手段.一个优秀的PHP程序员除了要能顺利的编写代码,还需要具备使程序处于安全环境下的能力.说到网站安全,就不得不提到SQL注入( ...

  9. BBS--后台管理页面,编辑文章,xss攻击

    1 1.对文章进行增删改查 # 后台管理url re_path(r'^cn_backend/$', views.cn_backend, name='cn_backend'), re_path(r'^c ...

随机推荐

  1. TortoiseGit推送代码到Gerrit的过程

    gerrit的安装不在本博客的说明范围中,本博客阐述的是使用TortoiseGit 提交代码到gerrit上的步骤和配置. 一.Git 说明:这个工具只要用来做一个仿真的linux环境,可以执行大部分 ...

  2. 数据分析与挖掘 - R语言:贝叶斯分类算法(案例二)

    接着案例一,我们再使用另一种方法实例一个案例 直接上代码: #!/usr/bin/Rscript library(plyr) library(reshape2) #1.根据训练集创建朴素贝叶斯分类器 ...

  3. linux 编译 'aclocal-1.14' is missing on your system

    centos编译出现:类似情况: $tar -xvf libpcap-1.0.0.tar.gz      $cd libpcap-1.0.0.tar.gz      $./configure      ...

  4. React对比Vue(03 事件的对比,传递参数对比,事件对象,ref获取DOM节点,表单事件,键盘事件,约束非约束组件等)

    import React from 'react'; class Baby extends React.Component { constructor (props) { super(props) t ...

  5. cocos2dx (关于斗地主人物偏移位置)

    就是说不管是谁登陆游戏,你的人物信息资料始终在平板电脑的屏幕正下方(位置坐标需要自己设定,我设置定的是0号位() char LandLordsScene::getUIPosition(char pos ...

  6. 49.CSS--- 特殊css3效果展示

    1.设置多行文本超出显示省略号<div class="caption"> <p>显示超过两行就显示省略号,其余隐藏,隐藏不了的情况下给这个模块添加一个高度和 ...

  7. vue中解决跨域问题

    方法1.后台更改header header('Access-Control-Allow-Origin:*');//允许所有来源访问 header('Access-Control-Allow-Metho ...

  8. MyBatis基础入门《十七》动态SQL

    MyBatis基础入门<十七>动态SQL 描述: >> 完成多条件查询等逻辑实现 >> 用于实现动态SQL的元素主要有: > if > trim > ...

  9. https加密过程

    https加密完整过程 step1: “客户”向服务端发送一个通信请求 “客户”->“服务器”:你好 step2: “服务器”向客户发送自己的数字证书.证书中有一个公钥用来加密信息,私钥由“服务 ...

  10. would you please...could you please...两句区别是什么?

    Could you please 是can you please 更为礼貌.委婉的说法,并不是过去式,是“能否麻烦你……”.“请你……”的意思,更侧重“能否”及客观情况:回答时要注意,eg:A:“Co ...