XSS简介
跨站脚本攻击,英文全称是Cross Site Scrit,本来缩写是CSS,但是为了和层叠样式表(Cascading Style Sheet, CSS)有所区别,所以在安全领域叫做”XSS”.
XSS攻击,通常是指黑客通过”HTML注入”篡改了网页,插入了恶意的脚本,从而在用户浏览网页时,控制用户浏览器的一种攻击.在一开始,这种攻击的演示案例是跨域的,所以叫做”跨站脚本”.但是发展到今天,是否跨域已经不再重要.
那么什么是XSS呢?看看下面的例子:
假设一个页面把用户输入参数直接输出到页面上:
<?php
$input = $_GET["param"];
echo "<div>".$input."</div>";
?>
在正常情况下,用户向param提交的数据会展示到页面中,比如提交:
http://www.a.com/test.php?param=这是一个测试!
但是如果提交一段HTML代码:
http://www.a.com/test.php?param=<script>alert(/xss/)</script>
会发现,alert(/xss/)在当前页面执行了.
用户输入的Script脚本已经被写入页面中,而这显然是开发者所不希望看到的.上面这个例子,就是XSS的第一种类型:反射型XSS.
XSS根据效果的不同可以分成如下几类.
反射型XSS
反射型XSS只是简单地把用户输入的数据”反射”给浏览器.也就是说,黑客往往需要诱使用户”点击”一个恶意链接,才能攻击成功.反射型XSS也叫做”非持久”
存储型XSS
存储型XSS会把用户输入的数据”存储”在服务器端.这种XSS具有很强的稳定性.比较常见的一个场景就是,黑客写下一篇包含恶意JavaScript代码的博客文章,文章发表后,所有访问该博客的用户,都会在它们的浏览器中执行这段恶意的JavaScript代码.黑客把恶意的脚本保存到服务端,所以这种XSS攻击就叫做”存储型XSS”.
DOM Based XSS
实际上,这种类型的XSS并非按照”数据是否保存在服务器端”来划分,DOM Based XSS从效果上来说也是反射型XSS.单独划分出来,是因为DOM Based XSS的形成原因比较特别.通过修改页面的DOM节点形成的XSS,称之为DOM Based XSS