Sha*_*ika 0 javascript middleware node.js express
我正在开发我的第一个节点应用程序。现在可以部署了,我想保护我的应用程序。所以我使用这些库来保护它。
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';
Run Code Online (Sandbox Code Playgroud)
我想知道的是,我在这里复制东西吗?我必须使用所有这些库吗?这里的库是否做同样的事情,以便我可以通过从应用程序中删除不必要的中间件来删除它们以提高应用程序的性能?
你不能只是堆积在一些“安全”库上,然后神奇地变得“安全”。难道你不认为如果这是可能的,所有这些包都会自动应用吗?
让我们看看这些模块实际上做了什么......
此模块从 req.body、req.query 或 req.params 中搜索以 $ 符号开头或包含 . 的对象中的任何键。然后它可以:
- 从对象中完全删除这些键和相关数据,或
- 用另一个允许的字符替换禁止的字符。
这(可以说)是一个非常糟糕的主意。如果您首先正确地将事物转义以在查询中使用,则不需要存在这样的清理功能。然后,您不必担心这样的模块会完全破坏您的数据结构。此外,如果您确实依赖于这种库,您可以肯定会有一些方法可以解决它,因为它没有解决根本问题......混合数据和命令的上下文是危险的和错误的 -易于。
Helmet 是 14 个设置 HTTP 响应标头的较小中间件函数的集合。
这个包有一大堆东西,从 HSTS 到禁用缓存。它们都不是某种安全银弹,因为这个包的作者在自述文件的最顶部警告:
这不是灵丹妙药,但它可以提供帮助!
您应该了解所有这些标头的实际作用,以便您可以使用正确的标头。此外,您需要在您的 Web 服务器(例如 Nginx)上应用其中的大部分内容,而不是在您的应用程序中处理它。
这将清理 req.body、req.query 和 req.params 中的任何数据。如果您不想用作中间件,也可以直接访问 API。
没有什么比 NPM 包更能说明“安全”的了,它的文档几乎为零,而且已经 4 年没有被触及过。不过,这确实是一个糟糕的主意。只有当您将数据插入 HTML 时,您才应该为 HTML 的上下文转义数据。如果你早点这样做,你只会破坏你的数据。对此的误解实际上可能会导致您在未来遇到安全问题,更不用说损坏的应用程序造成的混乱。(另请参阅: 在 php 中清理输入和输出的圣杯?)
防止 HTTP 参数污染攻击的 Express 中间件
该模块采用多个查询字符串变量并防止它们作为数组返回。如果这是您想要的,这很好,但是在查询字符串中有多个相同的键是有意的,并且您的应用程序可以使用记录良好的行为。如果这是一个问题,您应该实际修复您的应用程序,而不是依赖此模块来破坏标准行为。
正如@jfriend00 指出的那样,CORS 库可帮助您添加适当的响应标头以启用对数据的跨域访问。这可能是安全和适当的,但不是您可能希望默认启用的。
Express 的基本速率限制中间件。用于限制对公共 API 和/或端点(例如密码重置)的重复请求。
如果您想要速率限制,这可能很有用。我建议在 Web 服务器级别执行此操作,而不是在您的应用程序中使用它。Nginx 和类似的有高效且快速的模块/配置,它们将能够比将其构建到您构建的每个 Node.js 应用程序中更好地处理这个问题。
了解您要防范的是什么,否则无论您安装什么模块,您都注定不安全。安全不是您安装的某个补丁。
| 归档时间: |
|
| 查看次数: |
650 次 |
| 最近记录: |