📜  Node.js 中的最佳安全实践

📅  最后修改于: 2022-05-13 01:56:39.616000             🧑  作者: Mango

Node.js 中的最佳安全实践

当我们构建一个高度可扩展的大型项目时,应用程序的安全性非常重要。因此,在本文中,我们将讨论一些我们需要在 Node.js 项目中遵循的最佳实践,以便以后不会出现安全问题。
在本文中,我们将讨论一些常见的攻击并给出预防建议:
受损数据库:首先也是最重要的事情是数据库,如果我们不保护它们,攻击者就可以访问数据库。因此,为了保护它,我们需要遵循以下两点:

  • 使用盐和哈希对密码进行强加密:为了在 express 应用程序中加密密码,我们将使用 bcyrpt.js 包,该包将加密密码并将其转换为攻击者无法读取的哈希码。
  • 强加密密码重置令牌:每当用户要重置密码时,都应该生成一个新的重置密码哈希码,这样攻击者就不会理解它。

蛮力攻击:在蛮力攻击中,攻击者不断尝试生成随机密码。在这种情况下,攻击者试图通过生成数百万个密码来猜测密码,直到找到正确的密码。那么如何避免和保护这些类型的攻击:

  • 使用 bcrypt.js 包:它在将密码存储到数据库时对其进行哈希处理。
  • 实施速率限制:在速率限制中,它限制来自单个 IP 的请求数量。
  • 为每个用户实施最大登录尝试次数:您可以设置一个限制,在某些失败的登录尝试之后,您必须在特定的时间内才能登录。

跨站脚本(XSS)攻击: XSS 攻击中,攻击者试图在我们的代码中注入一些恶意脚本,以便他们发现一些漏洞并从中获利。这种类型的攻击是危险的,因为这允许攻击者在客户端读取本地存储。这就是我们不建议将 JWT 令牌存储在本地存储中的原因。
如何防止这些类型的攻击:

  • 将 JWT 令牌存储在 HTTPonly cookie 中:切勿将 JWT 令牌存储在本地存储中,始终使用仅 HTTP cookie。
  • 清理用户输入数据:通过清理用户输入数据意味着我们限制用户不要输入奇怪的数据。
  • 设置特殊的 HTTP 标头:您可以使用 npm 内置包添加一些特殊的标头,这样有助于提高安全性。头盔将设置各种 HTTP 标头以帮助保护您的应用程序。

拒绝服务(DOS)攻击:在 DOS 攻击中,攻击者向服务器发出如此多的请求,以至于服务器崩溃并且用户无法使用,他们在那里工作,所以如何防止此类攻击有很多防止它们的方法:

  • 实施速率限制:通过使用速率限制,您可以轻松防止此类攻击,您可以构建速率限制函数,通过该功能可以限制用户发出的请求数量。
  • 限制正文有效负载:我们还可以限制正文有效负载中发送的数据量,以使负载不会那么高而导致我们的应用程序崩溃。
  • 避免邪恶的正则表达式:这是针对不匹配输入需要指数时间运行的正则表达式。

NoSql 查询注入:这些类型的攻击发生在攻击者而不是输入有效数据注入一些查询时,这将导致某些字段为 true 而没有正确的数据,例如在用户名字段中,攻击者放置一些将导致 true 的数据,这样做攻击者采取访问您的私人数据。因此,为了避免这种情况,请使用 Mongoose for MongoDB,它提供了模式验证,因此您可以轻松地进行验证并防止此类攻击。

其他最佳实践:

  • 创建随机密码并重置具有到期日期的令牌。
  • 密码更改后拒绝访问 JWT 令牌
  • 不要在 git 上提交敏感数据或配置
  • 始终使用双重身份验证。
  • 始终在应用程序的身份验证、授权和安全功能上花费尽可能多的时间。