我正在处理我的第一个节点应用程序。现在它已经准备好部署了,我想要保护我的应用程序。所以我用这些库来保护它。
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';我想知道的是,我在这里复制东西吗?我必须使用所有这些图书馆吗?这里的库是否做了同样的事情,以便我可以删除它们,通过从应用程序中删除不必要的中间件来提高应用程序的性能?
发布于 2019-12-09 05:48:34
你不能只是堆在某个“安全”库上,然后神奇地变成“安全”。你不认为,如果这是可能的,所有这些包将自动应用,已经?
让我们看看这些模块到底做了什么..。
快速芒果消毒
此模块在以$符号开头或包含.的对象中搜索来自req.body、req.query或req.params的任何键。然后,它可以:
这(可以说)是个非常糟糕的主意。如果您对事物进行正确的转义以便在查询中使用,那么这样的清理功能就不需要存在了。然后,您就不必担心这样的模块会完全破坏您的数据结构。此外,如果您确实依赖于这类库,您可以肯定会有某种方式绕过它,因为它不能解决根本的问题.将数据和命令的上下文混合在一起是危险的,而且容易出错。
头盔
头盔是由14个设置headers的较小的中间件函数组成的集合。
这个包有很多东西,从HSTS到禁用缓存。它们中没有一个是某种安全的银弹,正如这个包的作者在自述文件的最上面警告的那样:
--这不是一颗银弹,但它能帮上忙!
您应该了解所有这些标题实际上是做什么的,这样您就可以使用正确的标题。此外,您需要在web服务器(如Nginx)应用其中的大部分内容,而不是在应用程序中处理它。
xss-清洁
--这将净化req.body、req.query和req.params中的任何数据。如果不想将API用作中间件,也可以直接访问API。
没有什么比近零文档的NPM软件包更“安全”了,四年来没有被触及过。不过,这确实是个糟糕的想法。只有在将数据插入HTML中时,才应该转义HTML上下文中的数据。如果你早点这么做,你就是在破坏你的数据。对此的误解实际上可能会导致未来的安全问题,更不用说一个坏掉的应用程序的混乱。(另见:The holy grail of cleaning input and output in php?)
hpp
防止
参数污染攻击的HTTP中间件
此模块接受多个查询字符串变量,并防止它们作为数组返回。如果这是您想要的,这是很好的,但是在查询字符串中有多个相同的键是必要的,并且您的应用程序可以使用这些记录良好的行为。如果这是一个问题,您应该实际修复您的应用程序,而不是依赖这个模块来破坏标准行为。
cors
正如@jfriend00所指出的,CORS库可以帮助您添加适当的响应头,以支持对数据的跨源访问。这可能是安全和适当的,但在默认情况下您可能不希望启用。
特快专递利率限制
基本限速中间件.用于将重复请求限制为公共API和/或端点(如密码重置)。
如果您想要限制利率,这可能是有用的。我建议在web服务器级别上这样做,而不是在您的应用程序中干扰它。对于Nginx和类似的程序,有高效且快速的模块/配置,这些模块/配置比将其构建到每个Node.js应用程序中处理得更好。
TL;DR;
了解您所保护的是什么,否则无论您安装什么模块,您都注定要变得不安全。安全不是你安装的补丁。
https://stackoverflow.com/questions/59242927
复制相似问题