XSS初体验
主要内容
- 什么是XSS?
 - XSS的危害有哪些?
 - 常见的XSS漏洞
 - 如何防范XSS?
 
什么是XSS?
跨站脚本攻击(Cross Site Scripting),是一种 Web 应用程序的漏洞,当来自用户的不可信数据被应用程序在没有验证以及反射回浏览器而没有进行编码或转义的情况下进行了处理,导致浏览器引擎执行了代码。
XSS的危害有哪些?
- 盗取各类用户帐号,如机器登录帐号、用户网银帐号、各类管理员帐号
 - 控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力;
 - 盗窃企业重要的具有商业价值的资料;
 - 非法转账;
 - 强制发送电子邮件;
 - 网站挂马;
 - 控制受害者机器向其它网站发起攻击。
 - ...
 
常见的XSS漏洞
- 反射型XSS
 - 存储型XSS
 - DOM 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 | 始终设置响应的内容类型和字符集 | 
- 防止 CRLF 注入/HTTP 响应拆分 
参考地址 
终极方案
- 编码
 - 转义
 - 规范书写
 - 预防更改http请求头
 - XSS监控以及上报
 
参考资料
给开发者的终极XSS防护备忘录 
前端XSS防火墙1 
前端XSS防火墙2 
前端XSS防火墙3 
前端XSS防火墙4 
前端XSS防火墙5
XSS初体验的更多相关文章
- 215.Spring Boot+Spring Security:初体验
		
[视频&交流平台] SpringBoot视频:http://t.cn/R3QepWG Spring Cloud视频:http://t.cn/R3QeRZc SpringBoot Shiro视频 ...
 - 省HVV初体验(edu)
		
浙江省HVV初体验 此次参加的HVV是edu分会场,总的来说是对HVV有了一个初步的认识,了解实战和靶场练习之间存在的巨大鸿沟. 经历了这次HVV,对于渗透测试有了更深一步的理解.渗透测试的本质就是信 ...
 - .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
		
不知不觉,“.NET平台开源项目速览“系列文章已经15篇了,每一篇都非常受欢迎,可能技术水平不高,但足够入门了.虽然工作很忙,但还是会抽空把自己知道的,已经平时遇到的好的开源项目分享出来.今天就给大家 ...
 - Xamarin+Prism开发详解四:简单Mac OS 虚拟机安装方法与Visual Studio for Mac 初体验
		
Mac OS 虚拟机安装方法 最近把自己的电脑升级了一下SSD固态硬盘,总算是有容量安装Mac 虚拟机了!经过心碎的安装探索,尝试了国内外的各种安装方法,最后在youtube上找到了一个好方法. 简单 ...
 - Spring之初体验
		
Spring之初体验 Spring是一个轻量级的Java Web开发框架,以IoC(Inverse of Control 控制反转)和 ...
 - Xamarin.iOS开发初体验
		
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKwAAAA+CAIAAAA5/WfHAAAJrklEQVR4nO2c/VdTRxrH+wfdU84pW0
 - 【腾讯Bugly干货分享】基于 Webpack & Vue & Vue-Router 的 SPA 初体验
		
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57d13a57132ff21c38110186 导语 最近这几年的前端圈子,由于 ...
 - 【Knockout.js 学习体验之旅】(1)ko初体验
		
前言 什么,你现在还在看knockout.js?这货都已经落后主流一千年了!赶紧去学Angular.React啊,再不赶紧的话,他们也要变out了哦.身旁的90后小伙伴,嘴里还塞着山东的狗不理大蒜包, ...
 - 在同一个硬盘上安装多个 Linux 发行版及 Fedora 21 、Fedora 22 初体验
		
在同一个硬盘上安装多个 Linux 发行版 以前对多个 Linux 发行版的折腾主要是在虚拟机上完成.我的桌面电脑性能比较强大,玩玩虚拟机没啥问题,但是笔记本电脑就不行了.要在我的笔记本电脑上折腾多个 ...
 
随机推荐
- 解决 'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte
			
"Accept-Encoding": "gzip, deflate", 这条信息代表本地可以接收压缩格式的数据,而服务器在处理时就将大文件压缩再发回客户端,IE ...
 - 魅蓝Note有几种颜色 魅蓝Note哪个颜色好看
			
http://www.pc841.com/shoujizhishi/39882.html http://news.mydrivers.com/1/359/359443.htm 魅族发布首款千元高性价比 ...
 - linux安装mysql5.1.56
			
1.编译安装 > groupadd mysql #创建mysql组 > useradd -g mysql mysql #创建用户mysql并添加到mysql组中,这个用户主要是作为mysq ...
 - 配置Samba服务
			
1. samba服务用在什么地方?samba服务用于把Linux服务器上的文件或者打印接共享给windows或者Linux.2. 在samba服务的配置文件中,[global]配置部分的securit ...
 - Access to the path '....' is denied.解决方法
			
昨天公司项目迁移服务器,从自己服务器迁移到阿里云服务器,部署完成后发现有一个页面要读取磁盘上的静态文件就报错了... 如图: 解决办法: 在 Web.Config 的 <System.Web&g ...
 - MFC 创建选项卡
			
1.创建三个选项卡Dialog窗体,ID分别改为porpTest1.porpTest2.porpTest3 2.创建三个选项卡类,类名分别为CPropTest1.CPropTest2.CPropTes ...
 - Oracle—用户管理的备份(一)
			
用户管理的备份(一) 一.首先要知道数据库中表空间和文件的信息,有几个性能视图,v$datafile,v$tablespace,v$tempfile,v$logfile,v$controlfile,d ...
 - js判断当前操作系统
			
function validataOS(){ if(navigator.userAgent.indexOf(“Window”)>0){ return ”Windows”; }else if(na ...
 - android手电筒开发
			
最近学习android开发,记录学习过程,分享一写小案例 一. 如下先设置好布局文件 <TextView android:id="@+id/textView1" androi ...
 - Dede文章列表
			
文章列表标签的使用: {dede:arclist flag='h' typeid='' row='' col='' titlelen='' infolen='' imgwidth='' imgheig ...
 
			
		
