XSS 简介
跨站脚本攻击,英文全称是 Cross Site Script,本来缩写是CSS,但是为了和层叠样式表(Cascading Style Sheet,CSS)有所区别,所以在安全领域叫做“XSS”。
XSS 攻击,通常指黑客利用网站没有对用户提交数据进行转义处理或者过滤不足的缺点,从而通过“HTML注入”篡改了网页,插入了恶意的脚本,然后在用户浏览网页时,控制用户浏览器(盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害)的一种攻击方式。
XSS 危害
-
盗取各类用户帐号,如机器登录帐号、用户网银帐号、各类管理员帐号
-
控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力
-
盗窃企业重要的具有商业价值的资料
-
非法转账
-
强制发送电子邮件
-
网站挂马
-
控制受害者机器向其它网站发起攻击
XSS 分类
反射型 XSS
反射型 XSS 也叫做“非持久型XSS”(Non-per-sistent XSS),它是最常见的类型的 XSS。
反射型 XSS 只是简单地把用户输入的数据“反射”给浏览器。也就是说,黑客往往需要诱使用户“点击”一个恶意链接,才能攻击成功。
简单例子
假设一个页面把用户输入的参数直接输出到页面上:
// test.php
<?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>
此时页面源码以及嵌入 <script>alert(/xss/)</script>
,那么 alert(/xss/)
将会在当前页面执行,而这显然不是开发者所希望看到的,对于黑客来说这样就完成了一次攻击了。
存储型 XSS
存储型 XSS 通常也叫做“持久型XSS”(Persistent XSS),因为从效果上来说,它存在的时间是比较长的。
存储型 XSS 会把用户输入的数据“存储”在服务器端。这种 XSS 具有很强的稳定性。
简单例子
假设在文章下面的评论区有这样的一个评论表单提交代码:
<input type="text" name="content" value="这里是用户填写的数据">
正常情况
用户提交正常的评论内容(如 “这是一篇好文章啊!”),然后该评论内容将存储到数据库中。等其他用户查看该文章时,从数据库将评论内容取出并显示。
非正常情况
黑客提交 <script>alert(/xss/)</script>
这样的评论内容,然后该评论内容将存储到数据库中。等其他用户查看该文章时,从数据库中取出并显示,此时浏览器将执行这段攻击代码。
DOM Based XSS
实际上,这种类型的 XSS 并非按照“数据是否保存在服务器端”来划分,DOM Based XSS 从效果上来说也是反射型 XSS。单独划分出来,是因为 DOM Based XSS 的形成原因比较特别,发现它的安全专家专门提