javascript - 这会造成任何安全漏洞吗?

标签 javascript node.js mongodb security

我有一个 mongodb 集合“users”,当用户在钱包中添加资金时,我想在其中添加一个新字段“wallet_amount”。现在在用户注册时,我正在尝试插入这样的文档

db.users.insert( { email: "test@test.com", wallet_amount: 0 } ) 

这是执行此操作的正确方法吗?或者由于我将 wallet_amount 默认值传递为 0,因此这可能会造成一些安全漏洞? 或者wallet_amount应该只在用户向钱包充值时插入。

最佳答案

理论上,无论您是在用户创建时还是在稍后阶段设置初始金额,都不会产生安全隐患。

但是,您面临的更普遍的安全问题是,每次您对用户表进行任何查询时,您都需要对其进行三次检查,以确保它无法更改wallet_amount 错误。任何针对此表进行编码的开发人员都可能接触到非常敏感的数据。

为了缓解这种情况,如果您正在处理这样的敏感字段:

  1. 将钱包金额实际存储在单独的表或数据库中
  2. 用于调整钱包金额的 API 集非常有限,需要对其进行广泛测试,并且仅在处理钱包金额时使用这些 API

这意味着您可以将敏感数据与用户表分离,并允许您隔离域中需要额外关注的部分。

如果您想更进一步,请考虑根本不存储钱包金额。非常安全的金融系统的常见方法是实际存储一个分类账,它是每笔交易的不可变记录。在你的情况下,它可能看起来像:

  1. 第 1 天:我向钱包添加 100 美元
  2. 第 2 天:我花了 10 美元
  3. 第 3 天:我花费了 13 美元

等等。然后,您可以实际设置数据库,这样您永远不会改变任何数据,只会向分类帐添加更多行。缓存可用于跟踪当前余额,但始终可以通过运行分类账项来重新创建。这对于您的场景来说可能有点过头了,但可以提供额外的保护层,因为您基本上禁止任何人任意更改钱包中的内容,他们只能添加交易(这使得更容易发现可疑行为或模式,并追踪资金流动的地方)。

关于javascript - 这会造成任何安全漏洞吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43810117/

相关文章:

node.js - Mongodb 更新所有具有唯一 id 的文档

MongoDB 按项目汇总,然后按周小时总和

javascript - 如何在jqgrid中加载新添加的数据

javascript - 如何使用Jquery在对话框中显示要删除的项目?

javascript - Webpack & 测试 : Helper to delete/replace modules from the require cache

node.js - 我们可以在 Node 中使用重定向发送数据吗

node.js - 如何使用 Node.JS 在 MongoDB 中使用 $inc 运算符作为变量

javascript - 是否存在 Javascript Liferay 服务库的文档?如何处理错误情况?

javascript - 如果子 div 不包含子 div,则隐藏父 div

node.js - NodeJS 与 Mongoose - 实用地将 url 添加到使用 find() 检索到的图像中