逆天!干了 3 年的同事用 base64 编码做 token 并且把密码也放了进去

71 天前
 xhatt510

最近做项目,他搞了用户登陆和状态保持。

当时存的时候他跑过来问我密码要不要用 base64 加密存。
我说这和明文没啥区别把,区别就是比明文多浪费1/3空间。不如直接加盐然后存 md5 。

当我看到 token 的时候,我人直接傻了。

这就是 token YWRtaW58cGFzczEyMzQ1NnwxNzEzNzcxNzg4

我相信只要干过开发的人一眼就能认出来这是什么东西。 我本来以为这已经够逆天了。解码出来的内容才真的让人窒息。

admin|pass123456|1713771788

数据库的 user 表里面的用户名和密码也都是base64 编码存储的。

我本以为这种最基本的常识问题,只可能在一个实习生身上发生,但是这个同事至少在这里干了 3 年了

在他的知识库里 base64 编码=加密

然后只有这种格式的才叫json。(用一对花括号包裹{}

{
    "test": 1
}

这种不叫json,更别说其他的值类型的被叫json

[
    "abc",
    "def"
]
22027 次点击
所在节点    程序员
205 条回复
Jasckcc
71 天前
正常的登录逻辑:校验 token -> 检验缓存是否存在用户 -> token 续期 or 省略 -> 拦截器放行 -> 查询用户是否存在 -> RSA 解密前端密码 -> 得到初始密码 -> 哈希再次加密密码(可考虑加盐) -> 匹配数据库密码 -> 缓存用户 -> 返回 token 以及用户信息。
pyKane
71 天前
如果所有的通信过程都是在 HTTPS 的情况下完成,也不是不可以。HTTPS 本身就把所有的全加密了。这就是为什么现在很多支付网关,只需要一个 KEY 放在 HEADER 上就可以了。比如 Stripe .
只是如果那个密码是用来登录用的还明文存在了数据库,确实是不好。
InkStone
71 天前
@yuzo555 其它需要加密的信息可以 https 直接传。密码不一样,在任何情况下不能传出客户端。
FrankAdler
71 天前
@oott123 传输层面和存储层面不能划等号的。
superedlimited
71 天前
这个时间戳一看就是很大可能拍黄片的开发搞出来的
Seria
71 天前
密码 MD5 加盐存。
但是 Token 的话一般 RSA 或者 AES 加密。
Jasckcc
71 天前
@Seria MD5 已经过时了,不推荐使用
lambdaq
71 天前
@xhatt510 哦哈哈。。。。
xhatt510
71 天前
@jsq2627 新项目,从新建 git 仓库开始的。一开始就拉了坨大的
ovtfkw
71 天前
前端加密不是伪命题吗,数据库存的加密就行了
Grand
71 天前
不怕你同事也逛 v 站嘛
way2create
71 天前
@superedlimited 上边说了半天 java 你是一点不看啊
KingZZZZ
71 天前
最危险的地方就是最安全的地方
xhatt510
71 天前
@Grand 希望他来看一下
jqtmviyu
71 天前
wc, json 只见过传键值对的, 原来还有有序列表.
是我见识太少了么, 还是说用的人不多.
bthulu
71 天前
@xhatt510 你这么牛逼, 不也还是跟他平级. 事实就是别想太多, 早点糊弄完下班.
Hopetree
71 天前
相当于没有一点常识的人,但是这种人我见过不少,真的,很多系统做单点登录的时候,为了方便,就直接给对接系统传一个用户名过去,表示登录成功,也就是说你只需要手动传一下这个用户名,你也可以登录成功,等于不需要认证
ZnductR0MjHvjRQ3
71 天前
很离谱 经验太少且不愿意思考
xhatt510
71 天前
@bthulu 哈哈哈哈,大哥说的对!
lstz
71 天前
也许是各大网站的 base64 列于加密解密项让人误导了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1034660

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX