代码之家  ›  专栏  ›  技术社区  ›  Syd

创建一个简单的不可抵赖性/防欺诈系统

  •  4
  • Syd  · 技术社区  · 14 年前

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

    以足球数据库为例,我将实现的一些关键功能是:

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

    2. 禁止使用后端更改将数据行复制到另一行。我们应该能够发现欺诈的变化。

    是否有其他问题或功能需要我考虑,以使我的系统更防欺诈?我应该了解哪些最佳实践?任何提示都将是最受欢迎的。

    非常感谢。

    2 回复  |  直到 14 年前
        1
  •  3
  •   Jon Skeet    14 年前

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

    这并不能解决DBA的问题 去除 行,注意-它只验证每一行都经过了适当的业务逻辑。您可能会为整个表包含一个签名,但这开始变得非常沉重!

    当然,在某些情况下,您需要一个秘密——签名密钥的私有部分。您的代码需要访问…写代码的人 能够 包括一个后门,通过电子邮件向自己发送私人密钥等。迟早你必须信任 某人 我怀疑。(当然,你可以申请来自不同团队的多个签名,所以团队必须串通一气才能伪造任何东西。)

        2
  •  2
  •   cletus    14 年前

    直截了当地说:你在浪费时间。

    DBA具有对数据库的根访问权限。如果不是这样,它们将相当无效。同样的问题也会出现在系统管理员身上,基本上你所能做的只是一个安慰剂而已。对于具有这一级别访问权限的恶意人员,您唯一能做的就是不让他们从一开始就拥有访问权限。

    你所能做的就是 小的 更难通过创建审计跟踪。当用户登录、注销、他们做什么、系统响应什么事件等时进行登录。它的唯一真正价值是(希望)能够重建发生的事情,如果您手动决定进入并稍后查看它。

    至于改变一场足球比赛的结果,问问自己这有多可能发生。当然,这并不能改变足球比赛的结果。它只是改变了记录的方式。任何看到或参与的人都会知道实际结果,所以在系统中更改它的人有什么价值?

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

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