一、基本介绍
跨站脚本攻击简称XSS,是一种网站应用程序漏洞,是代码注入漏洞的一种,攻击者可以通过这个漏洞向网页中注入恶意代码,导致用户浏览器加载网页、渲染HTML文档时执行攻击者代码。
二、分类
1.成因分类
反射型XSS,存储型XSS,DOM型XSS
2.输出点分类
输出在HTML属性中,输出在CSS代码中,输出在JavaScript中
三、介绍
1.反射型XSS漏洞
XSS代码作为客户端输入的内容提交给服务端,服务端解析后,在响应内容中返回输入的XSS代码,最终在浏览器解释器执行,原型如下:
<?php
echo 'your input:' . $_GET[' input '];
?>
客户端输入的input值未经过任何过滤便直接输出,所以攻击者可以提交
http://csdn.com/xss.php?input=<script>alter(/xss/)</script>
在服务端对客户端输入的内容进行解析后,echo语句会将客户端输入的代码完整地输出到HTTP响应中,浏览器解析并执行。
2.存储型XSS漏洞
在于提交的XSS代码是否会存储在服务端,下次请求该网页时是否需要再次提交XSS代码。存储型XSS典型应用有留言板,在线聊天室,邮件服务等,攻击者提交包含XSS代码的留言后,服务端会将其存储与数据库中,其他用户访问网页查看留言时,服务端将从数据库中查询已有的留言并输出在HTTP响应中,原型如下:
<html>
<head>
<title>GuestBook v1.0</title>
<meta charset="utf-8">
</head>
<body>
<form method = "post">
昵称:<input type="text" name="nickname"><br>
内容:<textarea name="content"></textarea><br>
<input type="submin" name="submit" value="提交留言">
</form>
<hr>
<?php>
$conn = mysql_connect("localhost","root","root");
if (! $conn) {
die('could not connect: ' . mysql_error());
}
mysql_select_db("guestbook",$conn);
if (isset($_POST['submit'])) {
$nickname = $_POST['nickname'];
$content = $_POST['content'];
mysql_query("INSERT INTO guestbook (nickname,content) VALUES ('Snickname', '$content')");
}
$result = mysql_query("SELECT * FROM guestbook");
while(&row = mysql_fetch_array($result)) {
echo $ row['nickname'] . ":" . $row['content'] . '<br>';
}
mysql_close($conn);
?>
</body>
</html>
攻击者提交留言<script>alter(/xss/)</script>后,服务端存储留言,其他用户访问网页时执行恶意代码。
3.DOM型XSS漏洞
DOM XSS的XSS代码不需要在服务端解析响应的直接参与,触发XSS的是浏览器的DOM解析,原型如下:
<html>
<head>
<title>DOM XSS</title>
<meta charset="utf-8">
</head>
<body>
<div id="area"></div>
<s