保护Web应用程序中的第三方库

时间:2018-11-21 10:39:53

标签: javascript security libraries dependency-management owasp

我有一个具有登录页面的Web应用程序。

在源代码中(特别是在<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>

如果是,该如何缓解?

2 个答案:

答案 0 :(得分:1)

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

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

希望这可以帮助您:)

答案 1 :(得分:0)

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

攻击者可以利用lib服务器并为您提供经过修改的lib代码。

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

每次下载时,您都可以检查lib的控制总和,以确保未对其进行修改。

这可以使您免于某些问题,但攻击者也可以更改您的地址。

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

因此,最好将HTML + js放在一个没有交叉链接的文件中,这样会更安全。

这可以通过webpack捆绑来实现。

因此,攻击者只能破坏整个应用程序,而不是1个lib,这可能会更困难。

编辑

  

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

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

编辑

  

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