name5566 / leaf

A game server framework in Go (golang)
Apache License 2.0
5.26k stars 1.31k forks source link

db范例的login漏洞 #155

Closed 15951836388 closed 5 years ago

15951836388 commented 5 years ago

看leaf的db例子里,login时,使用skeleton.Go去读取数据库,如果没有这个账号就创建这个账号。

这里如果并发的话,2个用户,同一时刻发送同样的账号,是应该有可能,出现2个人查找数据库,都返回可新建账号,出现数据覆盖的情况。这种情况,要如何避免?最好有个范例哈

name5566 commented 5 years ago

不存在的,有通过数据库保障了,你再仔细看看代码

15951836388 commented 5 years ago

是chanrpc 的rpcUserLogin里, accIDUsers[accID],已经保证了,同样的账号会当做重复登录,会被踢?

name5566 commented 5 years ago

有多个保障。对的,是会被踢。

15951836388 commented 5 years ago

还有,数据库,用了Unique,也能保障 不过这里的逻辑,似乎有些问题。 正常应该是,账号密码正确,通过数据库验证。然后再判断 accIDUsers[accID]是否重复登录。 否则会出现,我玩的好好的。别人用我的账号登录,还没到数据库验证,直接rpcUserLogin就导致我被踢了

name5566 commented 5 years ago

是先验证账号的