XSS初体验

主要内容


  • 什么是XSS? {:&.moveIn}
  • 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 {:&.moveIn}
  • 不要将用户可以控制的文本放在标签前。通过使用不同的字符集注射可以导致 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 始终设置响应的内容类型和字符集

终极方案


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

参考资料



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

时间: 2024-08-03 22:56:06

XSS初体验的相关文章

安全初体验

最近尝试在几个高校跟各个学生来讲安全入门的一些东西,我把这个称谓安全初体验,我说是从抓肉鸡开始,但是讲完后,同学们都一脸茫然,不知道我说的是什么,可能是我的入口点没有找对,那么我现在就将网络上以及一些自己整理的安全入门的东西分享给大家,希望能够对想进入这个行业的同学一点帮助吧. 首先进入这个行业,我们需要一个背影,看着这个背影来不断的成长,给我们精神上的支持和寄托,因为这个行业的门槛相对还是比较高的,有了这个背影,我们才能够在每一个孤单寂寞的夜里,不断的坚持前行,永不放弃.我想每个在这个行业坚持

erlang 初体验

最近测试了一下 erlang的坑... 如不出意外.... 大家第一眼看到这语法... 心里第一句一定是"我擦.这TM都是啥!!!!!" 没有变量!!! 没有结构体!!! 没有循环!!! 好吧,至少我是这样想的. 找了半天..连个if也不知道怎么写.. 这记录一些基本常识.. -module(module_name)  %%定义模块 括号内的要和文件名相同. -export([fun1/1 fun2/2]) %%这里是导出2个函数对外使用  函数名/参数名. 一个简单的函数定义如下 f

linux初体验

第一次听到linux这个'词语'是在一次偶然的朋友聊天中朋友提到的,之前压根没听到过'这个东西',所以我可以说是个linux的新新手,菜鸟都不算. 截至到目前,我已经开始linux系统运维学习有差不多10天时间了.在没接触linux之前,我对它的认识仅仅是:它是个计算机系统.决定学习linux系统运维之前,自我以为运维应该是对系统的一些日常维护之类的,不会很难的东西,我更希望运维是个不难的东西,我个人很笨,对难的东西可能接受的很慢,所以我愿意认为运维是很简单的,这样我就可以轻轻松松的掌握运维相关

【Spark深入学习 -15】Spark Streaming前奏-Kafka初体验

----本节内容------- 1.Kafka基础概念 1.1 出世背景 1.2 基本原理 1.2.1.前置知识 1.2.2.架构和原理 1.2.3.基本概念 1.2.4.kafka特点 2.Kafka初体验 2.1 环境准备 2.2 Kafka小试牛刀 2.2.1单个broker初体验 2.2.2 多个broker初体验 2.3 Kafka分布式集群构建 2.3.1 Kafka分布式集群构建 2.3.2 Kafka主题创建 2.3.3 生产者生产数据 2.3.4消费者消费数据 2.3.5消息的

Java8初体验(二)Stream语法详解

原文链接:http://ifeve.com/stream/ 1. Stream初体验 我们先来看看Java里面是怎么定义Stream的: A sequence of elements supporting sequential and parallel aggregate operations. 我们来解读一下上面的那句话: Stream是元素的集合,这点让Stream看起来用些类似Iterator: 可以支持顺序和并行的对原Stream进行汇聚的操作: 大家可以把Stream当成一个高级版本的

hibernate--CRUD初体验

hibernate的crud操作初体验. 看具体实例 package com.fuwh.model; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import org.hibernate.annotations.GenericGenerator; @Entity publ

Oracle SQL篇(一)null值之初体验

    从我第一次正式的写sql语句到现在,已经超过10年的时间了.我写报表,做统计分析和财务对账,我一点点的接触oracle数据库,并尝试深入了解.这条路,一走就是10年,从充满热情,到开始厌倦,我不知道我还能坚持多久,未来的路,谁知道呢? 也许是该抓紧时间,做一点什么了,我不知道该开始写些什么,我从来没有在网上写东西的习惯.     先从简单的开始吧,那当然就是SQL,这是我SQL系列的第一篇,希望我能够坚持. 在Oracle数据库中,如果一个表中的列没有值的话,我们可以说是空值,比如IT员

AngularJS路由系列(3)-- UI-Router初体验

本系列探寻AngularJS的路由机制,在WebStorm下开发. AngularJS路由系列包括: 1.AngularJS路由系列(1)--基本路由配置2.AngularJS路由系列(2)--刷新.查看路由,路由事件和URL格式,获取路由参数,路由的Resolve3.AngularJS路由系列(3)-- UI-Router初体验4.AngularJS路由系列(4)-- UI-Router的$state服务.路由事件.获取路由参数5.AngularJS路由系列(5)-- UI-Router的路由

Android Studio初体验之启动AVD模拟器异常:cannot set up guest memory 'pc.ram'

启动AVD模拟器异常:Cannot set up guest memory 'pc.ram' 错误信息: HAX is working and emulator runs in fast virt mode Cannot set up guest memory 'pc.ram': Invalid argument Error accepting connect 分析 各种查资料,没有发现网上有同样问题的,在一篇相关文章中找到类似的解决方法. 从语意看,应该是hax安装后没有启动.(不懂hax是什