这节主要讲述XSS的基本概念和攻击原理。

一 XSS基本概念

人们经常将跨站脚本攻击(Cross Site Scripting)缩写为CSS,但这会与层叠样式表(Cascading Style Sheets,CSS)的缩写混淆。因此,有人将跨站脚本攻击缩写为XSS。

跨站脚本攻击(XSS),是最普遍的Web应用安全漏洞。这类漏洞能够使得攻击者嵌入恶意脚本代码到正常用户会访问到的页面中,当正常用户访问该页面时,则可导致嵌入的恶意脚本代码的执行,从而达到恶意攻击用户的目的。

二 攻击原理

XSS的形成根因在于攻击者精心构造的非法输入在受害者浏览器处解析为代码,被浏览器执行,从而造成损害。如果网站使用MVC架构,那么XSS就发生在View层,在应用拼接变量到HTML页面时发生。

根据攻击方式不同,XSS又分为反射型XSS、存储型XSS和基于Dom的XSS,三种类型。

2.1 反射型XSS

反射型XSS,也叫非持久型XSS。攻击者构造一个包含脚本的URL,并让正常用户打开这个url,这样XSS代码出现在请求URL中,作为参数提交到服务器,服务器对参数没有进行XSS相关处理,直接解析并响应。响应结果中包含XSS代码,最后浏览器解析并执行。

攻击过程中恶意数据被服务器“反弹”给用户的浏览器,故称为反射型XSS。

特点:反射型XSS主要服务端没有对外来数据进行XSS处理,就直接发送给浏览器,导致出现XSS攻击。

实例:

A是攻击者,B是被攻击者,X是网站

1)A构造了一个包含恶意脚本参数的url,这个url的域名是X网站;

例如:http://x.com/?name=<script>alert("hey!");</script>

说明:上边构造的name参数,值是一个脚本,这个脚本里的JavaScript代码很有可能会执行一些有危害的操作,例如:自动购买、删除等恶意操作。

2)A将这个URL通过各种方式发送给B,B点击这个链接;

3)X网站后台将对应链接内容参数解析,并将name参数值当做页面内容直接返回给B的浏览器;

注意:这里X网站后台没有对name参数进行XSS处理。

4)B的浏览器中直接执行A构造的脚本,导致攻击成功。

注意:这种url中构造的脚本参数,chrome浏览器做了安全防护,是无法执行的,而firefox是可以执行的。

黑客往往通过电子邮箱等方式诱惑用户点击某个恶意链接,才能攻击成功。这种情况下,受害者相对较少。

2.2 存储型XSS

存储型XSS,也叫持久型XSS,主要是将XSS代码发送到服务器(不管是数据库、内存还是文件系统等),然后在下次请求页面的时候,服务器从数据库中读取数据,没有做XSS相关处理,直接输出给浏览器,导致攻击代码被执行。

实例:

最典型的就是留言板XSS。用户提交了一条包含XSS代码的留言到数据库。当目标用户查询留言时,那些留言的内容会从服务器解析之后加载出来。浏览器发现有XSS代码,就当做正常的HTML和JS解析执行。XSS攻击就发生了。

2.3 基于DOM的XSS

这种情况不依赖于是否将恶意程序放置于服务器,而是修改页面的DOM节点,效果上说也属于反射型XSS。例如,攻击者输入恶意字符串,构建出带有恶意程序的html页面,然后诱导用户点击,点击后,将造成xss攻击。

三 XSS的根因

XSS之所以会发生,就是由于在输出不可信数据到浏览器的时候,没有对数据中潜藏的可执行代码做处理,导致代码被浏览器执行。

四 参考资料

https://www.cnblogs.com/mao2080/p/9460397.html

https://baike.baidu.com/item/XSS攻击/954065?fr=aladdin

XSS详解【1】---基本概念和攻击原理的更多相关文章

  1. IPv6技术详解:基本概念、应用现状、技术实践(下篇)

    本文来自微信技术架构部的原创技术分享. 1.前言 在上篇<IPv6技术详解:基本概念.应用现状.技术实践(上篇)>,我们讲解了IPV6的基本概念. 本篇将继续从以下方面展开对IPV6的讲解 ...

  2. IPv6技术详解:基本概念、应用现状、技术实践(上篇)

    本文来自微信技术架构部的原创技术分享. 1.前言 普及IPV6喊了多少年了,连苹果的APP上架App Store也早已强制IPV6的支持,然并卵,因为历史遗留问题,即使在IPV4地址如果饥荒的情况下, ...

  3. 【详细解析】MySQL索引详解( 索引概念、6大索引类型、key 和 index 的区别、其他索引方式)

    [详细解析]MySQL索引详解( 索引概念.6大索引类型.key 和 index 的区别.其他索引方式) MySQL索引的概念: 索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分 ...

  4. Shiro 安全框架详解二(概念+权限案例实现)

    Shiro 安全框架详解二 总结内容 一.登录认证 二.Shiro 授权 1. 概念 2. 授权流程图 三.基于 ini 的授权认证案例实现 1. 实现原理图 2. 实现代码 2.1 添加 maven ...

  5. Shiro 安全框架详解一(概念+登录案例实现)

    shiro 安全框架详细教程 总结内容 一.RBAC 的概念 二.两种常用的权限管理框架 1. Apache Shiro 2. Spring Security 3. Shiro 和 Spring Se ...

  6. HTTPS详解二:SSL / TLS 工作原理和详细握手过程

    HTTPS 详解一:附带最精美详尽的 HTTPS 原理图 HTTPS详解二:SSL / TLS 工作原理和详细握手过程 在上篇文章HTTPS详解一中,我已经为大家介绍了 HTTPS 的详细原理和通信流 ...

  7. RocketMQ详解(四)核心设计原理

    专题目录 RocketMQ详解(一)原理概览 RocketMQ详解(二)安装使用详解 RocketMQ详解(三)启动运行原理 RocketMQ详解(四)核心设计原理 RocketMQ详解(五)总结提高 ...

  8. Java网络编程和NIO详解6:Linux epoll实现原理详解

    Java网络编程和NIO详解6:Linux epoll实现原理详解 本系列文章首发于我的个人博客:https://h2pl.github.io/ 欢迎阅览我的CSDN专栏:Java网络编程和NIO h ...

  9. RocketMQ详解(三)启动运行原理

    专题目录 RocketMQ详解(一)原理概览 RocketMQ详解(二)安装使用详解 RocketMQ详解(三)启动运行原理 RocketMQ详解(四)核心设计原理 RocketMQ详解(五)总结提高 ...

随机推荐

  1. kthrotlds(WatchDogs变种)查杀方法

    病毒现象 服务器出现卡顿.CPU飙升 以下为WatchDogs的判断方式及其命令:存在恶意进程watchdogs: ps -ef | grep watchdogs存在恶意进程ksoftirqds: p ...

  2. 给test函数加个装饰器!

    import timedef timer(func): def deco(*args,**kwargs): start_time=time.time() func(*args,**kwargs) st ...

  3. 小白的linux笔记3:对外联通——开通ssh和ftp和smb共享

    1.SSH的开通.https://www.cnblogs.com/DiDiao-Liang/articles/8283686.html 安装:yum install sshd或yum install ...

  4. centos7安装opencv3.4.1(同样适用于最新版本4.2.0)

    安装cmake3: echo '[group_kdesig-cmake3_EPEL]name=Copr repo for cmake3_EPEL owned by @kdesigbaseurl=htt ...

  5. JUnit套件测试(共通类测试)

    @RunWith(Suite.class)@Suite.SuiteClasses({ TestClass1.class, TestClass2.class })public class SuiteTe ...

  6. C语言简单编译预处理-笔记

    预处理指令 所谓预处理,是指,在编译之前对程序源码进行初步的转换,产生新的源代码提供给编译器.预处理时主要完成:包含其他源文件,定义宏,根据条件决定编译时是否包含某些代码(>防止重复包含某些文件 ...

  7. ROS之usb_cam

    source devel/setup.*sh roslaunch usb_cam usb_cam-test.launch rqt_graph查看动态消息图 当我们把鼠标放在/usb_cam/image ...

  8. 吴裕雄--天生自然HADOOP操作实验学习笔记:tf-idf算法

    实验目的 通过实验了解tf-idf算法原理 通过实验了解mapreduce的更多组件 学会自定义分区,读写缓存文件 了解mapreduce程序的设计方法 实验原理 1.TF-IDF简介 TF-IDF( ...

  9. Java【第一课 java基本结构】

    一.java基本结构 上面是java的基本组成,包括外层的框架.java入口程序框架 二.java的第一个程序 首先创建一个文件,名字叫做helloworld.java,后缀名为java public ...

  10. Vue图片验证码-自定义组件高级版

    最近项目中要用到图片验证码,网上一查有很多,基本都是千篇一律的4位纯数字验证码.首先得感谢那位一代目兄台提供的模板,由于不能满足需求,所以对其进行了改造升级. 经改造的图片验证码能满足一下情形使用:① ...