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

69 天前
 xhatt510

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

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

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

这就是 token YWRtaW58cGFzczEyMzQ1NnwxNzEzNzcxNzg4

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

admin|pass123456|1713771788

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

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

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

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

{
    "test": 1
}

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

[
    "abc",
    "def"
]
21970 次点击
所在节点    程序员
205 条回复
flytsuki
69 天前
@gamexg +1
realJamespond
69 天前
https 没啥问题吧
fkname
69 天前
可能接触的少,大部分认证这种逻辑都是统一封装处理了;不改也能理解,给领导说我们系统有漏洞要修,因为我导致的,很少有人会这么干
woodfizky
69 天前
其实用 HTTPS ,登录获取 token 明文传都算能接受的。

但是这种又菜又喜欢私造协议的其实很烦,明明可以用键值对穿用户密码时间戳,非要用|分割拼在一起。

而且看 OP 描述我怎么感觉这是把 '用户名|密码|时间戳' base64 编码了再作为 token ,每次请求都用这个呢。。。
这压根没有服务端状态验证吧,那我把时间戳改成未来时间,这个登录态就一直不会掉了。。

而且我还能用这个 token 机制暴力穷举出你库里的各种用户名密码。
NoKic
69 天前
@gamexg 直接废废了呗 分不清用户名密码在哪截断了直接
forvvvv123
69 天前
@lsk569937453 哈哈哈哈哈哈哈哈
456vv
69 天前
正常,难道你登录时不是使用用户密码?又难道你的 token 又有 IP 限制或一次性的?偷用你的用户密码和 token 区别在那里?
xxkmogu
69 天前
咱刚入行的时候面对一个必须要传递密码原文到后端的场景,就已经对密码进行非对称加密了,即便是在 https 的情况下。(骄傲
yulgang
69 天前
又不是不能用
xwwsxp
69 天前
这算个啥,和我对接的那个 Andriod ,那才是崩溃,调用阿里的两个接口,我都封装好了,文档都写好了,JSON 交互,还给我传其他格式,接口测试环境,我都是通过 swagger 搭建的;阿里那边返回的数据,让其通过 io 类写到本地,防止 token 中有些特殊字符被控制台解析,这也不会,TMD 的,干什么 Android

==========

更离谱的事,我在给他调试接口,他在和别人聊游戏,就这还 3 年,我 3 年不是这么菜的;菜,还脾气大,和我吵,直接让你滚蛋!!!
xhatt510
69 天前
@MossFox #35 大概率会报错,或者说这个开发会说 java 里面 xxx 一堆借口
xhatt510
69 天前
@woodfizky 就是你猜的那样,'用户名|密码|时间戳' 然后 base64 编码了再作为 token ,每次请求都用这个。并且数据库用户表有个字段叫 token 把这个数据存了一份。
xhatt510
69 天前
@lambdaq 估计是你看错了,我说的是他堆 json 不了解。强制认为只有 {} 的才是 json
msg7086
69 天前
您对同事有什么误解吗。
crab
69 天前
@456vv 数据库被黑。就像当年 csdn 事件。
woodfizky
69 天前
@xhatt510 #52
好好好。。这么玩是吧。
这私造协议 1 暴露密码,2 不防篡改,3 服务端会话维持放关系数据库。。连 JWT 都不用,那没什么好说的了。

哎,无奈我也碰见过这样的同事,已经有画面感了,想到就烦。
jsq2627
69 天前
遇见这样的同事和项目想必已经是屎上雕花。谁写谁背锅,身为外人当作看不见就对了。
moqsien
69 天前
挺好的,就欣赏这样的同事。
qinfengge
69 天前
手写登录注册没必要,还不如用第三方,毕竟不一定有别人考虑的全面。
holdmeo
69 天前
@xhatt510 这种是放在请求头里,实际上也不行吧,太直观了,接口给别人调用,相当于直接给了别人一个账号

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

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

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

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

© 2021 V2EX