XSS攻击

1.定义

XSS又叫CSS  (Cross Site Script) ,跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意用户的特殊目的,比如关不完的网站、盗取用户的 cookie 信息从而伪装成用户去操作。

它与SQL注入攻击类似,SQL注入攻击中以SQL语句作为用户输入,从而达到查询/修改/删除数据的目的,而在xss攻击中,通过插入恶意脚本,实现对用户游览器的控制,获取用户的一些信息。

2.分类

一般分为反射型、存储型、DOM三种类型,但其本质一样,都源自于攻击者通过正常途径插入的恶意代码(如js脚本)。

反射型:经过后端,不经过数据库

存储型:经过后端,经过数据库

DOM型:不经过后端,DOM—based XSS漏洞是基于文档对象模型Document Objeet Model,DOM)的一种漏洞,dom - xss是通过url传入参数去控制触发的。

3.举例

1)反射型

反射型 XSS 的数据流向是:浏览器 -> 后端 -> 浏览器。

\\XSS反射演示
<form action="" method="get">
    <input type="text" name="xss"/>
    <input type="submit" value="test"/>
</form>
<?php
$xss = @$_GET['xss'];
if($xss!==null){
    echo $xss;
}

以上这段代码中首先包含一个表单,用于向页面自己发送 GET 请求,带一个名为xss的参数。 然后 PHP 会读取该参数,如果不为空,则直接打印出来,这里不存在任何过滤。也就是说,如果xss中存在 HTML 结构性的内容,打印之后会直接解释为 HTML 元素。 部署好这个文件,访问http://localhost/xss.php,直接输入一个js代码,比如

点击test之后:

我们输入的HTML代码被执行了。用Firebug查看,我们输出的内容直接插入到了页面中,解释为

2)存储型:

浏览器 -> 后端 -> 数据库 -> 后端 -> 浏览器

与反射型类似,只是将恶意代码通过正常请求存储到了数据库,后进入数据展示页面时,将会执行恶意代码

3)DOM型

URL-->浏览器

DOM型不经过后端,直接在页面植入恶意代码。

4.原因

主要原因与 SQL 注入很类似,都是由于开发人员没有对用户输入进行编码和过滤。另一个原因是,这种攻击方法有很多变体,要设计出一个能完全防御的 XSS 过滤器是非常困难的。

5.预防

预防的方法主要有两类:字符转移、字符过滤。

1)对 HTML 标签及一些特殊符号进行转义

该种方法是一种非常简单的过滤方法,仅仅是通过转义的方式将一些 HTML 标签和属性转义,比如 < 转义成 &lt ;, 这样像<script>xxx</script>的脚本就运行不了。当然简单的过滤方式也就代表很容易就会被绕过。 
另外如果需要使用含有富文本的功能时,使用这样的过滤就会使富文本失去作用。
2)使用白名单、黑名单的方式进行过滤

白名单、黑名单顾名思义是要定义哪些东西是可通过的,哪些东西不可通过。比如常见 <b>、<p>; 、< 等等标签,不可通过的比如 javascript、<a>、<script>、<iframe>、onload 等等一些属性,将其进行转义。 
当然使用该种方法也有自身的缺点,你并不可能穷举出所有元素,也可能会某些元素在黑名单内,但在某些情况它是需要使用的,这就需要我们在设计 XSS 过滤器的时候权衡好,取最合理最适合需求的设计。

另外,很多浏览器都加入了安全机制来过滤XSS 

 

参考:

https://blog.csdn.net/u011781521/article/details/53894399/

https://blog.csdn.net/han_cui/article/details/61418484

https://blog.csdn.net/haoaiqian/article/details/72803976

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值