如何在数据库中安全存储账户余额?

3 投票
2 回答
553 浏览
提问于 2025-04-16 13:17

我有一个Django的网页应用程序,现在需要给它加一个支付模块。

简单来说,用户会提前支付一定金额的服务费,然后随着用户使用服务,这个金额会慢慢减少。我在想,怎么做才是最好的方法呢?我可以用Satchmo来处理支付,但如果只是把美元金额存到数据库里,然后我的代码直接和这个金额打交道,这样似乎有点风险。虽然我可以这么做,但我想知道有没有已经经过验证的解决方案可以参考呢?

2 个回答

1

我建议你确保和网页应用程序连接的数据库是只读的,特别是那些处理账户余额的表格。也就是说,你处理支付和账户余额减少的操作时,应该在一个只有你能访问的数据库里进行(比如,这个数据库不连接互联网,也不和这个网页应用程序相连)。你可以定期对这个数据库进行快照,然后更新一个和网页应用程序互动的数据库,这样用户就能看到他们余额的副本。这样,即使有用户能修改数据,把自己的余额增加到一百万,你也能在另一个地方找到他们真实的余额。总之,你不需要信任网页应用程序那边的数据——那里的数据只是给用户看的信息而已。

6

我不太清楚你说的“经过充分测试的解决方案”是什么,但我强烈建议不要仅仅在数据库里存一个美元数值,然后随意增加或减少这个数值。相反,我建议你记录每一笔交易,这样如果出现问题就可以进行审计。你应该根据用户账户里的信用和借记交易来计算可用金额,而不是直接存储这个金额。

为了更安全,你需要确保你的应用程序不能删除任何交易记录。如果因为某种原因你无法限制相关表的写入权限,可以尝试在创建交易时,把这些交易复制到一个第二个数据库(这个数据库不让应用程序访问)。

撰写回答