我有一个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>
如果是,如何缓解?
是的,您需要减轻两种威胁:
- 首先,图书馆的真实性。这可以通过SRI实现,这是一种检查库签名的方法——请参阅Scott Helme的这篇伟大的文章
- 其次,您需要检查库本身是否存在已知的漏洞。我不确定当你以这种方式添加库时如何做到这一点,但你可以使用Snyk等工具来测试库是否存在已知的安全问题。例如,这里是Snyk对您正在使用的jquery版本的结果。请参阅此处了解有关该问题的更多信息
希望这能帮助你:(
是的,这种方式有一些问题。
攻击者可以利用lib服务器进行攻击,并向您提供修改后的lib代码。
首先,我建议您下载一个库(或者更好的做法是通过package.json
将其添加到捆绑包中(,并包括来自服务器的所有库,而不是第三方。
每次下载时,您都可以检查lib的控制和,以确保它没有被修改。
这将使您免受某些问题的影响,但攻击者也可以更改您的地址。
(当用户解析您的地址时,他可以将用户重定向到他的主机,而不是您的主机(。
因此,最好将html+js放在一个没有交叉链接的文件中,这样更安全。
这可以通过使用webpack绑定来实现。
因此,攻击者只能危害整个应用程序,而不是1个库,这可能更难。
编辑
(然而,只有1个文件的选项只适用于小型项目。对于较大的项目,您应该使用性能链接,并且风险稍大。(
您可以使用snyk检查您拥有的代码(在服务器上或package.json中(,snyk是漏洞的开源数据库。
编辑
还有一种保护方式是使用CSP标头。它们允许下载某些格式的内容(样式、脚本或图像等(,只使用特定的源列表。它可以防止某些类型的XSS。强烈建议始终使用所有类型的CSP标头。然而,风险始终存在:可信来源可能会被泄露,甚至DNS也可能被篡改。