跨站脚本攻击(XSS)的简介与类别

XSS简介

  • 跨站脚本攻击,英文全称是Cross Site Script,本来缩写是CSS,但是为了和层叠
    样式表(Cas-cading Style Sheet,CSS)有所区别,所以在安全领域叫做“XSS”。
  • XSS攻击,通常指黑客通过“HTML注入”篡改了网页,插入了恶意的脚本,从而在
    用户浏览网页时,控制用户浏览器的一种攻击
  • 业内共识:针对各种不同场景产生的XSS,需要区分情景对待。

例子

  • 假设一个页面把用户输入的参数直接输出到页面上:
<?php
$input = $_GET["param"];
echo "<div>".$input."</div>";
?>
  • 在正常情况下,用户向param提交的数据会展示到页面中,比如提交:

http://www.a.com/test.php?param=这是一个测试!

结果是:

image-20200424104203452

  • 但是如果提交一段HTML代码:
http://www.a.com/test.php?
param=<script>alert(/xss/)</script>

会发现输入的Script脚本被写入页面,执行 alert(/xss/)

根据效果的不同将XSS分成三大类

反射型XSS

反射型XSS只是简单地把用户输入的数据“反射”给浏览器。也就是说,黑客往往需
要诱使用户“点击”一个恶意链接,才能攻击成功。反射型XSS也叫做“非持久型
XSS”(Non-persistent XSS)。

存储型XSS

存储型XSS会把用户输入的数据“存储”在服务器端。这种XSS具有很强的稳定性。存储型XSS通常也叫做“持久型XSS”(Persistent XSS),因为从效果上来说,它存在的时间是比较长的。

DOM Based XSS

此类型XSS不按照“数据是否保存在服务器端”来划分,它是一种特殊的反射性XSS,形成原
因比较特别。通过修改页面的DOM节点形成的XSS,称之为DOM Based XSS。

DOM节点: 根据 W3C 的 HTML DOM 标准,HTML 文档中的所有内容都是节点:

  • 整个文档是一个文档节点
  • 每个 HTML 元素是元素节点
  • HTML 元素内的文本是文本节点
  • 每个 HTML 属性是属性节点
  • 注释是注释节点

例子

<script>
function test(){
  var str = 
document.getElementById("text").value;
  document.getElementById("t").innerHTML = 
"<a href='"+str+"' >testLink</a>";
}
</script>
<div id="t" ></div>
<input type="text" id="text" value="" />
<input type="button" id="s" value="write" 
onclick="test()" />

点击“write”按钮后,会在当前页面插入一个超链接,其地址为文本框的内容:

image-20200424105525834

在这里,“write”按钮的on click事件调用了test()函数。而在test()函数中,修改了页
面的DOM节点,通过inner HTML把一段用户数据当做HTML写入到页面中,这就造成了
DOM based XSS。

如果输入' onclick=alert(/xss/) //则会导致页面代码变成

<a  href='' onlick=alert(/xss/)//' 
>testLink</a>

用一个单引号闭合掉href的第一个单引号,然后插入一个on click事件,最后再用注释符“//”注释掉第二个单引号。

!!!于是,点击write,恶意脚本alert(/xss/)被执行

另外一种利用方式——除了构造一个新事件外,还可以选择闭合掉<a>标签,并插入一个新的HTML标签。尝试如下输入:'><img src=# onerror=alert(/xss2/) /><'会导致页面代码变成

<a href=''><img src=# οnerrοr=alert(/xss2/) /
><'' >testLink</a>

恶意脚本alert(/xss2/)被执行

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值