什么是XSS攻击

XSS全称Cross-Site Script,由于和层叠样式表CSS同名,故改名XSS,即跨站脚本攻击。其原理是攻击者向有XSS漏洞的网站中输入恶意的HTML代码,当其它用户浏览该网站时,这段HTML代码会自动执行,从而达到攻击的目的。攻击者因此可以窃取用户的Cookie等信息。

XSS攻击之前,先要找到一个存在XSS漏洞的网站。XSS漏洞分为两种,一种叫DOM Based XSS漏洞,另一种叫Stored XSS漏洞。理论上,所有可输入的地方没有对输入数据进行处理的话,都会存在XSS漏洞。

DOM Based XSS

Dom Based XSS是一种基于网页DOM结构的攻击,该攻击特点是中招的人是少数人。

当我登录a.com后,发现它的页面某些内容是根据url中的一个叫content参数直接显示的。猜测它的页面处理可能是这样的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<!DOCTYPEhtmlPUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<title>XSS测试</title>

</head>

<body>

页面内容:<%=request.getParameter("content")%>

</body>

</html>

我知道Tom也注册了该网站,并且知道他的邮箱或者其它联系方式,我做一个超链接发给他,超链接的地址为http://www.a.com?content=,当Tom点击这个链接的时候(假设他已经登录a.com),浏览器就会直接打开b.com,并且把Tom在a.com中的cookie信息发送到b.com。b.com是我搭建的网站,当我的网站接收到该信息时,我就盗取了Tom在a.com的cookie信息。cookie信息中可能存有登录密码,这也是为什么现在大部分网站都不会把密码存在cookie中的原因,就算存入cookie也都会加密。这个过程中,受害者只有Tom自己。所以说,DOM Based XSS攻击中招的人只有少数人。

Stored XSS

Stored XSS是存储式XSS漏洞,由于其攻击代码已经存储到服务器上或者数据库中,所以受害者是很多人。

a.com可以发文章,我登录后在a.com中发布了一篇文章,文章中包含了恶意代码,。这时Tom和Jack看到了我发布的文章,当在查看我的文章时就都中招了,他们的cookie信息都发送到了我的服务器上,这个过程中,受害者是多个人。

Stored XSS漏洞危害性更大,危害面更广。

XSS防御

有XSS漏洞攻击就有XSS防御措施,如果代码够严谨的话,攻击者就无从下手。

要做到永远不相信用户的输入,需要对用户的输入进行处理,只允许输入合法的值,其它值一概过滤掉。假如某些情况下,我们不能对用户数据进行严格的过滤,那么我们也需要对标签进行转换。

avatar

chilihotpot

You Are The JavaScript In My HTML