2010-07-04 80 views
4

如果我想创建一个简单的防欺诈和不可否认系统,我应该考虑哪些关键功能?对于这个问题,我主要关注数据库行的完整性。这不是安全许可问题。创建一个简单的不可否认/防欺诈系统

使用的足球数据库为例,一些我将实现主要特点是:

  1. 防止DBA使用传统的SQL修改行数据。例如,如果数据库行已经存储2:1作为结果,如果DBA将结果更改为2:3,我们应该能够检测到修改。所有更改应通过主应用程序完成。

  2. 阻止一个行中的数据的另一行的使用后端的变化复制。我们应该能够发现欺诈变化。

我还应该考虑让我的系统更加欺诈证据的任何其他问题或功能?我应该了解哪些最佳做法?任何指针将不胜感激。

非常感谢提前。

回答

3

创建一列,这是其他列的加密签名。只要ID包含在签名计算中,就不能复制一行,因为ID会改变。如果没有重新计算哈希,就不能执行修改,因此DBA的更改也是可检测的。

这并没有解决DBA 删除行的问题,请注意,它只会验证每个单独的行是否经过了适当的业务逻辑。你可能会为整个桌子包含一个签名,但是开始变得非常沉重!

当然,在某些时候你需要一个秘密 - 签名密钥的私人部分。您的代码将需要访问......不管是谁写的代码可以包括后门电子邮件自己的私有密钥等迟早你要相信有人,我怀疑。 (你可以申请多个签名,当然,从不同的球队 - 这样的团队必须以伪造任何勾结。)

+0

感谢您深思熟虑的回应。 +1 – Syd 2010-07-04 07:38:36

+0

+1用于*应用多个签名想法*。 – 2010-07-04 08:30:00

+0

鉴于时间的流逝,我没有找到比Jon更好的答案。我很高兴接受Jon的。创建所有列的哈希签名(而不仅仅是一些特殊的字段)将防止DBA复制另一行或复制特定的列。要做到这一点,每一行都必须有附加的时间标记要求。 – Syd 2010-07-12 02:45:42

2

是完全直言不讳:你是在浪费你的时间。

DBA具有与您的数据库相同的根访问权限。如果不是,他们将会非常无效。系统管理员也会遇到同样的问题,基本上你所能做的任何事情都不过是安慰剂而已。你可以做的唯一事情就是一个具有这种访问级别的恶意人员不会给他们开始的访问权限。

您可以做的最好的做法是让它成为通过创建审计跟踪更困难。记录用户登录,注销,他们做什么,系统响应什么事件等等。这个唯一真正的价值是能够(希望)重建发生的事情,如果你手动决定进入并稍后再看。

至于改变足球比赛的结果,问问你自己有多可能发生。当然,这并不会改变足球比赛的结果。它只是改变它被记录的方式。任何看到或参与的人都会意识到实际结果,因此有人在系统上更改它有什么价值?

在公司,错误和恶意,并通过对账过程处理。股票经纪人将拥有一个团队,负责运行有关系统内容的报告,并将其与实际完成的银行交易进行比较。任何差异都会被标记为红色。所以你可以在系统上改变你的平衡,但它会被备份。

这个难题的另一部分是对DBA活动的限制实际上并不能解决问题。应用程序开发者可以释放任意代码即使经过审查,系统仍然可以在构建工程师或具有对生产环境的根级访问权的人编译修改后的版本并运行它。

+0

即使我们使用足球比赛作为最简单的例子,如果结果可以在小费竞赛中提高自己的积分,尤其是在比赛结束之前完成改变时,您可能会惊讶于有人可能希望改变结果。实际点数正在分配中。 我不同意你的第一点,即DBA拥有root权限,他可以改变任何事情。但是,我想谈谈审计追踪(+1)的必要性。对于一个简单的系统,我不必实施审计跟踪,但是当我设计一个更复杂的系统时,我会添加这个考虑因素。 – Syd 2010-07-04 07:48:02

+0

我想知道你为什么离开meta-stackoverflow?我只是在那里阅读你的一个问题,并提高它的投入和赏金 – 2010-07-04 19:09:31

+0

@Johannes ..已经2天但只有两个答案。我相信以前有人处理过这个问题。让他们分享他们的经验来设计更好的设计是非常好的。我会再等3天。如果没有更好的答案,我会做标记(现在乔恩领先)。 – Syd 2010-07-06 08:31:31