我做的一个开源项目其中存储了服务器的 IP 账号密码等信息,有用户反馈说这些信息明文存储在数据库不安全,希望进行加密存储,但是在进行查看等操作的时候还是需要进行解密的,密钥也需要写在配置文件里,加密操作是不是多此一举呢?
1
mjVtb96d2bap2u3Z 2021-04-09 15:26:54 +08:00
密码至少 MD5 吧,不然被脱裤子,岂不是直接看到私密处了?不排除记录的是用户常用密码。
|
2
knightdf 2021-04-09 15:28:43 +08:00
不存明文密码
|
3
FreeEx OP @ali727 MD5 不是加密,这里指的加密是可逆的加密算法,类似 AES 。能脱裤极有可能是读取到配置文件了,也能获取到密钥解密数据了。
|
4
cnxobo 2021-04-09 15:38:55 +08:00
密码肯定是要存密文的,永远不会知道数据是以什么形势泄露出来的。
拖库、数据库权限、报表系统、数据库备份。。。 |
5
chuckzhou 2021-04-09 15:43:20 +08:00
是的,不要在 DB 里面存明文密码,万一被脱裤了就悲剧了。你把加解密密码的密码写在一个配置文件里面,用户可以自己设置这个密码。比如 php 的网站一般写在 config.php 里面。
|
6
chinvo 2021-04-09 15:46:05 +08:00 via iPhone
因为脱裤和任意文件查看通常不是同一个漏洞.
|
7
crazyxtcn 2021-04-09 15:46:59 +08:00
我们以前用户收货地址手机号之类的信息都要加密存储
|
9
yeqizhang 2021-04-09 15:53:58 +08:00
你这种确实不像是存用户 md5 那种只做研制功能的特殊需求。 加密存一下相当于提高一下直接看到明文密码一点点难度吧,只是拉到数据库没黑进服务器的话,还是有一点作用的。
|
11
ch2 2021-04-09 15:59:02 +08:00 via iPhone
单独获得你密钥或者数据库的难度,要小于同时把两个都搞到,别一开始就假设所有入侵都是别人用非常高明的漏洞拿走所有的东西,有可能他只拿得到其中的一部分
|
16
zpfhbyx 2021-04-09 16:04:56 +08:00
固定密码+随机因子啊。比如 密码 abcabc 随机因子 user_id 千人千面
|
19
3dwelcome 2021-04-09 16:07:44 +08:00 via Android
加密一下好。
你看 chrome 网站保存的密码可以随时查看,但也是加密后保存到磁盘的。而且版本升级中间变过算法,可见 google 对密码安全还是比较重视的。 否则数据库被脱裤,黑客一看账户密码全是明文,都要笑的合不拢嘴。 |
21
konakona 2021-04-09 16:10:00 +08:00
密码肯定要加密啊
电商强烈建议可逆的序列化存储用户姓名、手机、地址这些敏感数据的密文,就简单的 hash 都好,被脱裤子了人家只会觉得你这家公司业界良心很厚道。 |
22
learningman 2021-04-09 16:10:24 +08:00
@3dwelcome #19 可是隔壁 edge 导入的时候没看 chrome 意见啊。。。
|
25
FreeEx OP @3dwelcome 我了解的 AES 加密只有 IV 偏移量,加盐在 MD5 里面用的比较多,请问你说的是哪种加密算法?
|
27
3dwelcome 2021-04-09 16:43:33 +08:00
@FreeEx AES 也算加盐,因为 IV 设计的目的,就是加入随机数。
看你描述,和 chrome 一样要完全还原明文密码的,那只能用 AES 了。 |
29
timethinker 2021-04-09 17:01:11 +08:00
分两部分看:
密码一般不可逆,我们也没有必要逆向出密码的明文,因此属于哈希类的,只需要通过相同的哈希算法得出一致的结果就行,不关心它的明文到底是什么。 但是手机号等这类信息是需要可逆的,也就是加密之后还得解密,落地存储到数据库的时候到底要不要对此类信息进行加密,我记得三级等保是需要的,但是加密的一个后果就是无法支持区间条件查询,比如一个需求是查询所有以 188 开头手机号的所有记录,加密以后就无法进行范围匹配查询了,当然了,也可以有其他的辅助性的索引支撑,但是复杂性也会随之提高。 我又要唠叨一下了,没有绝对的安全,只能尽量保证在泄露数据之后,使泄露出去的那一部分无法单独得出有意义的结果,比如只是数据库被脱库了,但是没有应用代码的逻辑,即使拿到那一部分数据也是没有意义的。当然了,如果你的应用代码和数据库全被扒了,那么再好的加密措施也会变得没有意义,就看对方是否愿意花时间在这上面研究了。 |
30
FreeEx OP @zpfhbyx 这样相当于把密钥写进数据库了,因为程序本身是开源的,加密算法也就相当于公开了,因此数据和不加密没有区别。
|
31
FreeEx OP @qwe520liao 感谢回复,因为程序是开源的,所以加密算法也是公开的,此种情况下只能把密钥写到配置文件里面了,尽量保证数据安全吧。
|
33
FreeEx OP |
34
magicdawn 2021-04-10 10:50:49 +08:00
之前做过手机号, 姓名之类的需要对称加密
有个包比较实用,https://github.com/magicdawn/node-mysql-aes |