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

2018-09-06 19:39:17 +08:00
 pabupa

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

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

paylock.py

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

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

2421 次点击
所在节点    程序员
17 条回复
tms
2018-09-06 19:46:08 +08:00
不是队列么?
baojiweicn2
2018-09-06 19:47:56 +08:00
加个 freeze 的中间态,加个全局锁,事务操作,本地注册表和最终一致性。
p2pCoder
2018-09-06 19:49:30 +08:00
加个强校验
先冻结 然后再请求银行或者第三方支付机构
给账户加锁


先把转账功能关了
fancyhan
2018-09-06 19:49:31 +08:00
典型的 Reenterence attack,得用支持事务的数据库
oyosc
2018-09-06 19:51:33 +08:00
这种转账没有事务操作嘛...
swulling
2018-09-06 19:56:22 +08:00
并发冲突都不解决,还敢上线金融服务。。
DeWhite
2018-09-06 20:14:10 +08:00
A 为总值,操作金额为 B
A≠B,触发停用账号
人工审核完事了
realpg
2018-09-06 20:15:53 +08:00
连基本的事务都不会用就敢写涉及钱的东西 大写的服
statfall
2018-09-06 20:19:36 +08:00
没有用阿里微信第三方支付?
gamexg
2018-09-06 20:19:37 +08:00
没测试人员?
Sor
2018-09-06 20:24:40 +08:00
楼上的给点解决办法呀 这种类似的问题以前我也遇到过,按理说用 redis 应该可以解决吧
mhtt
2018-09-06 20:44:10 +08:00
你们在做二清?
pagxir
2018-09-06 20:53:27 +08:00
上区块链,等交易被写入区块并且被确认之后在发送交易,写入失败则拒绝发送交易。
blless
2018-09-06 20:57:07 +08:00
@Sor redis 呗 账号操作前先申请一个分布式锁,用账号名做 key 不就好了 整个流程完成再解锁
Sor
2018-09-06 21:07:14 +08:00
@blless 嘿嘿嘿 我也这样想的
moult
2018-09-06 21:23:38 +08:00
转账请求提交到第三方支付之前,先从账户里面扣款并更新余额字段,更新余额字段一定要 update set money=money-x,让数据库去减,切忌不要在程序中减好再去更新。更新成功之后,再去实时查询出当前余额,看看余额是否小于 0。
毕竟同时对数据库对同一条记录的 update 肯定是先后被执行的。
fancyhan
2018-09-07 03:23:07 +08:00
问题在这里
```
def __exit__(self, exc_type, exc_val, exc_tb):
self.clear()
```
异常也会删除键值,我们利用一次异常就能清除状态了,然后再攻击即可

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/486872

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX