XSS攻击

XSS攻击

简介

跨站脚本攻击(Cross,Site,Script,为了区别CSS,故叫XSS)指的是恶意攻击者往Web应用里插入恶意代码,当用户浏览该网站时,嵌入Web页面的代码会自动执行,达到恶意用户的特殊目的。
XSS攻击

攻击原理

因为浏览器本身的设计缺陷,浏览器只负责解释执行html+css+javascript代码,并不会检验其安全性。故如果你的服务器对没有对XSS漏洞准备安全的预防措施,都会存在XSS漏洞。

XSS分类

  • 持久性的XSS(存储性)

它一般发生在XSS攻击向量(一般指XSS攻击代码)存储在网站数据库,当一个页面被用户打开的时候执行。持久的XSS相比非持久性XSS攻击危害性更大,容易造成蠕虫,因为每当用户打开页面,查看内容时脚本将自动执行。

该网页有一个发表评论的功能,该评论会写入后台数据库,并且访问主页的时候,会从数据库中加载出所有的评论。

当我添加一个评论,并且暗藏一个脚本,如下图:

XSS攻击

当别人访问主页的时候,刚刚黑客写入的评论里面的脚本被浏览器当成代码执行了,用户莫名其妙受到攻击:

XSS攻击

上面就是两种XSS攻击的两种基本类型。当然黑客不会弹出一个框框给你,告诉你被攻击,黑客不会这么傻的~他可以在用户不知情的情况下,盗取用户的cookie,改变网页业务逻辑等等。

数据流向:浏览器 -> 后端 -> 数据库 -> 后端 -> 浏览器。

  • 反射性

将用户输入的存在XSS攻击的数据,发送给后台,后台并未对数据进行存储,也未经过任何过滤,直接返回给客户端。被浏览器渲染。就可能导致XSS攻击;

反射型 XSS 的数据流向是:浏览器 -> 后端 -> 浏览器。

  • DOM 型 XSS

DOM 型 XSS 的攻击步骤:

1.攻击者构造出特殊的 URL,其中包含恶意代码。

2.用户打开带有恶意代码的 URL。

3.用户浏览器接收到响应后解析执行,前端 JavaScript 取出 URL 中的恶意代码并执行。

4.恶意代码窃取用户数据并发送到攻击者的网站,或者冒充用户的行为,调用目标网站接口执行攻击者指定的操作。

DOM 型 XSS 跟前两种 XSS 的区别:DOM 型 XSS 攻击中,取出和执行恶意代码由浏览器端完成,属于前端 JavaScript 自身的安全漏洞,而其他两种 XSS 都属于服务端的安全漏洞。

纯粹发生在客户端的XSS攻击,比如:http://www.some.site/page.html?default=French

DOM-XSS 的数据流向是:URL–>浏览器

有哪些危害

1、盗取各类用户帐号
2、控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力
3、盗窃企业重要的具有商业价值的资料
4、非法转账
5、强制发送电子邮件
6、网站挂马
7、控制受害者机器向其它网站发起攻击

防御手段

XSS的防御可以从前端着手,也可以从后端着手。总的来说,从后端做防御比较安全

SpringBoot防XSS攻击

最常见的是用Filter来预防 , 就是创建一个新的httpRequest类XsslHttpServletRequestWrapper,然后重写一些get方法(获取参数时对参数进行XSS判断预防).

参考链接:https://blog.csdn.net/xingbaozhen1210/article/details/78860079

Spring MVC防XSS攻击

参考链接:https://blog.csdn.net/xingbaozhen1210/article/details/78774965

参考文献

[^1 ] XSS攻击原理分析与防御技术

[^2 ] 前端xss攻击

[^3 ] 如何让前端更安全?——XSS攻击和防御详解

[^4 ] 如何用前端防御XSS及建立XSS报警机制