前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Web前端安全之跨站脚本攻击实战

Web前端安全之跨站脚本攻击实战

作者头像
企鹅号小编
发布2018-01-05 16:40:55
1.2K0
发布2018-01-05 16:40:55
举报
文章被收录于专栏:企鹅号快讯企鹅号快讯

Web前端安全之跨站脚本攻击(XSS)实战

本人入职后即加入公司的某个内部项目开发,在开发的过程中,本人发现,可能是内部项目的原因,不管是前端研发人员还是后端研发人员,对项目的安全性都很不重视。直至QA阶段,QA人员也没指出项目中的安全性BUG。本人选择几个简单的跨站脚本攻击(XSS)bug点测试,说明一下前端(当然也包括后端)开发中,保证Web安全的重要性。

一、概述

在前端开发中,会有很多表单提交的地方,在表单中,存在很多用户可以输入的地方,最常见的是input输入框,用户的输入内容会提交到后端的数据库,这些内容随后可能会在前端页面的的某些地方展示出来(想像一下留言板)。对于一个普通用户,其输入的内容一般都是合法的,不会去故意输入一些特别的字符,特别是前端Javascript字符。但是,当普通用户误输入、或者是黑客故意输入非法字符时,这些字符如果不进行处理,直接提交到后端数据库,当这条提交的信息以某种形式再次显示在页面时,可能会起到意想不到的后果,轻则导致页面错乱,重则到这整个站点被黑。本文选取该项目几个简单的实际例子,来说明XSS的危害以及Web安全的重要。

二、跨站脚本攻击(XSS)

跨站脚本攻击的概念这里就不再赘述了,这里简单说一下,跨站脚本攻击主要分为反射型存储型。相较于存储型,反射型的危害会小一些。反射型XSS在很多站点的搜索入口都会存在,本人发现的第一个反射型XSS就是在某网站的首页搜索框。反射型XSS一般只会对攻击者自身所看到的网页产生效果,不会影响其他浏览同一网页的用户。与反射型XSS不同,存储型XSS由于用户的输入内容被存储到数据库中,当不同的用户请求该页面时,该XSS脚本会嵌入在这个页面影响所有访问这个页面的用户。下面以几个实例来演示一下。

三、XSS实例1——破坏网页结构

最弱最弱的XSS可能产生的效果就是破坏网页结构,下面测试一下:

在该项目中,有个可以让用户输入项目名称和项目描述的地方,如下:

当输入名称和备注保存之后,再次选中名称会进入该页面,并显示该项目的名称和备注,这是项目中非常常见的一种场景。测试时,我们输入非正常字符(实际上包含一段JS脚本),再次进入该项目,我们发现页面成功弹出了“xss”字样。如图:

可以看到我们输入的脚本竟然成功执行了,来看看现在的页面结构,如图:

可以看到,由于JS语句成功执行,JS后面的html语句没有任何意义,所以他们以文本的形式输出了。网页结构被破坏了,任何访问此页面的人都会被莫名其妙的弹出两次xss,然后看到这个莫名其妙的破网页。尽管很难看,但其实这已经是XSS造成的最低最低的危害了。

三、XSS实例2——盗取用户cookie

XSS的破坏远不止破坏网页结构,我们关注的重点也根本不是网页结构被破坏这件事,我们关注的是,JS脚本语句竟然执行了。这意味着什么呢?意味着别有用心的人或黑客可以输入一段非法脚本,然后这段脚本可以在所有访问该网页的用户的浏览器中被执行,既然能执行脚本,那意味着也可以用document.cookie获取用户的cookie,而我们知道用户的cookie对于跟踪用户状态(登录等等)是至关重要的。而这些黑客并不会傻子般得在用户的页面弹出一个xss或者破坏页面结构,它会静悄悄的让脚本在页面中执行。关于实例一中的XSS漏洞,由于我没有进一步的去测试盗取cookie,所以我以该项目下的另外一个XSS漏洞做演示。如图:

上图是该项目中的另外一个XSS漏洞点,和实例一类似。这次我们不是仅仅弹出一个xss框而已,这次我们要做的是,获取访问该页面的任何用户的cookie,并把它传给我们自己的服务器上去,这样我们可以利用这些cookie。我们输入的脚本如下:

获取cookie的方式很简单,直接document.cookie,我们这里获取之后用jquery(根据站点实际情况,也可以使用原生ajax)ajax将获取到的cookie发送到我们自己的服务器,这里,由于当前站点与服务器站点可能存在跨域限制,我们采用了jsonp方式实现跨域发送。PHP代码很简单,就是接受cookie然后存到某个位置,这里我们直接存到了服务器所在的某云平台日志里,如图:

随后我们查看云平台的日志,只要有用户访问该页面,它就会拿到该用户的cookie。部分日志如下:

拿到的Cookie中有一个SESSION_ID字段,我们可以通过这个ID,在不登录的情况下,访问后端需要登录授权的接口,PHP脚本如下:

得到的结果如下:

我们成功的拿到了某个接口的数据。

获取cookie已经可以算作到了一个很有威胁的地步了,它不仅影响当前网页,可能还会影响整个站点,后续还可以完成更多可怕的事情。

四、其它XSS

前面说的XSS漏洞是在咱们公司的内部项目,事实上,在市面上其它有些公司的某些网站也会存在很明显的XSS漏洞。现在举几个例子:

1、某BBS反射型XSS

本人在2016年4月测试时发现该论坛搜索框有个反射型XSS漏洞,如下:

今天写这篇文章的时候再次上去看看,发现矮油,该论坛改版了,但是!!!这个搜索框的XSS漏洞还是没有修复。如下:

虽然反射型XSS几乎对网站没有任何危害,但是个人认为还是避免一下比较好。

2、某网站留言板存储型XSS

同样以16年4月某高校图书馆的一个例子为例,该留言板长下面这个样子,

这个留言板表单的很多地方对用户输入都没有过滤,用户的留言会进入数据库,当用户查看留言列表时,这条留言会从数据库中拉出来,放到网页之后他就执行了!!如下:

这里只是用一个a标签进行了测试,实际上输入一段脚本也会执行。这个漏洞貌似今天仍然存在。存储型的XSS漏洞是比较严重的,需要严加防范!

五、结论

XSS实际上是前端开发中遇到的一个很普遍很普遍的一个问题,一方面,前端开发人员应该采用有效的防御手段(XSS Filters等)来进行防范,另一方面,由于前端是不可信的,前端是可以被绕过的,所以最终的防御还得依靠后端进行转义、过滤等等行为才能确保Web应用较好的安全性。

本文来自企鹅号 - 全球大搜罗媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文来自企鹅号 - 全球大搜罗媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档