dkvirus / py-novel

看小说。服务端:【Python+Flask+Mariadb】、【Node+Express+Mariadb】;客户端:【Vue+iview】、【微信小程序】、【Android原生开发(Java)】、【Flutter+Dio】、【Taro+Typescript】
MIT License
129 stars 50 forks source link

生产事故:数据库表被删数据 #23

Closed dkvirus closed 5 years ago

dkvirus commented 5 years ago

对于那些在用 公羊阅读 的小伙伴先道个歉,弄丢了你们的数据,实在抱歉。

对于那些乱调用删除接口的小伙伴也表示感谢,谢谢你们给我机会去完善系统安全设计。

起因

昨天晚上看小说,发现书架里莫名其妙多了些没有收藏过的小说,查看数据库,发现 gysw_shelf 这张表被删掉了超过一半的数据。

分析

目前猜测是有人在源码里看到了删除书架这个接口,由于接口设计缺陷,是根据 id 删除数据的,而 id 保存的是自增长的数字,那么破坏者可以随意尝试删除 id 为 1、2、5 的数据。

教训

教训一: 在公网运行的系统 id 永远不要用自增长的数字,可以使用随机字符串。

教训二:接口要做认证和授权。用户只有登录之后才能操作关于自己的数据,不能操作其它用户的数据。这样破坏者最多只能删除自己的数据,无法恶意删除他人的数据。

教训三:操作日志。这个太关键了,哪个用户调用了哪个接口,方便找出不怀好意的人。

教训四:数据库备份。不能因为是个人项目就忽略备份,你永远无法预测哪一天你的数据就会丢失。

dkvirus commented 5 years ago

接口认证与授权

dkvirus commented 5 years ago

小程序紧急修复,目前已经提交最新版本,审核中,估计下午可以看小说啦~

程序漏洞有待完善,数据库性能也需要提速一波,接下来事多的一逼~抗住。

dkvirus commented 5 years ago

数据备份

《MariaDB 入门很简单》 第 16 章介绍备份,第 17 章介绍日志。

服务器准备写个定时任务,自动执行数据库备份任务,超过 30 天的备份文件自动删除。