我有一个 mongodb 集合“users”,当用户在钱包中添加资金时,我想在其中添加一个新字段“wallet_amount”。现在在用户注册时,我正在尝试插入这样的文档
db.users.insert( { email: "test@test.com", wallet_amount: 0 } )
这是执行此操作的正确方法吗?或者由于我将 wallet_amount 默认值传递为 0,因此这可能会造成一些安全漏洞? 或者wallet_amount应该只在用户向钱包充值时插入。
最佳答案
理论上,无论您是在用户创建时还是在稍后阶段设置初始金额,都不会产生安全隐患。
但是,您面临的更普遍的安全问题是,每次您对用户表进行任何查询时,您都需要对其进行三次检查,以确保它无法更改wallet_amount 错误。任何针对此表进行编码的开发人员都可能接触到非常敏感的数据。
为了缓解这种情况,如果您正在处理这样的敏感字段:
- 将钱包金额实际存储在单独的表或数据库中
- 用于调整钱包金额的 API 集非常有限,需要对其进行广泛测试,并且仅在处理钱包金额时使用这些 API
这意味着您可以将敏感数据与用户表分离,并允许您隔离域中需要额外关注的部分。
如果您想更进一步,请考虑根本不存储钱包金额。非常安全的金融系统的常见方法是实际存储一个分类账,它是每笔交易的不可变记录。在你的情况下,它可能看起来像:
- 第 1 天:我向钱包添加 100 美元
- 第 2 天:我花了 10 美元
- 第 3 天:我花费了 13 美元
等等。然后,您可以实际设置数据库,这样您永远不会改变任何数据,只会向分类帐添加更多行。缓存可用于跟踪当前余额,但始终可以通过运行分类账项来重新创建。这对于您的场景来说可能有点过头了,但可以提供额外的保护层,因为您基本上禁止任何人任意更改钱包中的内容,他们只能添加交易(这使得更容易发现可疑行为或模式,并追踪资金流动的地方)。
关于javascript - 这会造成任何安全漏洞吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43810117/