gpt4 book ai didi

javascript - Node/Express 安全性

转载 作者:太空宇宙 更新时间:2023-11-04 03:14:05 24 4
gpt4 key购买 nike

我正在开发我的第一个 Node 应用程序。现在它已准备好部署,我想保护我的应用程序。所以我使用这些库来保护它。

import mongoSanitize from 'express-mongo-sanitize';
import helmet from 'helmet';
import xss from 'xss-clean';
import hpp from 'hpp';
import cors from 'cors';
import rateLimit from 'express-rate-limit';

我想知道的是,我在这里重复东西吗?我必须使用所有这些库吗?这里的库是否做同样的事情,以便我可以通过从应用程序中删除不必要的中间件来删除它们以提高应用程序的性能?

最佳答案

你不能只是堆砌一些“安全”库就神奇地变得“安全”。您不认为如果这是可能的,所有这些包都将自动应用吗?

让我们看看这些模块的实际用途......

表达-mongo- sanitizer

This module searches for any keys in objects that begin with a $ sign or contain a ., from req.body, req.query or req.params. It can then either:

  • completely remove these keys and associated data from the object, or
  • replace the prohibited characters with another allowed character.

这(可以说)是一个非常糟糕的主意。如果您一开始就正确转义以便在查询中使用,则不需要存在这样的清理功能。然后,您就不必担心这样的模块会完全破坏您的数据结构。此外,如果您确实依赖这种库,您可以肯定会有一些解决办法,因为它没有解决根本问题……混合数据和命令的上下文是危险且容易出错的。

Helm

Helmet is a collection of 14 smaller middleware functions that set HTTP response headers.

这个包有一大堆东西,从 HSTS 到禁用缓存。正如该软件包的作者在自述文件顶部所警告的那样,它们都不是某种安全银弹:

It's not a silver bullet, but it can help!

您应该了解所有这些 header 的实际用途,以便您可以使用正确的 header 。此外,其中大部分内容您需要在 Web 服务器(例如 Nginx)上应用,而不是在应用程序中处理。

xss-clean

This will sanitize any data in req.body, req.query, and req.params. You can also access the API directly if you don't want to use as middleware.

没有什么比 NPM 包更能体现“安全性”了,它的文档几乎为零,并且已经 4 年没有被触及过。不过,从一开始这确实是一个糟糕的主意。仅当您将数据插入 HTML 时,才应该针对 HTML 上下文转义数据。如果你过早这样做,你只会破坏你的数据。对此的误解实际上可能会导致您将来出现安全问题,更不用说损坏的应用程序的困惑了。 (另请参阅:The holy grail of cleaning input and output in php?)

hpp

Express middleware to protect against HTTP Parameter Pollution attacks

该模块采用多个查询字符串变量并防止它们作为数组返回。如果这是您想要的,那么这很好,但是在查询字符串中包含多个相同的键是预期的,并且您的应用程序可以使用详细记录的行为。如果这是一个问题,您实际上应该修复您的应用程序,而不是依赖此模块来破坏标准行为。

坐标

正如 @jfriend00 指出的,CORS 库可帮助您添加适当的响应 header 以启用对数据的跨域访问。这可能是安全且适当的,但您可能不想默认启用它。

快速速率限制

Basic rate-limiting middleware for Express. Use to limit repeated requests to public APIs and/or endpoints such as password reset.

如果您想要限制速率,这可能很有用。我建议在网络服务器级别执行此操作,而不是在您的应用程序中对其进行干扰。 Nginx 和类似的模块/配置有高效且快速的模块/配置,它们能够比将其构建到您构建的每个 Node.js 应用程序中更好地处理这个问题。

TL;DR;

了解您要防范的是什么,否则无论您安装什么模块,您都绝对注定不安全。安全性不是您安装的某个补丁。

关于javascript - Node/Express 安全性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59242927/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com