如果我想创建一个简单的防欺诈和不可否认系统,我应该考虑哪些关键功能?对于这个问题,我主要关注数据库行的完整性。这不是安全许可问题。
以足球数据库为例,我将实现的一些关键功能是:
防止DBA使用传统SQL修改行数据。例如,如果数据库行已经存储了2:1作为结果,如果DBA将结果更改为2:3,我们应该能够检测到修改。所有更改都应通过主应用程序完成。
防止使用后端更改将一行数据复制到另一行。我们应该能够发现欺诈变化。
我应该考虑使用其他任何问题或功能来使我的系统更具欺诈性吗?我应该注意哪些最佳实践?任何指针都将非常受欢迎。
非常感谢提前。
答案 0 :(得分:3)
创建一列,这是其他列的加密签名。只要ID包含在签名计算中,就无法复制行,因为ID会发生变化。如果不重新计算哈希值,就无法进行任何修改,因此DBA的更改也是可检测的。
这并没有解决DBA 删除行的问题,请注意 - 它只验证每个行都经过了相应的业务逻辑。您可能会为整个表格添加一个签名,但这开始变得非常沉重!
当然,在某些时候你需要一个秘密 - 签名密钥的私有部分。您的代码将需要访问...并且编写该代码的任何人可以包含一个后门,通过电子邮件发送自己的私钥等。迟早您必须信任某人 , 我猜测。 (当然,您可以应用来自不同团队的多个签名 - 因此团队必须串通才能伪造任何东西。)
答案 1 :(得分:2)
完全生硬:你在浪费你的时间。
DBA具有与数据库的root访问权限。如果没有,他们将会相当无效。系统管理员也会出现同样的问题,基本上你可以做的任何事情都只是安慰剂。对于具有该级别访问权限的恶意人员,您唯一能做的就是不允许他们开始使用。
您可以做的最好的事情是通过创建审计跟踪使其更难以小。用户登录,注销,执行操作,系统响应的事件等时记录。唯一真正的价值在于能够(希望)重建发生的事情,如果您手动决定进入并稍后查看它。
至于改变足球比赛的结果,问问自己发生这种情况的可能性。当然,它实际上并没有改变足球比赛的结果。它只是改变它的记录方式。任何看到它或参与过的人都会知道实际的结果,那么有人在系统上更改它会有什么价值呢?
在公司,错误和恶意中,由和解流程处理。股票经纪人将拥有一个团队,负责运行系统上的内容报告,并将其与实际完成的银行交易进行比较。任何差异都会被标记为红色。所以你可以改变你的系统平衡,但它会得到备份。
这个难题的另一部分是对DBA活动的限制实际上不会解决问题。应用程序开发者可以释放任意代即使经过审核,系统仍然可以在构建工程师或对生产环境具有根级访问权限的人员中进行分解,从而编译修改后的版本并运行该版本。