关于数据库安全的一些思考

背景

前一阵子,刚想继续开发之前耽误的项目,结果发现前端请求总是报错500,经查发现是数据库中的表和数据都被清空了,同时MySQL中多了一个只有一张表的数据库,查看表里的内容后才发现是被攻击了,需要向指定账户支付比特币才能还原数据。不过因为现阶段中数据库中的数据还都是mock出来的数据而且我的数据库脚本还在,所以也就没太当回事。直到今天,跟同学一块接的外包项目的数据库也出现了相同的问题,我才意识到问题的严重性。

原因复盘

没有进行IP限制:

因为没接触过上线的项目,在之前接触的 demo 级项目中,通常都是将数据库部署在服务器上,然后通过远程连接在本地上进行开发,然后再将后端部署在服务器上与前端进行交互。然后没有养成良好的开发习惯,为了实现远程连接,通常都是直接将 mysql 数据库中的 user 表中 root 的 host 设置为 % ,也就是所有的IP都可以用root用户进行登录,这也给了攻击者可乘之机。

数据库密码设置过于简单

这个问题还是因为开发习惯不好,数据库的密码通常都是123456、root等,过于简单,使得攻击者能轻而易举试出数据库密码进而施行进一步攻击。

服务器密码泄露

这个问题在使用服务器的初期经常会犯的错误,为了登陆时候的方便,也是将登陆密码设置的太简单,密码被攻击者试出来从而导致密码泄露,让攻击者能够进一步为非作歹。

解决方案

限制远程连接的IP

应避免将mysql.user表中的host字段直接设置为%,应限制在指定IP或者某个子网中。

针对每个项目创建具体的用户

例如在开发A项目时,创建一个用户a,然后仅赋予他A项目数据库的操作权限,类似,在开发B项目时,创建一个新用户b,这样避免了root用户的滥用,也更方便管理,root用户的host直接限制在localhost。

远程连接服务器时尽量使用密钥连接

使用SSH密钥对登录认证更为安全可靠,密钥对安全强度远高于常规用户口令,可以杜绝暴力破解威胁。

密码应尽量设置的复杂一些

密码设计的复杂,可以增加攻击者的破解难度,一定程度上提高了系统的安全性。

直接上高防服务器

哈哈哈这个解决方案的成本太大了

个人的一些思考

经过了这两次被攻击的经历,我算是体会到了安全性这个词的含金量,试想如果这个是已经上线了的项目,结果因为被攻击导致用户数据丢失,那损失将是巨大的。当然也使得我对开发多了一些思考,像之前一直忽视的权限问题、用户问题以及如何在数据库被攻击后如何快速恢复将损失降到最小等等。有时候出现问题并不全是坏事,在解决问题的过程中你进行的调研和思考,会使你的技术底蕴得以更快的成长,也是将之前学过的碎片化的知识串联起来的过程。最后希望大家可以根据我的经历进行排雷,也十分开心如果这篇文章能帮助到大家。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值