博客

编码者征服安全:分享与学习 - 跨站脚本 (XSS)

Jaap Karan Singh
出版日期:2024 年 9 月 25 日

自 2000 年代初以来,跨站脚本 (XSS) 一直是安全专业人员的心头大患,遗憾的是,几十年过去了,它仍然是最常见的代码级威胁之一。这类软件漏洞已经困扰我们太久了,而CISA最近发出的警报--作为其 "按设计保证安全"运动的一部分--正试图一劳永逸地挫败它。他们肩负着大规模消除漏洞类的全球使命,这种对开发人员驱动型安全的关注确实能起到推动作用,但这需要精明的企业做出承诺,让他们的开发人员在安全方面取得成功。

那么,XSS 究竟是什么呢?

网页浏览器可能是我们访问网上所有精彩内容的门户,但遗憾的是,它并不都是好消息。网络浏览器的固有行为可能会成为安全漏洞的催化剂。浏览器一开始通常会信任所看到的标记,并毫无疑问地执行这些标记。这一切都很好,直到这种功能被利用来达到不光彩的目的......自然,攻击者最终找到了利用这种倾向来达到其邪恶目的的方法。

跨站脚本利用浏览器的信任和用户的无知来窃取数据、接管账户和玷污网站;这是一个可以很快变得非常丑陋的漏洞。

让我们来看看 XSS 的工作原理、可能造成的危害以及如何防范:

XSS是如何工作的?

当未经信任的输入(通常是数据)在页面上被呈现为输出,但被误解为可执行代码时,XSS就会发生。攻击者可以在输入参数中放置恶意的可执行代码(HTML标签、JavaScript等),这些代码--当返回到浏览器时--被执行,而不是作为数据显示。

如上所述,该漏洞的出现是由于浏览器的核心运作行为,它很难区分数据和可执行代码。网络的运行模式如下。

  1. 用户访问一个网页
  2. 该页面告诉浏览器要加载哪些文件和执行哪些内容
  3. 浏览器执行页面上的内容,没有问题。

这种功能导致了我们在网络上享受的一些最棒的互动体验。硬币的另一面是,它也导致了代价高昂的利用和漏洞。

当攻击者将他们的恶意脚本添加到一个有漏洞的网站上时,它就会毫无疑问地被执行。没有更深入的调查,也没有到位的检测措施。

自定义JavaScript代码可以在你的用户的浏览器中执行

有三种类型的XSS。

  • 存储的XSS
  • 反映的XSS
  • DOM XSS

存储的XSS发生在攻击者可以持续地将恶意脚本存储在应用程序的一个数据字段中(例如,在存储用户手机号码的字段)。然后,每次在应用程序中显示该数据字段时,这个草率的脚本就会被发送到用户的浏览器。

这种类型的攻击经常出现在论坛网站或评论引擎上。攻击者在评论中输入恶意脚本,然后砰--每个浏览该评论的用户都在不知不觉中执行了该脚本。

反射式XSS发生在用户输入被原样反射到用户的浏览器上。一个例子是搜索框在获取搜索结果时向用户显示 "您搜索了......"。

现在,想象一下,搜索是通过将搜索词作为查询参数放在URL中进行的。恶意攻击者可以向受害者发送一个链接,并在这些参数中嵌入恶意脚本,说实话,大多数网络用户几乎不会注意到它。

,受害者点击该链接并被重定向到一个钓鱼网站,在那里他/她不知不觉地输入了网站的密码。他们没有意识到,攻击者刚刚窃取了他们账户的钥匙。

DOM XSS是这种漏洞的一个相对新的种类。它利用了许多UI框架(如Angular和React)中的复杂模板结构。

这些模板允许动态内容和丰富的UI应用。如果使用不当,它们可以被用来执行XSS攻击。

所以,你有了它。你已经掌握了XSS的范围,简而言之。让我们更深入地了解它是如何被破坏性地使用的。

为什么XSS如此危险?

XSS可以被用来将用户重定向到恶意网站,窃取cookies和猎取会话数据。基本上,无论JavaScript能做什么,XSS攻击也能做到。

以下是三个XSS攻击的例子。

  1. 雅虎电子邮件用户在2015年使用XSS窃取了他们的会话cookie
  2. Samy蠕虫病毒是通过MySpace的一个XSS漏洞传播的。它仍然是有史以来传播最快的恶意软件,在短短20小时内影响了100万用户。
  3. eBay允许在产品描述中包含恶意脚本。这导致了对eBay用户的XSS攻击

XSS攻击具有欺骗性,而且非常严重。它们可以导致会话、用户凭证或敏感数据被盗。声誉受损和收入减少是这些攻击的主要隐患。

然而,XSS可以被像你一样精明的安全战士打败。修复方法并不复杂,自从XSS成为一个常用的攻击手段以来,这个行业已经走过了很长很长的路。

你可以打败XSS。

击败XSS的关键是理解上下文。具体来说,就是你的用户输入将被送回客户端的上下文,以及它将被送回的地方。

如果用户输入不必被送回浏览器,那就更好了。但如果是这样的话,往往应该进行HTML编码。对输出进行HTML编码将告诉浏览器按原样呈现内容,而不是执行它。

输入验证也很重要。然而,验证和白名单并不是 万无一失的解决方案。编码更进一步,阻止浏览器执行恶意脚本。

许多框架现在对HTML输出进行自动编码。
AngularASP.NET MVCReact.js是使用默认HTML编码的框架。你必须通过调用一个特殊的方法来告诉这些框架不要进行编码。

其他大多数框架(如DjangoSpring)都有用于预防XSS的标准库,你可以很容易地将其纳入你的代码中。

最大的挑战是教会自己分析用户输入进入系统的所有方式,这样你就可以随时注意它了。查询参数可以携带攻击,职位参数也是如此。遵循整个应用程序的数据流,不要相信任何来自外部的数据。

像边境巡逻一样思考。停止每一个数据,检查它,如果它看起来是恶意的,就不允许它进入。然后在渲染时进行编码,以确保任何被遗漏的坏东西仍然不会造成问题。

执行这些策略,你的用户将不会受到XSS的攻击。看一下OWASP的Cheat Sheet,了解更多的提示,使你的数据得到控制。

挫败XSS并提高你的安全技能。

XSS在OWASP的2017年十大网络安全风险列表中位列第七。它已经存在了一段时间,但如果你不小心,它仍然可以出现并导致你的应用程序出现问题。

培训对于开发人员在编写代码时建立安全第一的心态非常重要。而且,当它模拟真实的应用程序,用开发人员积极使用的语言,培训总是最有效的。考虑到这一点,为什么不看看我们的学习资源,以了解更多关于XSS的信息?之后,你就可以开始培训和练习,从而达到掌握的目的。

你认为你现在已经准备好发现和修复XSS漏洞了吗? 挑战自己 Secure Code Warrior 平台上。

查看资源
查看资源

跨站脚本(XSS)利用浏览器的信任和用户的无知来窃取数据、接管账户和玷污网站;这是一个可以变得非常丑陋、非常迅速的漏洞。让我们来看看XSS是如何工作的,可以造成什么损害,以及如何防止它。

想了解更多信息?

Jaap Karan Singh是一位安全编码布道者,首席辛格和Secure Code Warrior 的共同创始人。

Secure Code Warrior 我们在这里为您的组织提供服务,帮助您在整个软件开发生命周期中确保代码安全,并创造一种将网络安全放在首位的文化。无论您是应用安全经理、开发人员、CISO或任何涉及安全的人,我们都可以帮助您的组织减少与不安全代码有关的风险。

预定一个演示
分享到
作者
Jaap Karan Singh
出版日期:2024 年 9 月 25 日

Jaap Karan Singh是一位安全编码布道者,首席辛格和Secure Code Warrior 的共同创始人。

分享到

自 2000 年代初以来,跨站脚本 (XSS) 一直是安全专业人员的心头大患,遗憾的是,几十年过去了,它仍然是最常见的代码级威胁之一。这类软件漏洞已经困扰我们太久了,而CISA最近发出的警报--作为其 "按设计保证安全"运动的一部分--正试图一劳永逸地挫败它。他们肩负着大规模消除漏洞类的全球使命,这种对开发人员驱动型安全的关注确实能起到推动作用,但这需要精明的企业做出承诺,让他们的开发人员在安全方面取得成功。

那么,XSS 究竟是什么呢?

网页浏览器可能是我们访问网上所有精彩内容的门户,但遗憾的是,它并不都是好消息。网络浏览器的固有行为可能会成为安全漏洞的催化剂。浏览器一开始通常会信任所看到的标记,并毫无疑问地执行这些标记。这一切都很好,直到这种功能被利用来达到不光彩的目的......自然,攻击者最终找到了利用这种倾向来达到其邪恶目的的方法。

跨站脚本利用浏览器的信任和用户的无知来窃取数据、接管账户和玷污网站;这是一个可以很快变得非常丑陋的漏洞。

让我们来看看 XSS 的工作原理、可能造成的危害以及如何防范:

XSS是如何工作的?

当未经信任的输入(通常是数据)在页面上被呈现为输出,但被误解为可执行代码时,XSS就会发生。攻击者可以在输入参数中放置恶意的可执行代码(HTML标签、JavaScript等),这些代码--当返回到浏览器时--被执行,而不是作为数据显示。

如上所述,该漏洞的出现是由于浏览器的核心运作行为,它很难区分数据和可执行代码。网络的运行模式如下。

  1. 用户访问一个网页
  2. 该页面告诉浏览器要加载哪些文件和执行哪些内容
  3. 浏览器执行页面上的内容,没有问题。

这种功能导致了我们在网络上享受的一些最棒的互动体验。硬币的另一面是,它也导致了代价高昂的利用和漏洞。

当攻击者将他们的恶意脚本添加到一个有漏洞的网站上时,它就会毫无疑问地被执行。没有更深入的调查,也没有到位的检测措施。

自定义JavaScript代码可以在你的用户的浏览器中执行

有三种类型的XSS。

  • 存储的XSS
  • 反映的XSS
  • DOM XSS

存储的XSS发生在攻击者可以持续地将恶意脚本存储在应用程序的一个数据字段中(例如,在存储用户手机号码的字段)。然后,每次在应用程序中显示该数据字段时,这个草率的脚本就会被发送到用户的浏览器。

这种类型的攻击经常出现在论坛网站或评论引擎上。攻击者在评论中输入恶意脚本,然后砰--每个浏览该评论的用户都在不知不觉中执行了该脚本。

反射式XSS发生在用户输入被原样反射到用户的浏览器上。一个例子是搜索框在获取搜索结果时向用户显示 "您搜索了......"。

现在,想象一下,搜索是通过将搜索词作为查询参数放在URL中进行的。恶意攻击者可以向受害者发送一个链接,并在这些参数中嵌入恶意脚本,说实话,大多数网络用户几乎不会注意到它。

,受害者点击该链接并被重定向到一个钓鱼网站,在那里他/她不知不觉地输入了网站的密码。他们没有意识到,攻击者刚刚窃取了他们账户的钥匙。

DOM XSS是这种漏洞的一个相对新的种类。它利用了许多UI框架(如Angular和React)中的复杂模板结构。

这些模板允许动态内容和丰富的UI应用。如果使用不当,它们可以被用来执行XSS攻击。

所以,你有了它。你已经掌握了XSS的范围,简而言之。让我们更深入地了解它是如何被破坏性地使用的。

为什么XSS如此危险?

XSS可以被用来将用户重定向到恶意网站,窃取cookies和猎取会话数据。基本上,无论JavaScript能做什么,XSS攻击也能做到。

以下是三个XSS攻击的例子。

  1. 雅虎电子邮件用户在2015年使用XSS窃取了他们的会话cookie
  2. Samy蠕虫病毒是通过MySpace的一个XSS漏洞传播的。它仍然是有史以来传播最快的恶意软件,在短短20小时内影响了100万用户。
  3. eBay允许在产品描述中包含恶意脚本。这导致了对eBay用户的XSS攻击

XSS攻击具有欺骗性,而且非常严重。它们可以导致会话、用户凭证或敏感数据被盗。声誉受损和收入减少是这些攻击的主要隐患。

然而,XSS可以被像你一样精明的安全战士打败。修复方法并不复杂,自从XSS成为一个常用的攻击手段以来,这个行业已经走过了很长很长的路。

你可以打败XSS。

击败XSS的关键是理解上下文。具体来说,就是你的用户输入将被送回客户端的上下文,以及它将被送回的地方。

如果用户输入不必被送回浏览器,那就更好了。但如果是这样的话,往往应该进行HTML编码。对输出进行HTML编码将告诉浏览器按原样呈现内容,而不是执行它。

输入验证也很重要。然而,验证和白名单并不是 万无一失的解决方案。编码更进一步,阻止浏览器执行恶意脚本。

许多框架现在对HTML输出进行自动编码。
AngularASP.NET MVCReact.js是使用默认HTML编码的框架。你必须通过调用一个特殊的方法来告诉这些框架不要进行编码。

其他大多数框架(如DjangoSpring)都有用于预防XSS的标准库,你可以很容易地将其纳入你的代码中。

最大的挑战是教会自己分析用户输入进入系统的所有方式,这样你就可以随时注意它了。查询参数可以携带攻击,职位参数也是如此。遵循整个应用程序的数据流,不要相信任何来自外部的数据。

像边境巡逻一样思考。停止每一个数据,检查它,如果它看起来是恶意的,就不允许它进入。然后在渲染时进行编码,以确保任何被遗漏的坏东西仍然不会造成问题。

执行这些策略,你的用户将不会受到XSS的攻击。看一下OWASP的Cheat Sheet,了解更多的提示,使你的数据得到控制。

挫败XSS并提高你的安全技能。

XSS在OWASP的2017年十大网络安全风险列表中位列第七。它已经存在了一段时间,但如果你不小心,它仍然可以出现并导致你的应用程序出现问题。

培训对于开发人员在编写代码时建立安全第一的心态非常重要。而且,当它模拟真实的应用程序,用开发人员积极使用的语言,培训总是最有效的。考虑到这一点,为什么不看看我们的学习资源,以了解更多关于XSS的信息?之后,你就可以开始培训和练习,从而达到掌握的目的。

你认为你现在已经准备好发现和修复XSS漏洞了吗? 挑战自己 Secure Code Warrior 平台上。

查看资源
查看资源

请填写下表下载报告

我们希望得到您的许可,向您发送有关我们产品和/或相关安全编码主题的信息。我们将始终以最谨慎的态度对待您的个人资料,绝不会将其出售给其他公司用于营销目的。

提交
要提交表格,请启用 "分析 "cookies。完成后,请随时再次禁用它们。

自 2000 年代初以来,跨站脚本 (XSS) 一直是安全专业人员的心头大患,遗憾的是,几十年过去了,它仍然是最常见的代码级威胁之一。这类软件漏洞已经困扰我们太久了,而CISA最近发出的警报--作为其 "按设计保证安全"运动的一部分--正试图一劳永逸地挫败它。他们肩负着大规模消除漏洞类的全球使命,这种对开发人员驱动型安全的关注确实能起到推动作用,但这需要精明的企业做出承诺,让他们的开发人员在安全方面取得成功。

那么,XSS 究竟是什么呢?

网页浏览器可能是我们访问网上所有精彩内容的门户,但遗憾的是,它并不都是好消息。网络浏览器的固有行为可能会成为安全漏洞的催化剂。浏览器一开始通常会信任所看到的标记,并毫无疑问地执行这些标记。这一切都很好,直到这种功能被利用来达到不光彩的目的......自然,攻击者最终找到了利用这种倾向来达到其邪恶目的的方法。

跨站脚本利用浏览器的信任和用户的无知来窃取数据、接管账户和玷污网站;这是一个可以很快变得非常丑陋的漏洞。

让我们来看看 XSS 的工作原理、可能造成的危害以及如何防范:

XSS是如何工作的?

当未经信任的输入(通常是数据)在页面上被呈现为输出,但被误解为可执行代码时,XSS就会发生。攻击者可以在输入参数中放置恶意的可执行代码(HTML标签、JavaScript等),这些代码--当返回到浏览器时--被执行,而不是作为数据显示。

如上所述,该漏洞的出现是由于浏览器的核心运作行为,它很难区分数据和可执行代码。网络的运行模式如下。

  1. 用户访问一个网页
  2. 该页面告诉浏览器要加载哪些文件和执行哪些内容
  3. 浏览器执行页面上的内容,没有问题。

这种功能导致了我们在网络上享受的一些最棒的互动体验。硬币的另一面是,它也导致了代价高昂的利用和漏洞。

当攻击者将他们的恶意脚本添加到一个有漏洞的网站上时,它就会毫无疑问地被执行。没有更深入的调查,也没有到位的检测措施。

自定义JavaScript代码可以在你的用户的浏览器中执行

有三种类型的XSS。

  • 存储的XSS
  • 反映的XSS
  • DOM XSS

存储的XSS发生在攻击者可以持续地将恶意脚本存储在应用程序的一个数据字段中(例如,在存储用户手机号码的字段)。然后,每次在应用程序中显示该数据字段时,这个草率的脚本就会被发送到用户的浏览器。

这种类型的攻击经常出现在论坛网站或评论引擎上。攻击者在评论中输入恶意脚本,然后砰--每个浏览该评论的用户都在不知不觉中执行了该脚本。

反射式XSS发生在用户输入被原样反射到用户的浏览器上。一个例子是搜索框在获取搜索结果时向用户显示 "您搜索了......"。

现在,想象一下,搜索是通过将搜索词作为查询参数放在URL中进行的。恶意攻击者可以向受害者发送一个链接,并在这些参数中嵌入恶意脚本,说实话,大多数网络用户几乎不会注意到它。

,受害者点击该链接并被重定向到一个钓鱼网站,在那里他/她不知不觉地输入了网站的密码。他们没有意识到,攻击者刚刚窃取了他们账户的钥匙。

DOM XSS是这种漏洞的一个相对新的种类。它利用了许多UI框架(如Angular和React)中的复杂模板结构。

这些模板允许动态内容和丰富的UI应用。如果使用不当,它们可以被用来执行XSS攻击。

所以,你有了它。你已经掌握了XSS的范围,简而言之。让我们更深入地了解它是如何被破坏性地使用的。

为什么XSS如此危险?

XSS可以被用来将用户重定向到恶意网站,窃取cookies和猎取会话数据。基本上,无论JavaScript能做什么,XSS攻击也能做到。

以下是三个XSS攻击的例子。

  1. 雅虎电子邮件用户在2015年使用XSS窃取了他们的会话cookie
  2. Samy蠕虫病毒是通过MySpace的一个XSS漏洞传播的。它仍然是有史以来传播最快的恶意软件,在短短20小时内影响了100万用户。
  3. eBay允许在产品描述中包含恶意脚本。这导致了对eBay用户的XSS攻击

XSS攻击具有欺骗性,而且非常严重。它们可以导致会话、用户凭证或敏感数据被盗。声誉受损和收入减少是这些攻击的主要隐患。

然而,XSS可以被像你一样精明的安全战士打败。修复方法并不复杂,自从XSS成为一个常用的攻击手段以来,这个行业已经走过了很长很长的路。

你可以打败XSS。

击败XSS的关键是理解上下文。具体来说,就是你的用户输入将被送回客户端的上下文,以及它将被送回的地方。

如果用户输入不必被送回浏览器,那就更好了。但如果是这样的话,往往应该进行HTML编码。对输出进行HTML编码将告诉浏览器按原样呈现内容,而不是执行它。

输入验证也很重要。然而,验证和白名单并不是 万无一失的解决方案。编码更进一步,阻止浏览器执行恶意脚本。

许多框架现在对HTML输出进行自动编码。
AngularASP.NET MVCReact.js是使用默认HTML编码的框架。你必须通过调用一个特殊的方法来告诉这些框架不要进行编码。

其他大多数框架(如DjangoSpring)都有用于预防XSS的标准库,你可以很容易地将其纳入你的代码中。

最大的挑战是教会自己分析用户输入进入系统的所有方式,这样你就可以随时注意它了。查询参数可以携带攻击,职位参数也是如此。遵循整个应用程序的数据流,不要相信任何来自外部的数据。

像边境巡逻一样思考。停止每一个数据,检查它,如果它看起来是恶意的,就不允许它进入。然后在渲染时进行编码,以确保任何被遗漏的坏东西仍然不会造成问题。

执行这些策略,你的用户将不会受到XSS的攻击。看一下OWASP的Cheat Sheet,了解更多的提示,使你的数据得到控制。

挫败XSS并提高你的安全技能。

XSS在OWASP的2017年十大网络安全风险列表中位列第七。它已经存在了一段时间,但如果你不小心,它仍然可以出现并导致你的应用程序出现问题。

培训对于开发人员在编写代码时建立安全第一的心态非常重要。而且,当它模拟真实的应用程序,用开发人员积极使用的语言,培训总是最有效的。考虑到这一点,为什么不看看我们的学习资源,以了解更多关于XSS的信息?之后,你就可以开始培训和练习,从而达到掌握的目的。

你认为你现在已经准备好发现和修复XSS漏洞了吗? 挑战自己 Secure Code Warrior 平台上。

开始吧

点击下面的链接,下载本资料的 PDF 文件。

Secure Code Warrior 我们在这里为您的组织提供服务,帮助您在整个软件开发生命周期中确保代码安全,并创造一种将网络安全放在首位的文化。无论您是应用安全经理、开发人员、CISO或任何涉及安全的人,我们都可以帮助您的组织减少与不安全代码有关的风险。

查看报告预定一个演示
查看资源
分享到
想了解更多信息?

分享到
作者
Jaap Karan Singh
出版日期:2024 年 9 月 25 日

Jaap Karan Singh是一位安全编码布道者,首席辛格和Secure Code Warrior 的共同创始人。

分享到

自 2000 年代初以来,跨站脚本 (XSS) 一直是安全专业人员的心头大患,遗憾的是,几十年过去了,它仍然是最常见的代码级威胁之一。这类软件漏洞已经困扰我们太久了,而CISA最近发出的警报--作为其 "按设计保证安全"运动的一部分--正试图一劳永逸地挫败它。他们肩负着大规模消除漏洞类的全球使命,这种对开发人员驱动型安全的关注确实能起到推动作用,但这需要精明的企业做出承诺,让他们的开发人员在安全方面取得成功。

那么,XSS 究竟是什么呢?

网页浏览器可能是我们访问网上所有精彩内容的门户,但遗憾的是,它并不都是好消息。网络浏览器的固有行为可能会成为安全漏洞的催化剂。浏览器一开始通常会信任所看到的标记,并毫无疑问地执行这些标记。这一切都很好,直到这种功能被利用来达到不光彩的目的......自然,攻击者最终找到了利用这种倾向来达到其邪恶目的的方法。

跨站脚本利用浏览器的信任和用户的无知来窃取数据、接管账户和玷污网站;这是一个可以很快变得非常丑陋的漏洞。

让我们来看看 XSS 的工作原理、可能造成的危害以及如何防范:

XSS是如何工作的?

当未经信任的输入(通常是数据)在页面上被呈现为输出,但被误解为可执行代码时,XSS就会发生。攻击者可以在输入参数中放置恶意的可执行代码(HTML标签、JavaScript等),这些代码--当返回到浏览器时--被执行,而不是作为数据显示。

如上所述,该漏洞的出现是由于浏览器的核心运作行为,它很难区分数据和可执行代码。网络的运行模式如下。

  1. 用户访问一个网页
  2. 该页面告诉浏览器要加载哪些文件和执行哪些内容
  3. 浏览器执行页面上的内容,没有问题。

这种功能导致了我们在网络上享受的一些最棒的互动体验。硬币的另一面是,它也导致了代价高昂的利用和漏洞。

当攻击者将他们的恶意脚本添加到一个有漏洞的网站上时,它就会毫无疑问地被执行。没有更深入的调查,也没有到位的检测措施。

自定义JavaScript代码可以在你的用户的浏览器中执行

有三种类型的XSS。

  • 存储的XSS
  • 反映的XSS
  • DOM XSS

存储的XSS发生在攻击者可以持续地将恶意脚本存储在应用程序的一个数据字段中(例如,在存储用户手机号码的字段)。然后,每次在应用程序中显示该数据字段时,这个草率的脚本就会被发送到用户的浏览器。

这种类型的攻击经常出现在论坛网站或评论引擎上。攻击者在评论中输入恶意脚本,然后砰--每个浏览该评论的用户都在不知不觉中执行了该脚本。

反射式XSS发生在用户输入被原样反射到用户的浏览器上。一个例子是搜索框在获取搜索结果时向用户显示 "您搜索了......"。

现在,想象一下,搜索是通过将搜索词作为查询参数放在URL中进行的。恶意攻击者可以向受害者发送一个链接,并在这些参数中嵌入恶意脚本,说实话,大多数网络用户几乎不会注意到它。

,受害者点击该链接并被重定向到一个钓鱼网站,在那里他/她不知不觉地输入了网站的密码。他们没有意识到,攻击者刚刚窃取了他们账户的钥匙。

DOM XSS是这种漏洞的一个相对新的种类。它利用了许多UI框架(如Angular和React)中的复杂模板结构。

这些模板允许动态内容和丰富的UI应用。如果使用不当,它们可以被用来执行XSS攻击。

所以,你有了它。你已经掌握了XSS的范围,简而言之。让我们更深入地了解它是如何被破坏性地使用的。

为什么XSS如此危险?

XSS可以被用来将用户重定向到恶意网站,窃取cookies和猎取会话数据。基本上,无论JavaScript能做什么,XSS攻击也能做到。

以下是三个XSS攻击的例子。

  1. 雅虎电子邮件用户在2015年使用XSS窃取了他们的会话cookie
  2. Samy蠕虫病毒是通过MySpace的一个XSS漏洞传播的。它仍然是有史以来传播最快的恶意软件,在短短20小时内影响了100万用户。
  3. eBay允许在产品描述中包含恶意脚本。这导致了对eBay用户的XSS攻击

XSS攻击具有欺骗性,而且非常严重。它们可以导致会话、用户凭证或敏感数据被盗。声誉受损和收入减少是这些攻击的主要隐患。

然而,XSS可以被像你一样精明的安全战士打败。修复方法并不复杂,自从XSS成为一个常用的攻击手段以来,这个行业已经走过了很长很长的路。

你可以打败XSS。

击败XSS的关键是理解上下文。具体来说,就是你的用户输入将被送回客户端的上下文,以及它将被送回的地方。

如果用户输入不必被送回浏览器,那就更好了。但如果是这样的话,往往应该进行HTML编码。对输出进行HTML编码将告诉浏览器按原样呈现内容,而不是执行它。

输入验证也很重要。然而,验证和白名单并不是 万无一失的解决方案。编码更进一步,阻止浏览器执行恶意脚本。

许多框架现在对HTML输出进行自动编码。
AngularASP.NET MVCReact.js是使用默认HTML编码的框架。你必须通过调用一个特殊的方法来告诉这些框架不要进行编码。

其他大多数框架(如DjangoSpring)都有用于预防XSS的标准库,你可以很容易地将其纳入你的代码中。

最大的挑战是教会自己分析用户输入进入系统的所有方式,这样你就可以随时注意它了。查询参数可以携带攻击,职位参数也是如此。遵循整个应用程序的数据流,不要相信任何来自外部的数据。

像边境巡逻一样思考。停止每一个数据,检查它,如果它看起来是恶意的,就不允许它进入。然后在渲染时进行编码,以确保任何被遗漏的坏东西仍然不会造成问题。

执行这些策略,你的用户将不会受到XSS的攻击。看一下OWASP的Cheat Sheet,了解更多的提示,使你的数据得到控制。

挫败XSS并提高你的安全技能。

XSS在OWASP的2017年十大网络安全风险列表中位列第七。它已经存在了一段时间,但如果你不小心,它仍然可以出现并导致你的应用程序出现问题。

培训对于开发人员在编写代码时建立安全第一的心态非常重要。而且,当它模拟真实的应用程序,用开发人员积极使用的语言,培训总是最有效的。考虑到这一点,为什么不看看我们的学习资源,以了解更多关于XSS的信息?之后,你就可以开始培训和练习,从而达到掌握的目的。

你认为你现在已经准备好发现和修复XSS漏洞了吗? 挑战自己 Secure Code Warrior 平台上。

目录

下载PDF
查看资源
想了解更多信息?

Jaap Karan Singh是一位安全编码布道者,首席辛格和Secure Code Warrior 的共同创始人。

Secure Code Warrior 我们在这里为您的组织提供服务,帮助您在整个软件开发生命周期中确保代码安全,并创造一种将网络安全放在首位的文化。无论您是应用安全经理、开发人员、CISO或任何涉及安全的人,我们都可以帮助您的组织减少与不安全代码有关的风险。

预定一个演示下载
分享到
资源中心
资源中心