谈谈并发问题攻击面

Posted by bfpiaoran on April 23, 2021

负责了近一年的资金相关的业务,可怕的不是传统sql注入、xss、ssrf,而是涉及到钱的一些操作。说到钱不得不提及一个我挖洞赚钱不怎么关注的问题,并发问题。也叫条件竞争….
最开始看到条件竞争还是在web hacking 101这本书里 有把条件竞争算到了逻辑漏洞里Hacking Starbucks for unlimited coffee,看到了这个有种恍然大悟的感觉,然而在挖洞的时候也没太在意,其实条件竞争处理办法也就几种,但坑却不少

从头讲起,最开始用户不多,应用放到一台服务上面跑就可以了,这时候遇到问题处理的方式也简单多线程使用线程同步就可以了。

而到了现在web应用由于用户多,服务器性能不够用,出现了分布式的应用,这时候打一个的线程同步肯定不够了,于是就有了用于分布式的锁
1).redis锁
由于redis原子性,嗯也就是单线程,所以也就能保证该事务的单线程,比如单用户提现,由于单线程,并发打开率不会出现,这里只是大概率,因为即便redis单线程,事务单线程了,也还是会有问题,这个一会讲。
2).数据库锁
乐观锁悲观锁,探索mysql锁 这里有详细介绍了。emm 好像没啥说的了。

其实今天说的不是这事,说的是数据库锁和redis锁的问题,个人更喜欢mysql锁,而不是redis锁,在最近处理条件竞争的时候经常遇到这种事,事务上了redis锁,但是还是没有锁住,还是因为分布式的问题,有时候你会发现我扣钱操作也加锁了,加钱操作也加锁了,为什么还是有问题,其实我们锁的根本不是锁事务,而是锁数据放一张不一样又一样的图。
一目明了 其实还是要锁数据。。。。