JavaScript 安全检查表
概括
概括
- 介绍
- 1. 代码 Linting 和 SAST
- 2. 使用 npm audit 运行安全审计
- 3. JavaScript 完整性检查(SRI)
- 4. 验证,验证,验证!
- 5. 压缩并混淆你的 JavaScript
- 结论
介绍
Javascript 无处不在,它运行在你的浏览器、宇航员太空服中,大多数开发人员使用它作为客户端和服务器端编程语言来创建交互式网页。
Javascript 是一种轻量级的、解释型的编程语言,具有一流的功能。
此外,JavaScript 生态系统严重依赖第三方库; 因此,确保 JavaScript 的安全需要遵循安全最佳实践来减少攻击面。但是,我们如何才能保障 JavaScript 应用程序的安全呢?
在本文中,我将与您分享我作为安全工程师每天使用的一些有用技巧,以便您在将代码部署到生产环境之前开始更多地考虑安全性。
1. 代码 Linting 和 SAST
在 IDE 中编写代码时通过 linting 查看实时反馈可以帮助您更早地发现错误和安全问题,从而加速开发并降低成本。
您可以使用:
大多数 SAST 工具(如SonarQube)提供更多功能来识别代码异味和已知的安全漏洞。
2. 使用 npm audit 运行安全审计
大多数开发人员都在使用NPM(节点包管理器),这是一个帮助您将其他人的代码包安装到您的 Javascript 项目中的工具。
说到安全性,我们首先会考虑的是NPM 审计工具。该工具将帮助你检测所有已安装依赖项中的漏洞,并帮助你修复它们。
假设你正在使用Github作为源代码控制管理系统。在这种情况下,他们有一个名为Dependabot的工具,它会自动扫描NPM的依赖项,并通过电子邮件通知你以澄清风险。
如果你正在开发一个大型项目,你应该考虑将这项工作自动化,而不是每次都手动执行。因此,我们可以创建一个 Cron Jobs 来设置重复的任务(选择你常用的 CI 工具)。
3. JavaScript 完整性检查(SRI)
如果您是开发人员,我相信您<script>
在代码中使用过该标签来导入第三方库,但是您是否考虑过操纵这些导入脚本的源代码的可能性?
是的,这种情况可能会发生,尤其是在您的网站上渲染外部资源时。因此,您的网站可能面临安全漏洞。
您可以使用SRI功能让浏览器验证其获取的资源作为安全措施。
<script src="https://example.com/example-framework.js"
integrity="sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC"
crossorigin="anonymous"></script>
它是如何工作的?
假设我们想将 JQuery 添加到我们的代码中。
- 下载最小化版本的JQuery。
- 计算 Cloudflare 托管的 JQuery 版本 3.5.1 的 SHA256 哈希值
- 通过 OpenSSL 运行两次以生成校验和。
- 将结果以 base64 格式进行编码。
curl -s https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js | openssl dgst -sha256 -binary | openssl enc -base64 -A
9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=
现在我们有了哈希值,我们可以将integrity
属性添加到脚本标签中,并将前缀添加sha256-
到哈希值中以指示所使用的哈希算法。从现在开始,任何支持SRI 的浏览器都将要求提供的哈希值与下载文件的计算哈希值相匹配。
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"
integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0="
crossorigin="anonymous"></script>
4. 验证,验证,验证!
客户端验证是不够的,编写代码时永远不应该依赖它。
- 不要相信用户输入。
- 使用适当的方法进行编码/转义
- 净化并清理用户输入
- 设置安全 cookies
- 建立安全的内容安全策略
- 加密客户端和服务器端之间的数据传输
- 使用更新的库和框架
- 对底层数据库和代码库进行定期扫描
读:
- https://portswigger.net/web-security
- https://snyk.io/blog/5-ways-to-prevent-code-injection-in-javascript-and-node-js/
5. 压缩并混淆你的 JavaScript
作为攻击者,我会尽力去理解应用程序背后的业务逻辑,如果我这样做了,我就能找到突破的方法。
缩小和混淆您的 Javascript 至关重要,这样可以让攻击者更难理解您的代码并减少攻击面。
结论
如果您坚持到这里,那就太好了!
希望您现在对开发 JavaScript 应用程序时可能遇到的问题有了更多的了解。请记住,本文仅涵盖了在保护应用程序安全时应检查的几项内容。
您可能还需要阅读:
- 配置管理。
- 验证。
- 会话管理。
- 安全传输。
- 拒绝服务。
- 错误处理。
如果您有任何问题,可以通过 LinkedIn 联系我@Bour Abdelhadi
你想支持我吗?> 💲谢谢:D
文章来源:https://dev.to/bscript/javascript-security-checklist-af