跨站脚本(英语:Cross-site scripting,通常简称为:XSS)是一种网站应用程序的安全漏洞攻击,是代码注入的一种。它是指攻击者利用网站程序对用户的输入过滤不足造成的,输入可以显示在页面上对其他用户造成影响的 HTML代码,从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。
XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java,VBScript,ActiveX,Flash或者甚至是普通的HTML。攻击成功后,攻击者可能得到更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。
关于简称。Cross-site scripting的英文首字母缩写本应为CSS,但因为CSS在网页设计领域已经被广泛指层叠样式表(Cascading Style Sheets),所以将Cross(意为“交叉”)改以交叉形的X做为缩写。但早期的文件还是会使用CSS表示Cross-site scripting。
===============================
跨站脚本攻击(英文缩写为 XSS)指的是将恶意代码注入到其他受信任的网站中。当网络犯罪分子将恶意脚本注入目标网站的内容中,然后将其包含在传送到受害者浏览器的动态内容中时,就会发生跨站脚本攻击。受害者的浏览器无从得知恶意脚本并不可信,因此会执行这些脚本。
因此,恶意脚本可以访问由浏览器保留、并在该站点中使用的任何 Cookie、会话令牌或其他敏感信息。攻击者还可以使用 XSS 来传播恶意软件,重写网站内容,在社交网络上制造麻烦以及通过网络钓鱼获取用户凭据。XSS 与其他 Web 攻击的不同之处在于,它并非直接针对应用程序本身。相反,Web 应用程序的用户处于危险之中。
跨站脚本的工作原理
跨站脚本的原理是操纵易受攻击的网站,以便将恶意脚本返回给用户。通常,这涉及 JavaScript,但也可以使用任何客户端语言。网络犯罪分子以适当的网站作为目标,这些网站通过易受攻击的功能来接受用户输入,例如搜索栏、评论框或登录表单。犯罪分子将他们的恶意代码附加到合法网站之上,本质上是在网站加载时欺骗浏览器执行他们的恶意软件。
由于 JavaScript 在受害者的浏览器页面上运行,因此可以从会话中窃取与经过身份验证的用户有关的敏感详细信息,从而使不法分子可以将站点管理员作为目标并入侵网站。
根据代码的注入方式,恶意内容甚至可能不在实际的网页本身上,而是作为一种瞬态元素,在利用漏洞时仅表现为网站的一部分。这可能会造成实际网站遭到入侵的错觉,而实际上并非如此。
可通过不同的方法触发 XSS 攻击。例如,可以在页面加载或用户将光标悬停在特定页面元素(例如超链接)上时自动触发执行。在某些情况下,XSS 会更直接地执行,例如在电子邮件中。一些 XSS 攻击没有特定的目标;攻击者只是利用应用程序或站点中的漏洞,从而利用任何不幸成为受害者的人。
根据攻击的规模,用户帐户可能被盗用,木马程序激活,页面内容发生修改,从而误导用户泄露他们的隐私数据。会话 Cookie 可能会被泄露,使犯罪者能够冒充真实用户并滥用他们的私人帐户。
成功的跨站脚本攻击会对在线企业的声誉及其与客户的关系造成毁灭性的后果。不幸的是,允许 XSS 攻击取得成功的缺陷非常普遍。XSS 攻击可以利用各种编程环境中的漏洞,包括 VBScript、Flash、ActiveX 和 JavaScript。XSS 主要针对 JavaScript,因为该语言与大多数浏览器紧密集成。这种利用常用平台的能力使 XSS 攻击既危险又广泛。
XSS 攻击的影响
攻击者可以利用 XSS 漏洞执行多种恶意操作,例如:
1.将用户重定向到恶意网站。
2.捕获用户的按键操作。
3.访问用户的浏览器历史记录和剪贴板内容。
4.运行基于 Web 浏览器的漏洞攻击(例如,使浏览器崩溃)。
5.获取登录网站的用户的 Cookie 信息。
6.窃取登录会话令牌,从而允许攻击者在不知道密码的情况下以受害者身份与应用程序进行交互。
7.强制用户向服务器发送攻击者控制的请求。
8.更改页面内容。
9.诱骗受害者将其密码泄露给应用程序或其他应用程序。
10.利用 Web 浏览器本身的漏洞,使用其他恶意代码感染受害者 – 可能会接管受害者的计算机。
在某些情况下,XSS 攻击可能会导致受害者帐户发生全面泄露。攻击者可以诱骗用户在伪造的表单上输入凭据,从而向攻击者提供所有信息。一旦攻击者获得用户凭据,就可以利用它们进行身份盗用或金融欺诈。
XSS 攻击的类型
跨站脚本可以分为三大类 – 存储 XSS、反射 XSS 和基于 DOM 的 XSS。
存储跨站脚本(持久型 XSS)
存储 XSS(也称为持久型 XSS)被视为是最具破坏性的 XSS 攻击类型。当用户提供的输入被存储然后在网页中呈现时,就会发生存储 XSS。存储 XSS 的典型入口点包括消息论坛、博客评论、用户资料和用户名字段。通常情况下,攻击者利用此漏洞的方式是在网站的热门页面上注入 XSS 恶意内容或将链接传递给受害者,诱使他们查看包含存储 XSS 恶意内容的页面。受害者访问该页面,然后受害者的 Web 浏览器在客户端执行恶意内容。
反射跨站脚本(非持久型 XSS)
最常见的 XSS 类型称为反射 XSS(也称为非持久型 XSS)。在这种情况下,攻击者的恶意内容必须是发送到 Web 服务器的请求的一部分。然后以特定方式反射回来,即 HTTP 响应包含来自 HTTP 请求的恶意内容。攻击者使用恶意链接、网络钓鱼电子邮件和其他社会工程技术来诱骗受害者向服务器发出请求。然后在用户的浏览器中执行反射 XSS 恶意内容。
反射 XSS 不是持久型攻击,因此攻击者需要将恶意内容传递给每个受害者。这些攻击通常使用社交网络进行。
基于 DOM 的跨站脚本
基于 DOM 的 XSS 是指出现在 DOM(文档对象模型)而非 HTML 中的跨站脚本漏洞。在反射和存储跨站脚本攻击中,可以在响应页面看到漏洞恶意内容,但在基于 DOM 的跨站脚本攻击中,攻击的 HTML 源代码和响应是一样的,即,在响应中找不到恶意内容。只能在运行时或通过调查页面的 DOM 来进行观察。
基于 DOM 的 XSS 攻击通常是客户端攻击,恶意内容永远不会发送到服务器。这使得 Web 应用程序防火墙 (WAF) 和分析服务器日志的安全工程师更难进行检测,因为他们从未发现攻击。最常被操纵的 DOM 对象包括 URL (document.URL)、URL 的锚点部分 (location.hash) 和 Referrer (document.referrer)。
XSS 攻击示例
例如:在浏览电子商务网站时,不法分子发现了一个漏洞,该漏洞允许将 HTML 标签嵌入网站的评论部分。嵌入的标签成为页面的永久功能,导致浏览器在每次打开页面时将它们包含在其余的源代码中。
攻击者添加了一条评论,写道:物超所值的物品。在此处阅读我的完整评测 。
之后,每次访问该页面时,评论中的 HTML 标记都会激活一个 JavaScript 文件,该文件托管在另一个站点上,可以窃取访问者的会话 Cookie。
通过使用该会话 Cookie,攻击者可以入侵访问者的帐户,从而轻松访问他们的个人信息和财务数据。与此同时,访问者甚至可能没有向下滚动到评论部分,他们仍然不知道攻击已经发生。
与反射攻击(在点击链接后激活脚本)不同,存储攻击只需要受害者访问受感染的网页。这增加了攻击的范围,会危及所有访问者,无论他们多么谨慎。
从攻击者的角度来看,持久型 XSS 攻击更难执行,因为难以找到访问量大且存在相应漏洞(启用了永久脚本嵌入)的网站。
跨站脚本攻击预防
为了最大限度地减少跨站脚本漏洞,网站开发人员/所有者应该:
1.确保其网站上接受用户输入的任何页面都会过滤掉代码输入,例如 HTML 和 JavaScript。
2.扫描任何 Web 应用程序漏洞并相应地修补它们。
3.更新他们的网站和服务器软件,以防止攻击者将来利用可能成为 XSS 攻击目标的漏洞。
为了避免成为 XSS 攻击的受害者,个人用户应该:
1.在不需要脚本的页面上禁用脚本,或完全禁用脚本。
2.避免点击可疑电子邮件或留言板上的帖子中的链接,因为它们可能会转至一个遭到入侵的页面。
3.通过在浏览器中键入 URL 来直接访问网站,而不是通过第三方来源或链接。
4.使软件保持最新状态,以便从最新的错误修复和安全补丁中受益。定期更新软件可显著减少导致站点或应用程序遭受 XSS 攻击的漏洞。
5.审核应用程序以确定哪些应用程序是需要的,哪些很少使用。删除您不使用的应用程序可以减少潜在漏洞的数量。
6.使用高质量的防病毒软件,例如 Kaspersky Total Security – 这可以全天候保护您的设备和数据。它可以阻止常见和复杂的威胁,例如病毒、恶意软件、勒索软件、间谍应用和所有最新的黑客伎俩。