主要内容


  • 什么是XSS?
  • XSS的危害有哪些?
  • 常见的XSS漏洞
  • 如何防范XSS?
 

什么是XSS?


跨站脚本攻击(Cross Site Scripting),是一种 Web 应用程序的漏洞,当来自用户的不可信数据被应用程序在没有验证以及反射回浏览器而没有进行编码或转义的情况下进行了处理,导致浏览器引擎执行了代码。

 

XSS的危害有哪些?


  • 盗取各类用户帐号,如机器登录帐号、用户网银帐号、各类管理员帐号
  • 控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力;
  • 盗窃企业重要的具有商业价值的资料;
  • 非法转账;
  • 强制发送电子邮件;
  • 网站挂马;
  • 控制受害者机器向其它网站发起攻击。
  • ...
 

常见的XSS漏洞


  • 反射型XSS
  • 存储型XSS
  • DOM XSS
  • 突变XSS
 

反射型XSS


又叫非持久型XSS,当不可信的用户输入被服务器在没有任何验证下处理并在没有编码或转义的情况下反射回响应文中,导致代码在浏览器执行的一种 XSS 漏洞。



正常效果 
XSS效果

xss攻击参数:";alert('xss');//

产生原因:服务端未对参数就行编码或者转义导致
采用任何一种php提供的方法进行编码都可以过滤XSS
$name = htmlspecialchars($_GET['name']);
 

存储型XSS

又叫持久型XSS是当不可信的用户输入被处理并在没有任何验证的情况下保存在文件或数据库,同时该不可信的数据从存储中被获取然后在没有编码或转义的情况下反射回响应文中,导致了永久性的每次存储数据反射回响应文代码就会在浏览器中执行的一种XSS漏洞。

 

DOM XSS


数据来源在 DOM 中,接收器也在 DOM 中,而数据流从来没有离开浏览器。它发生在一个不可信的数据在源中被给予并被执行,结果导致修改了 DOM 在浏览器中的“环境”。DOM XSS 攻击发生在不可信数据相对于上下文没有被编码或转义的情况下。


效果地址

普通图片地址:http://p1.qhimg.com/t010c1d27667bbe0417.png

XSS地址:http://p1.qhimg.com/t010c1d27667bbe0417.png" onload="javascript:alert(document.cookie);
 

突变XSS


mXSS 或突变 XSS 是当不可信数据在 DOM 的 innerHTML 属性的上下文被处理并通过浏览器发生突变,导致变成一种有效的 XSS 向量的一种 XSS 漏洞。在 mXSS,一个看起来无害的可以通过客户端或服务端XSS过滤器的用户指定的数据通过浏览器执行引擎发生突变可以反射回一个有效的 XSS 向量。XSS 过滤器不能防止 mXSS。为了防止 mXSS,应实施有效的 CSP,框架应该不被允许,HTML 文档应该定义文档类型,强制浏览器遵循标准呈现内容以及执行脚本。

 

很难理解!!!


 

简单的说


正常输入没有问题,在浏览器再次解析的时候出现了问题。

 

还是挺绕的~~~


看看这里吧

 

扩展


  • UXSS:是通过浏览器或者浏览器扩展的漏洞来"制作XSS漏洞"
  • CSRF:跨站请求伪造

参考

 

如何进行防范呢?


  • 验证输入并且基于语境和按照正确的顺序转义不可信数据 
    浏览器的解析顺序:html->css->js 
    浏览器的解码顺序:html->url->js

  • 始终遵循白名单优于黑名单的做法 
    因为黑名单的集合是无限的,我们不能考虑到各种情况

  • 使用 UTF-8 为默认的字符编码以及设置 content 为 text/html

  • 不要将用户可以控制的文本放在标签前。通过使用不同的字符集注射可以导致 XSS。
  • 使用推荐的 HTTP 响应头进行 XSS 防护


HTTP响应头 描述
X-XSS-Protection: 1; mode=block 该响应头会开启浏览器的防XSS 过滤器。
X-Frame-Options: deny 该响应头会禁止页面被加载到框架。
X-Content-Type-Options: nosniff 该响应头会阻止浏览器做MIMEtype
Content-Security-Policy: default-src 'self' 该响应头是防止 XSS 最有效的解决方案之一。它允许我们定义从 URLS 或内容中加载和执行对象的策略
Set-Cookie: key=value; HttpOnly Set-Cookie 响应头通过HttpOnly 标签的设置将限制JavaScript 访问你的 Cookie。
Content-Type: type/subtype;charset=utf-8 始终设置响应的内容类型和字符集
 

终极方案


  • 编码
  • 转义
  • 规范书写
  • 预防更改http请求头
  • XSS监控以及上报
 

参考资料


给开发者的终极XSS防护备忘录 
前端XSS防火墙1 
前端XSS防火墙2 
前端XSS防火墙3 
前端XSS防火墙4 
前端XSS防火墙5

XSS初体验的更多相关文章

  1. 215.Spring Boot+Spring Security:初体验

    [视频&交流平台] SpringBoot视频:http://t.cn/R3QepWG Spring Cloud视频:http://t.cn/R3QeRZc SpringBoot Shiro视频 ...

  2. 省HVV初体验(edu)

    浙江省HVV初体验 此次参加的HVV是edu分会场,总的来说是对HVV有了一个初步的认识,了解实战和靶场练习之间存在的巨大鸿沟. 经历了这次HVV,对于渗透测试有了更深一步的理解.渗透测试的本质就是信 ...

  3. .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验

    不知不觉,“.NET平台开源项目速览“系列文章已经15篇了,每一篇都非常受欢迎,可能技术水平不高,但足够入门了.虽然工作很忙,但还是会抽空把自己知道的,已经平时遇到的好的开源项目分享出来.今天就给大家 ...

  4. Xamarin+Prism开发详解四:简单Mac OS 虚拟机安装方法与Visual Studio for Mac 初体验

    Mac OS 虚拟机安装方法 最近把自己的电脑升级了一下SSD固态硬盘,总算是有容量安装Mac 虚拟机了!经过心碎的安装探索,尝试了国内外的各种安装方法,最后在youtube上找到了一个好方法. 简单 ...

  5. Spring之初体验

                                     Spring之初体验 Spring是一个轻量级的Java Web开发框架,以IoC(Inverse of Control 控制反转)和 ...

  6. Xamarin.iOS开发初体验

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKwAAAA+CAIAAAA5/WfHAAAJrklEQVR4nO2c/VdTRxrH+wfdU84pW0

  7. 【腾讯Bugly干货分享】基于 Webpack & Vue & Vue-Router 的 SPA 初体验

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57d13a57132ff21c38110186 导语 最近这几年的前端圈子,由于 ...

  8. 【Knockout.js 学习体验之旅】(1)ko初体验

    前言 什么,你现在还在看knockout.js?这货都已经落后主流一千年了!赶紧去学Angular.React啊,再不赶紧的话,他们也要变out了哦.身旁的90后小伙伴,嘴里还塞着山东的狗不理大蒜包, ...

  9. 在同一个硬盘上安装多个 Linux 发行版及 Fedora 21 、Fedora 22 初体验

    在同一个硬盘上安装多个 Linux 发行版 以前对多个 Linux 发行版的折腾主要是在虚拟机上完成.我的桌面电脑性能比较强大,玩玩虚拟机没啥问题,但是笔记本电脑就不行了.要在我的笔记本电脑上折腾多个 ...

随机推荐

  1. linux下javaEE系统安装部署

    最近公司在将服务器往阿里云上面迁移,所以需要重新在linux上面安装相关的软件以及部署项目,这里用到的linux版本为centos7.0,需要安装的软件有 jdk1.7.mysql5.6.mongo3 ...

  2. (转)Maven实战(一)安装与配置

    1. 简介 Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具. 如果你已经有十次输入同样的Ant targets来编译你的代码.jar或者w ...

  3. Qt读取JSON和XML数据

    QJSON JSON(JavaScript Object Notation)是一个轻量级的数据交换格式; 可以将数据以name/value的形式任意组合; QJson 是一个基于Qt的库, 将JSON ...

  4. 视图的touch事件的传播控制

    在视图控制器类中.self.view中会包含多个多层的自己定义视图. 我自己定义了一个uicollectionview类,名称为gridview,又自己定义了一个uicollectionviewcel ...

  5. IE浏览器开启对JavaScript脚本的支持

    在IE浏览器的"工具"菜单中选择"internet选项",在弹出命令对话框中选择"安全"选项卡.在该选项卡下的"该区域的安全级别& ...

  6. oracle 性能优化--索引总结

    索引是建立在表的一列或多个列上的辅助对象,目的是加快訪问表中的数据: Oracle存储索引的数据结构是B*树.位图索引也是如此,仅仅只是是叶子节点不同B*数索引: 索引由根节点.分支节点和叶子节点组成 ...

  7. iOS 蓝牙4.0开发

    背景: 1.iOS的蓝牙不能用来传输文件.2.iOS与iOS设备之间进行数据通信,使用gameKit.framework3.iOS与其他非iOS设备进行数据通信,使用coreBluetooth.fra ...

  8. centos7编译安装MySQL5.7.9

    title: centos7编译安装MySQL5.7.9 date: 2016-05-12 16:20:17 tags: --- Centos7编译安装mysql5.7.9 mysql5.7有更好的性 ...

  9. Tree( 树) 组件[2]

    本节课重点了解 EasyUI 中 Tree(树)组件的使用方法, 这个组件依赖于 Draggable(拖动)和 Droppable(放置)组件.一. 异步加载如果想从数据库里获取导航内容, 那么就必须 ...

  10. js字符串转json

    1,eval方式解析,这是最早的解析方式了.如下: 代码如下: function strToJson(str){ var json = eval('(' + str + ')'); return js ...