• 请不要在回答技术问题时复制粘贴 AI 生成的内容
pabupa
V2EX  ›  程序员

即时转账被黑客利用了,希望大佬来帮忙看下……

  •  
  •   pabupa · Sep 6, 2018 · 3155 views
    This topic created in 2982 days ago, the information mentioned may be changed or developed.

    目前发现的问题是,并发没有解决好。当余额还有 1 元时,并发的请求每个拿到的余额都是 1 元,然后就各自转账成功了。

    转账的方法会先进入一个 PayLock,我觉得 PayLock 能够解决并发的问题,但是并没有。

    paylock.py

    技不如人,,,感觉很难受…………

    领导还给黑客打了电话,据说他们很嚣张,,,,有录音我也不想听。。。。承认自己是个彩笔的感觉真的是………………

    Supplement 1  ·  Sep 6, 2018
    此帖终结,好吧…………醉了。
    tms
    tms
    Sep 6, 2018
    1
    不是队列么?
    baojiweicn2
    baojiweicn2
    Sep 6, 2018 via iPhone
    2
    加个 freeze 的中间态,加个全局锁,事务操作,本地注册表和最终一致性。
    p2pCoder
    p2pCoder
    Sep 6, 2018 via Android
    3
    加个强校验
    先冻结 然后再请求银行或者第三方支付机构
    给账户加锁


    先把转账功能关了
    fancyhan
    fancyhan
    Sep 6, 2018
    4
    典型的 Reenterence attack,得用支持事务的数据库
    oyosc
    oyosc
    Sep 6, 2018
    5
    这种转账没有事务操作嘛...
    swulling
    swulling
    Sep 6, 2018
    6
    并发冲突都不解决,还敢上线金融服务。。
    DeWhite
    DeWhite
    Sep 6, 2018
    7
    A 为总值,操作金额为 B
    A≠B,触发停用账号
    人工审核完事了
    realpg
    realpg
    Sep 6, 2018
    8
    连基本的事务都不会用就敢写涉及钱的东西 大写的服
    statfall
    statfall
    Sep 6, 2018 via Android
    9
    没有用阿里微信第三方支付?
    gamexg
    gamexg
    Sep 6, 2018
    10
    没测试人员?
    Sor
    Sor
    Sep 6, 2018
    11
    楼上的给点解决办法呀 这种类似的问题以前我也遇到过,按理说用 redis 应该可以解决吧
    mhtt
    mhtt
    Sep 6, 2018
    12
    你们在做二清?
    pagxir
    pagxir
    Sep 6, 2018
    13
    上区块链,等交易被写入区块并且被确认之后在发送交易,写入失败则拒绝发送交易。
    blless
    blless
    Sep 6, 2018 via Android
    14
    @Sor redis 呗 账号操作前先申请一个分布式锁,用账号名做 key 不就好了 整个流程完成再解锁
    Sor
    Sor
    Sep 6, 2018
    15
    @blless 嘿嘿嘿 我也这样想的
    moult
    moult
    Sep 6, 2018
    16
    转账请求提交到第三方支付之前,先从账户里面扣款并更新余额字段,更新余额字段一定要 update set money=money-x,让数据库去减,切忌不要在程序中减好再去更新。更新成功之后,再去实时查询出当前余额,看看余额是否小于 0。
    毕竟同时对数据库对同一条记录的 update 肯定是先后被执行的。
    fancyhan
    fancyhan
    Sep 7, 2018
    17
    问题在这里
    ```
    def __exit__(self, exc_type, exc_val, exc_tb):
    self.clear()
    ```
    异常也会删除键值,我们利用一次异常就能清除状态了,然后再攻击即可
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   5164 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 59ms · UTC 06:32 · PVG 14:32 · LAX 22:32 · JFK 01:32
    ♥ Do have faith in what you're doing.