了解最常见的 JavaScript 漏洞

漏洞公布 小布 869浏览 0评论

JavaScript 现在是世界上使用最广泛的编程语言,几乎存在于所有 Web 应用程序中。因此,JavaScript 漏洞是主要的 Web 安全风险,了解它们对于防止数据泄露和其他安全事件至关重要。

是什么造就了 JavaScript 漏洞?

根据最近的研究,JavaScript 被近 1400 万开发人员积极使用,使其成为世界上最流行的软件开发语言,也是迄今为止 Web 开发中使用最广泛的语言。这使得了解 JavaScript 漏洞成为确保 Web 应用程序安全的关键部分,特别是考虑到应用程序层中的攻击现在是外部破坏的首要原因。但是究竟是什么造成了 JavaScript 漏洞呢?

从意义上讲,任何导致安全漏洞的 JavaScript 代码都可以视为 JavaScript 漏洞。如果您有 JavaScript 设置,从服务器上的 Node.js 到前端的AngularJS 或React等框架,那么该定义可能涵盖您应用程序中的所有安全问题。在开发人员中建立安全意识时要记住这一点很重要,因为OWASP 前 10 名(及以后)的所有 Web 漏洞都可以通过不安全的 JavaScript 代码引入。但是SQL 注入真的是一个 JavaScript 漏洞吗?

这都是关于跨站点脚本的

从 Web 安全的角度来看,将 JavaScript 漏洞视为攻击者控制脚本执行的机会更为有用。首先,这意味着跨站点脚本 (XSS) 的多种形式和形式。基于 布二云安 多年扫描现实生活应用程序的结果,我们可以自信地说,XSS 占所有 Web 应用程序安全漏洞的三分之二以上。换句话说,最常见的 JavaScript 漏洞都是不同类型的跨站点脚本。

我们有一篇关于不同类型的跨站点脚本的单独文章,但总结一下,主要有 3 种类型:

  • 反射型 XSS:攻击者输入的恶意脚本代码(例如,作为搜索查询)被服务器接受。然后将代码插入到相关页面的 HTML 中,并返回到浏览器,在那里执行。
  • 存储的 XSS:服务器接受包含恶意代码的用户输入并将其存储。例如,攻击者可以将代码放入存储在论坛数据库中的用户配置文件描述中。当另一个用户稍后加载该个人资料页面时,恶意脚本就会被执行。
  • 基于 DOM 的 XSS:攻击者控制的输入完全在用户浏览器中处理,用于修改当前页面并使用文档对象模型 (DOM) 操作插入恶意代码。因为一切都发生在客户端,所以原始 HTML 页面或服务器响应中都没有恶意代码。

JavaScript 安全问题转移到客户端

JavaScript 最初是一种使静态网页更具交互性和响应性的方法,大多数应用程序逻辑和处理在服务器端以另一种编程语言实现。随着动态网站发展成为成熟的 Web 应用程序,它们开始将越来越多的处理转移到用户的浏览器以获得类似桌面的体验。随着HTML5 添加本地存储,现在可以让整个单页应用程序从服务器加载一次,然后完全在客户端运行,仅与服务器交换偶尔的请求。

所有这些都导致 JavaScript 漏洞在现代 Web 应用程序中的影响越来越大。对单页应用程序越来越依赖,将越来越多的应用程序数据暴露给客户端 JavaScript。当与不安全的设计或实现选择相结合时,这可能导致敏感数据通过基于 DOM 的 XSS 攻击被提取,这些攻击通常不会在服务器上留下任何痕迹。

检测跨站脚本漏洞

使用自动化工具可靠地检测 XSS 漏洞并非易事,尤其是当您考虑到现代 Web 应用程序中只有一小部分是自定义代码时——多达 70%可能是框架代码和开源 JavaScript 库(如 jQuery)。要在执行时测试整个应用程序并密切模拟攻击者交互,您需要使用高级安全工具(例如包含完整 Web 浏览器引擎)进行动态应用程序安全测试 (DAST)。这对于基于 DOM 的 XSS 尤为重要,因为整个攻击发生在客户端,因此您无法检查服务器响应是否存在恶意 JavaScript。

布尔云安团队具有广泛的安全检查功能,可以可靠地发现多种类型的跨站点脚本漏洞,包括基于 DOM 的攻击。它还具有技术功能,可识别具有已知漏洞的组件。扫描器融合了顶级安全专家十多年的持续研究和开发,并定期更新以包含最新的攻击技术。

防止 JavaScript 漏洞

只要您的应用程序处理用户输入,就存在 XSS 风险。与许多漏洞一样,使用上下文敏感数据编码进行正确的输入验证始终是限制攻击者选择的最佳起点。请注意,仅输入过滤不足以防止 XSS,只能用作纵深防御的一部分。

防止 JavaScript 漏洞的安全编码实践包括默认将所有数据源视为不受信任,并尽可能避免使用 eval() 等潜在的不安全 JavaScript 函数。为了最大限度地降低基于 DOM 的 XSS 的风险,在操作 DOM 元素内容时,永远不要使用危险的属性,例如 innerHTML。选择安全框架并学习正确使用它对于避免可能使应用程序容易受到攻击的不安全构造也起着重要作用。

转载请注明:布尔云安的博客 » 了解最常见的 JavaScript 漏洞

头像
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址