V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
asing
V2EX  ›  程序员

在用户财务虚拟账户上面怎么才能最大程度防止被黑客篡改数据?

  •  
  •   asing · 2013-03-07 14:48:30 +08:00 · 2975 次点击
    这是一个创建于 4065 天前的主题,其中的信息可能已经有所发展或是发生改变。
    两台服务器,A跑webB跑mysql,现在做的是web端请求mysql只能从A机IP请求。

    用户财务虚拟帐号设计了几个表
    充值流水表
    流水id,充值方式,充值方式流水id,充值金额,用户id
    个人账户表
    用户id,充值金额,显示金额

    简单解释下
    充值方式是PP和信用卡,货币单位都是USD,所以在个人账户表中会存在两个金额
    例如个人充值100USD,需考虑到汇率损失、充值手续费等因素,个人显示金额可能是95USD


    假设最恶劣情况
    黑客侵入篡改充值金额,显示金额,立即下单购买商品

    php程序和数据库要怎样设计才能保证数据准确性唯一性,也好进行排查?
    4 条回复    1970-01-01 08:00:00 +08:00
    qiuai
        1
    qiuai  
       2013-03-07 15:43:23 +08:00
    可以把金额加盐再存储一次.消费前进行对比.
    nichan
        2
    nichan  
       2013-03-07 15:49:06 +08:00
    @qiuai 如果加密存储数字的话,条件查询的时候应该怎么办?一直被这个问题困扰……
    qiuai
        3
    qiuai  
       2013-03-07 19:04:35 +08:00   ❤️ 1
    @nichan 表1存储金额.表2里放加密后的金额,这个加密可以反向解密.但是有一个特殊的盐在里面.
    然后消费和查询的时候,使用表1里的金额,但是牵扯到消费的时候,可以先去与表2对比一下.一致以后再去消费.

    或者你可以对金额的存储做一下简单的加密.让黑客找不到金额到底是哪个.呵呵,办法是想出来的嘛~
    enj0y
        4
    enj0y  
       2013-03-08 03:57:21 +08:00
    方案:
    1.对金额加密验证,但算法的不可逆性需要你自己斟酌,
    最佳的算法:有cryptcheck(var amount,var hashcrypted){return false||true;},但没有encrypt(var amount){return str;}
    2.定时作业比对金额较上次变动(增加)与此用户相应的充值转账流水记录,如有必要可以调用PP/CreditCard 日志接口,如果发现账户异常直接冻结用户所有操作权限通知管理审查,但需要注意任务不要影响主业务。
    3.强制用户实名验证,遇到紧急情况也有据可查。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3441 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 12:06 · PVG 20:06 · LAX 05:06 · JFK 08:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.