上回提到,由于需要使用代理页面解决POST请求的跨域请求,需要在代理页面上执行传递的函数。所以我们做了白名单只有我们认可的回调函数才能在页面上执行,防止执行非法的JS方法,做脚本攻击。

我们所采用的方式是,把白名单以及过滤方法单独提出作为单独的文件引入页面,然后进行使用(这就为新的漏洞提供了机会)。

本次漏洞出现的原因有两个:

  • 屏蔽了白名单的JS文件
  • 当前页面如果检测不到这个方法就直接不过滤了(为什么这么处理呢?防止白名单失败之后,由于某些原因,导致某种请求失败,导致流程不通。真是因为这个原因,给漏洞提供了机会。)

如何轻松的控制这个白名单?该漏洞利用的是:浏览器的xss filter特性。当URL中检测到xss攻击时,浏览器会自动过滤页面上的这个JS内容。就是利用这个原理,禁用了页面的白名单过滤函数,加上没有限制,导致可以直接绕过过滤函数,在页面上执行了攻击代码。

经查,浏览器为了防止XSS攻击,过滤了URL中存在的JS地址就行过滤。访问下面的地址:

https://www.baidu.com/?xss=%3Cscript%20type%3D%22text%2Fjavascript%22%20src%3D%22https%3A%2F%2Fss1.bdstatic.com%2F5eN1bjq8AAUYm2zgoY3K%2Fr%2Fwww%2Fcache%2Fstatic%2Fprotocol%2Fhttps%2Fjquery%2Fjquery-1.10.2.min_f2fb5194.js%22%3E%3C%2Fscript%3E

  会发现这样的报错:

The XSS Auditor refused to execute a script in 'https://www.baidu.com/?xss=%3Cscript%20type%3D%22text%2Fjavascript%22%20src…ocol%2Fhttps%2Fjquery%2Fjquery-1.10.2.min_f2fb5194.js%22%3E%3C%2Fscript%3E' because its source code was found within the request. The auditor was enabled as the server sent neither an 'X-XSS-Protection' nor 'Content-Security-Policy' header.

导致页面无法加载jquery的JS,认为这个JS是一个XSS攻击。

这里面查到http协议头里有这么一个字段可以控制是否开启浏览器的XSS过滤功能。那就是:X-XSS-Protection。

那什么是X-XSS-Protection呢?这个是为了防范XSS的。可以通过设置他的值来开启和关闭是否过滤XSS,当然最好是开启这个功能,这里讲到的就是为了了解和学习http协议中的这个字段。那应该怎么配置呢?

0 – 关闭对浏览器的xss防护  

1 – 开启xss防护  

1; mode=block – 开启xss防护并通知浏览器阻止而不是过滤用户注入的脚本。  

1; report=http://site.com/report – 这个只有chrome和webkit内核的浏览器支持,这种模式告诉浏览器当发现疑似xss攻击的时候就将这部分数据post到指定地址。

  当开启XSS防护之后,浏览器会隐藏对反射性XSS的输出。

  在这里,我的解决方案有两个:

  • 将过滤方法放在页面内,不采用外联的形式;
  • 或者检测不到这个检测方法的时,直接阻止流程继续。

XSS的战斗不止。

参考资料:

https://www.imququ.com/post/web-security-and-response-header.html

http://drops.wooyun.org/tips/1166

http://blogs.msdn.com/b/ie/archive/2008/07/02/ie8-security-part-iv-the-xss-filter.aspx

http://blogs.msdn.com/b/ieinternals/archive/2011/01/31/controlling-the-internet-explorer-xss-filter-with-the-x-xss-protection-http-header.aspx

https://msdn.microsoft.com/en-us/library/dd565647(v=vs.85).aspx

http://www.secpulse.com/archives/5688.html

一个跨域请求的XSS漏洞再续的更多相关文章

  1. 一个跨域请求的XSS漏洞

    场景回顾 一个表单进行跨域提交的方式有很多,我们使用的采用隐藏iframe,在本域下放一个代理页面,通过服务端配合完成一次完整的请求. 首先,部署proxy.html代理页面.这个页面处理服务端返回的 ...

  2. 一个跨域请求的XSS续

    之前讨论过,在解决post跨域请求时,采用iframe+本域代理页的形式,兼容性(当然是包括IE6啦)是最好的.上次提到,代理页面的作用是:执行本域下的回调函数.就是这个原因,给XSS带来了便利.详细 ...

  3. CSRF(跨站请求伪造攻击)漏洞详解

    Cross-Site Request Forgery(CSRF),中文一般译作跨站点 请求伪造.经常入选owasp漏洞列表Top10,在当前web漏洞排行中,与XSS和SQL注入并列前三.与前两者相比 ...

  4. 跨域请求方式之Jsonp形式

    在浏览器端才有跨域安全限制一说,而在服务器端是没有跨域安全限制的. 在两个异构系统(开发语言不同)之间达到资源共享就需要发起一个跨域请求. 而浏览器的同源策略却限制了从一个源头的文档资源或脚本资源与来 ...

  5. access-Control-Allow-Origin跨域请求安全隐患

    最新的W3C标准里是这么实现HTTP跨域请求的,Cross-Origin Resource Sharing,就是跨域的目标服务器要返回一系列的Headers,通过这些Headers来控制是否同意跨域. ...

  6. jQuery jsonp跨域请求

    跨域的安全限制都是对浏览器端来说的,服务器端是不存在跨域安全限制的. 浏览器的同源策略限制从一个源加载的文档或脚本与来自另一个源的资源进行交互. 如果协议,端口和主机对于两个页面是相同的,则两个页面具 ...

  7. thinkphp 设置跨域请求

    场景:我的本地网页服务器无法访问本地的接口服务器接口提示一下错误:大致意思是:是一个跨域请求我的没有访问该地址的权限(接口服务器采用的是PHP编写) XMLHttpRequest cannot loa ...

  8. 在ASP.NET 5应用程序中的跨域请求功能详解

    在ASP.NET 5应用程序中的跨域请求功能详解 浏览器安全阻止了一个网页中向另外一个域提交请求,这个限制叫做同域策咯(same-origin policy),这组织了一个恶意网站从另外一个网站读取敏 ...

  9. Ajax+Spring MVC实现跨域请求(JSONP)JSONP 跨域

    JSONP原理及实现 接下来,来实际模拟一个跨域请求的解决方案.后端为Spring MVC架构的,前端则通过Ajax进行跨域访问. 1.首先客户端需要注册一个callback(服务端通过该callba ...

随机推荐

  1. 【转】asp.net mvc webapi+angular.js案例

    参考地址:http://www.mamicode.com/info-detail-892383.html 大家好,本文用一个简单的demo演示AngularJS在MVC中的使用,在学习这个demo之前 ...

  2. nginx本地的测试环境添加SSL

    要在本地添加SSL,首先要做的是防火墙是不是放开了443端口,同时,在nginx安装时是不是支持了ssl模块,这个安装网上很容易找到相关资料 防火墙,个人还是用iptables比较直观 先将selin ...

  3. android 解析json数据格式

    json数据格式解析我自己分为两种: 一种是普通的,一种是带有数组形式的: 普通形式的:服务器端返回的json数据格式如下: {"userbean":{"Uid" ...

  4. pptv web前端面试题答案

    这是星期一考完试,答应星期三补上的,代码很简单,就不写注释了 //php快排 function quickSort(&$arr){   $arr_left=new array();   $ar ...

  5. HDU4662+无

    把目标中的 U 转化为 I. 又因为 I的个数是有规律的:1 2 4 8 16 ...再结合可以取消 6 12 18 ...个I...得解 #include<string.h> #incl ...

  6. Foreach语法

    先看例子: Random rand = new Random(47); float f[] = new float[10]; for(int i = 0; i < 10; i++){ f[i] ...

  7. Tomcat架构以及理解sever.xml

    Tomcat架构图 当用户在地址栏输入访问地址后,首先识别访问协议(假设为http),那么通过针对于http协议传输的Connector连接器,连接到tomcat的服务中,连接后开始检测Engine下 ...

  8. <div> 如何布局两个标签的布局

    想做一个div的曾背景颜色是黄绿色,内部有<a>标签. 代码如下: <div align="center" style=" width: 900px;h ...

  9. js-事件委托

    事件委托一般用于动态生成的元素中使用,如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8& ...

  10. (五)backbone - DEMO - 通信录改造之使用requirejs

    DEMO介绍是 DEMO通信录的扩展,使用requirejs模块化整合 大体实现 • model文件 model/contact.js define(function (){ // user cont ...