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