url存在宽字节跨站漏洞_前端XSS漏洞攻击竟然这么厉害

6b51686da437cf71aa9cb2ce023c96f4.png

你好,是我琉忆。

今天我们聊聊作为开发都可能会遇到的XSS漏洞攻击。如果你不知道这个漏洞,那么你编写的代码多数可能存在问题,可能一不小心就中招。

为什么会突然聊这个呢,是因为这个XSS漏洞在大部分的网站中都存在。即使是知名的网站也没有避免中招(等下罗列相应的网站)。那么XSS漏洞到底是什么?它是如何攻击的?我们应该如何防御?

01

XSS攻击是什么?

XSS攻击:跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆。故将跨站脚本攻击缩写为XSS。XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。比如这些代码包括HTML代码和客户端脚本。攻击者利用XSS漏洞旁路掉访问控制——例如同源策略(same origin policy)

可能你看了上面一大串定义,还是没能理解它到底怎么攻击的,标红字是它关键的核心攻击点。简单理解就是:服务端把我们的数据或代码储存起来,又原样显示出来,返回给我们的时候,就可能会存在 XSS 漏洞。

02

那么XSS如何攻击的?

可能对于上面的定义有点理解又有点不能理解,它到底使用了什么技巧,可以这么神奇的让你的网站执行它的代码?

那么好,我们来看看它常用的攻击手段:

1、反射性XSS

反射性,简单理解就是要用户去点击,点了我才执行响应的命令。这种类型的XSS攻击是最常见的。明显特征就是把恶意脚本提交到URL地址的参数里,比如上面所讲的那个例子。

反射性XSS只执行一次,且需要用户触发。

2、储存性XSS

储存性XSS也就比较好理解,就是持久性的XSS,服务端已经接收了,并且存入数据库,当用户访问这个页面时,这段XSS代码会自己触发,不需要有客户端去手动触发操作。

3、DOM的XSS

简单理解DOM XSS就是出现在javascript代码中的xss漏洞,不需要服务端交互,只发生在客户端传输数据的时候。

<script>  var temp = document.URL;//获取URL  var index = document.URL.indexOf("content=")+4;  var par = temp.substring(index);  document.write(decodeURI(par));//输入获取内容  script>  

如果输入 http://www.baidu.com/dom.html?content=,就会产生XSS漏洞。

这种利用也需要受害者点击链接来触发,DOM型XSS是前端代码中存在了漏洞,而反射型是后端代码中存在了漏洞。

反射型和存储型xss是服务器端代码漏洞造成的,payload在响应页面中,在dom xss中,payload不在服务器发出的HTTP响应页面中,当客户端脚本运行时(渲染页面时),payload才会加载到脚本中执行。

接下来我们看看两个实例:通过注入

<svg onload="alert(1)">

代码,判断是否存在反射性XSS的案例。

例 1:网约车厂商主页存在反射型 XSS

在测试的时候发现服务端会把 https://site.com/search/query:XXX 中冒号后的部分原封不动地输出出来,构造出 XSS 语句:

4648cd527852bbf10a0dd78cb7941108.png

XSS 输入点不一定在传统的 GET 参数中,RESTful 风格的传参也可能存在 XSS。

例 2:当当网反射型 XSS

这个漏洞特别好玩,因为如果我们直接用搜索框搜索 XSS 关键字,XSS 中的字符会被过滤。

51d1da155fc88374c6be32c39484f443.png

但是,如果我们直接靠 Web 传参,就可以绕过过滤,直接实现 XSS。

846d4452b191df832c582727d6f8f353.png

这种漏洞的成因就是因为程序员使用前端 JS 过滤 XSS,但没有考虑如果我们绕过 JS 直接传参的后果。

03

XSS攻击有什么危害?

需要注意的是,XSS攻击不像SQL攻击那样攻击的是服务端。XSS攻击的攻击点是前端可以让用户访问客户端时访问它们的恶意网址

那么被它攻击后的网站有什么危害?

  1. 盗取各类用户帐号权限(控制所盗窃权限数据内容),如机器登录帐号、用户网银帐号、各类管理员帐号

  2. 控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力

  3. 基于XSS的跨站业务请求(如:非法转账、非法下单、非法转载/发表内容、发送电子邮件、利用管理员身份提权挂马、控制受害者机器向其它网站发起攻击等)

  4. 形成持久化APT攻击,长期控制网站业务中枢

  5. 利用跨站业务形成蠕虫病毒式传播

  6. 劫持网站,劫持后可用于钓鱼、伪装、跳转、挂广告等,属挂马类型

如果你的网站出现上面的某一点,那么说明你的网站就存在XSS漏洞。

04

XSS攻击如何防御?

对于自己编写的代码最好上线前都进行一次XSS漏洞检测,针对XSS漏洞的特点进行解决。挖掘XSS漏洞的方法有:

  1. 数据接收位置,检查 $GET、$POST、$_COOKIE是否经过转义。

  2. 常见的反射型XSS搜索这种类似位置发现次数较多。

  3. 而存储型在文章,评论出现比较多,需要重点关注评论相关模块是否存在漏洞。

  4. 使用一些代码安全工具检测代码是否存在漏洞,相关工具有:rips、OWASP ZAP

XSS 漏洞防范方法

  1. 转义html实体,有两种方式:在入口和出口,我建议是在入口处转义,防止出口位置取出来的时候忘记转义,如果已经在入口转义了,出口位置就不用再次转义

  2. 在富文本编辑器中,经常会用到一些元素的属性,比如上图的onerror,那我们还需对元素的属性建立黑白名单

  3. httpOnly 即使存在XSS漏洞,可以把危害大大降低。

6a47ce014d2889ba544913e22e652490.png

后话

网站安全很重要,对自己编写的每一份代码都要心存敬畏之心,并不能保证100%没有BUG。你编写完后的无所谓反而会让黑客多一个侵入的机会。所以最好养成良好的编码习惯,多学习一些安全知识,运用到自己编写的代码中,不断提升自己代码的安全。

88b9628e392ce45677559f8eb655b558.gif

如果你觉得好,可以点个赞哦~

2e10f6058edd79344c4cb010b696a8a1.png 2e10f6058edd79344c4cb010b696a8a1.png

往期精选

  • PHP面试常考内容之Memcache和Redis(1)

  • PHP面试常考内容之Memcache和Redis(2)

  • PHP面试之面向对象(1)

  • PHP面试常考内容之面向对象(2)

  • PHP面试常考内容之面向对象(3)

8e62d416d30199e74232b42f82c4089a.png

如有疑问或想跟我交流,

可以加我的个人微信:leoyistar

关注琉忆编程库,PHP面试资料都在这

ec5e577f2520ed620be9f4136825977b.png 56fda272224eb4d96029f7eb1e3453eb.gif

点击“好看”,让更多人看到~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值