【问题标题】:Securing Third party libraries in web applications保护 Web 应用程序中的第三方库
【发布时间】:2019-04-23 22:00:21
【问题描述】:

我有一个带有登录页面的网络应用程序。

在源代码中(特别是<head>),我可以看到使用的第三方javascript 库和该库的路径,有时是库的版本。

我什至可以在没有身份验证的情况下访问这些库的代码。

这是安全风险吗?

例如:

<script type="text/javascript" src="/****/js/ui/js/jquery-ui-1.2.2.custom.min.js"></script>
<script type="text/javascript" src="/*****/dwr/interface/AjaxService.js"></script>

如果是,如何缓解?

【问题讨论】:

  • 针对谁的安全风险,什么攻击?登录保护了什么?库与它有什么关系?
  • 一般来说,在未经身份验证的用户尝试登录之前显示 javascripts 库及其版本的概念。
  • 没有什么是保密的,对吧?不需要保护它。此外,根据您的应用程序,攻击者可能只需创建一个帐户即可获取此信息。
  • 不,在这个应用程序中获得一个帐户并不容易。

标签: javascript security libraries dependency-management owasp


【解决方案1】:

是的,您需要缓解两种威胁:

  • 首先,图书馆的真实性。这可以通过 SRI 实现,这是一种检查库签名的方法 - 请参阅 Scott Helme 的 great post
  • 其次,您要检查库本身是否存在已知漏洞。我不确定当您以这种方式添加库时如何完成 - 但是您可以使用诸如Snyk 之类的工具来测试并查看库是否存在已知的安全问题。例如,hereSnyk 的结果到您正在使用的 jquery 版本。请参阅 here 以了解有关此问题的更多信息。

希望对你有所帮助:)

【讨论】:

  • 我认为您的意思是“已知漏洞”,而不是“知道依赖关系”。
  • 所以,如果我检查了真实性并更新到最新版本,是否可以让公众看到库版本?
  • @Tom 没有办法完全避免这种风险,只有办法让它变得更难。因此,只要您使用这种缓解措施就足够了,至少 IMO 是这样。这真的取决于网站 - 例如,在登录页面上,最好不要使用任何库
  • @Tom 请注意,真实性检查与显示您正在使用的库(您仍未解释)相关的风险无关。
  • @Bergi 不准确。部分风险是库是否包含已知漏洞,所以这确实涵盖了它
【解决方案2】:

是的,这种方式有一些问题。

攻击者可以利用lib服务器并给你修改后的lib代码。

首先,我建议您下载一个库(或者更好的是通过package.json 将其添加到捆绑包中)并包含来自您服务器的所有库,而不是第 3 方。

每次下载时都可以检查库的控制和以确保它没有被修改。

这将使您避免一些问题,但您的地址也可以被攻击者更改。

(当用户解析您的地址时,他可以将用户重定向到他的主机,而不是您的主机)。

所以最好将html + js放在1个文件中,没有交叉链接更安全。

这可以使用 webpack 捆绑来实现。

所以攻击者只能破坏整个应用程序,而不是 1 个库,这可能更难。

编辑

(但是,只有 1 个文件的选项仅适用于小型项目。对于较大的项目,您应该使用链接来提高性能,但风险更大。)

您可以使用snyk(一个开源漏洞数据库)检查您拥有的代码(在服务器上或在 package.json 中)。

编辑

另一种保护方法是使用CSP 标头。它们允许仅使用特定的源列表下载某种格式的内容(样式或脚本或图像等)。它可以防止某些XSS。强烈建议始终使用所有类型的 CSP 标头。但是风险始终存在:受信任的来源可能会受到损害,甚至 DNS 也会受到损害。

【讨论】:

  • 内联javascript(html+javascript在同一个文件中)绝对不是安全最佳实践,因为它使得不可能有一个适当的内容安全策略(CSP)头,而CSP阻止的XSS是更重要。
  • @GaborLengyel 您可以获得 1 个包含所有 csp 标头的捆绑文件。我不认为内联排除了 csp 标头的使用。我使用了设置了所有 csp 字段的 webpack 包,效果很好。但是该注释(关于全局中的 csp)是一个很好的解决方案,我会将其添加到答案中作为一个选项。
  • 你说得对,我的评论是在我真正考虑之前写的。可以做到,CSP 会变得更复杂,但是一个好的捆绑解决方案可以自动化它。我应该三思而后行。 :) 我不一定同意在构建过程中将所有内容捆绑在一起与从应用程序源下载 js 有实际显着的安全优势,但我之前的评论仍然是错误的。
猜你喜欢
  • 2016-05-23
  • 2010-12-15
  • 2012-09-28
  • 1970-01-01
  • 1970-01-01
  • 2013-05-22
  • 2011-05-25
  • 2019-07-04
相关资源
最近更新 更多