第一
XSS是什么:
跨站脚本攻击,
是一种通过"HTML注入"篡改网页,插入恶意脚本,当用户浏览网页时,实现控制用户浏览器的一种攻击方式。
第二
XSS的分类:
储存型:
1 攻击者写携带xss脚本的留言内容 提交给后端的web应用程序 web应用程序将恶意的留言保存到数据库中
2 用户访问有XSS脚本的浏览器页面 浏览器向后端的web应用程序请求页面内容 web应用程序查询数据库
数据库将带有xss脚本的留言返回给web应用程序 web应用程序在传给浏览器 最终触发xss
反射型
原理解析
前端代码:
<body>
Weclome
<img src="#" onerror="alert(/xss/)"> /*alert是弹出对话框*/
</body>
直接输入到前端时,被xss脚本利用
后端代码:
<?php
header("Content=Type:text/html;charset=utf-8");
if (isset($_REQUEST["name"])) //获取name isset在php中用来判断变量是否声明
{
$name = $_REQUEST["name"];
}
else
{
$name = "";
}
echo "Weclome ".$name //输出参数
?> /*代码意思是:获取name然后直接输出到客户端*/
用户在浏览器中访问有xss脚本的链接 浏览器向后端的web应用程序发送请求 web应用程序将url中的xss脚本数据写入到响应页面并返回给浏览器 浏览器渲染响应页面并触发xss
DOM型xss
//html中的代码
<span id="errorMsg">
Fail.
<img src="#" onerror="alert(/xss/)">
</span>
脚本中的代码
<script type="text/JavaScript">
var errorMsg = location.hash.substring(1);
/*从url的hash中取出值并赋值给errorMsg ,location是位置的意思 substring(1)的意思是从字符串的第一个字符截取*/
document.getElementById("errorMsg").innerHTML = decodeURLComponent(errorMsg);
/*将errorMsg用url编码进行解码,在以innerHTML的形式写入ID为errorMsg的DOM节点中*/
</script>
用户在浏览器中访问带有xss脚本的链接 浏览器通过JavaScript从url中提取出xss脚本的内容并写入到DOM中触发xss
附加
XSS类型 | 储存型 | 反射型 | DOM型 |
触发过程 | 1.构造XSS脚本 2.正常用户访问携带XSS脚本的页面 | 正常用户访问携带XSS脚本的URL | 正常用户访问携带XSS脚本的URL |
数据存储 | 数据库 | URL | URL |
谁来输出 | 后端web应用程序 | 后端web应用程序 | 前端JavaScript |
输出位置 | http响应中 | HTTP响应中 | 动态构造的DOM节点 |