目前发现的问题是,并发没有解决好。当余额还有 1 元时,并发的请求每个拿到的余额都是 1 元,然后就各自转账成功了。
转账的方法会先进入一个 PayLock,我觉得 PayLock 能够解决并发的问题,但是并没有。
技不如人,,,感觉很难受…………
领导还给黑客打了电话,据说他们很嚣张,,,,有录音我也不想听。。。。承认自己是个彩笔的感觉真的是………………
目前发现的问题是,并发没有解决好。当余额还有 1 元时,并发的请求每个拿到的余额都是 1 元,然后就各自转账成功了。
转账的方法会先进入一个 PayLock,我觉得 PayLock 能够解决并发的问题,但是并没有。
技不如人,,,感觉很难受…………
领导还给黑客打了电话,据说他们很嚣张,,,,有录音我也不想听。。。。承认自己是个彩笔的感觉真的是………………
1
tms Sep 6, 2018
不是队列么?
|
2
baojiweicn2 Sep 6, 2018 via iPhone
加个 freeze 的中间态,加个全局锁,事务操作,本地注册表和最终一致性。
|
3
p2pCoder Sep 6, 2018 via Android
加个强校验
先冻结 然后再请求银行或者第三方支付机构 给账户加锁 先把转账功能关了 |
4
fancyhan Sep 6, 2018
典型的 Reenterence attack,得用支持事务的数据库
|
5
oyosc Sep 6, 2018
这种转账没有事务操作嘛...
|
6
swulling Sep 6, 2018
并发冲突都不解决,还敢上线金融服务。。
|
7
DeWhite Sep 6, 2018
A 为总值,操作金额为 B
A≠B,触发停用账号 人工审核完事了 |
8
realpg Sep 6, 2018
连基本的事务都不会用就敢写涉及钱的东西 大写的服
|
9
statfall Sep 6, 2018 via Android
没有用阿里微信第三方支付?
|
10
gamexg Sep 6, 2018
没测试人员?
|
11
Sor Sep 6, 2018
楼上的给点解决办法呀 这种类似的问题以前我也遇到过,按理说用 redis 应该可以解决吧
|
12
mhtt Sep 6, 2018
你们在做二清?
|
13
pagxir Sep 6, 2018
上区块链,等交易被写入区块并且被确认之后在发送交易,写入失败则拒绝发送交易。
|
16
moult Sep 6, 2018
转账请求提交到第三方支付之前,先从账户里面扣款并更新余额字段,更新余额字段一定要 update set money=money-x,让数据库去减,切忌不要在程序中减好再去更新。更新成功之后,再去实时查询出当前余额,看看余额是否小于 0。
毕竟同时对数据库对同一条记录的 update 肯定是先后被执行的。 |
17
fancyhan Sep 7, 2018
问题在这里
``` def __exit__(self, exc_type, exc_val, exc_tb): self.clear() ``` 异常也会删除键值,我们利用一次异常就能清除状态了,然后再攻击即可 |