这会创建任何安全漏洞吗?

时间:2017-05-05 16:49:58

标签: javascript node.js mongodb security

我是一个mongodb系列"用户"我想在其中添加一个新字段" wallet_amount"当用户在钱包里加钱时。现在在用户注册时,我试图插入这样的文件

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

这是否是正确的方法,或者有可能会产生一些安全漏洞,因为我将wallet_amount默认值传递为0? 或者,只有在用户在钱包中加钱时才应插入wallet_amount。

1 个答案:

答案 0 :(得分:1)

理论上,对于您是在用户创建时还是在稍后阶段设置初始金额,没有安全隐患。

但是,您作为更一般的安全问题所面临的是每次您对users表有任何查询,您需要对其进行三重检查以确保无法改变wallet_amount不正确。任何针对此表编码的开发人员都会触及可能非常敏感的数据。

为了减轻这种影响,如果您正在处理这样的敏感字段:

  1. 实际将钱包金额存储在单独的表格或数据库中
  2. 拥有一组非常有限的API来调整钱包数量,对它们进行广泛测试,并且只在使用钱包数量时才使用这些API
  3. 这意味着您可以将敏感数据与用户表分离,并允许您隔离域中需要额外关注的部分。

    如果您想更进一步,请考虑不要存储钱包金额。非常安全的财务系统的一种常见方法是实际存储分类帐,它是每个事务的不可变记录。在您的情况下,它可能看起来像:

    1. 第1天:我在钱包里加100美元
    2. 第2天:我花了10美元
    3. 第3天:我花了13美元
    4. 等。然后,您可以实际设置数据库,以便永远不会改变任何数据,只需在分类帐中添加更多行。可以使用缓存来跟踪当前余额,但始终可以通过运行分类帐项来重新创建。这可能对您的方案来说有点过分,但可以提供额外的保护层,因为您基本上禁止任何人随意更改钱包中的内容,他们只能添加事务(这样可以更轻松地发现可疑行为或模式,并跟踪钱移动的地方)。