最近做项目,他搞了用户登陆和状态保持。当时存的时候他跑过来问我密码要不要用 base64 加密存。我说这和明文没啥区别把,区别就是比明文多浪费1/3空间。不如直接加盐然后存 md5 。当我看到 token 的时候,我人直接傻了。
这就是 token YWRtaW58cGFzczEyMzQ1NnwxNzEzNzcxNzg4
我相信只要干过开发的人一眼就能认出来这是什么东西。 我本来以为这已经够逆天了。解码出来的内容才真的让人窒息:
admin|pass123456|1713771788
数据库的 user 表里面的用户名和密码也都是base64 编码存储的。
我本以为这种最基本的常识问题,只可能在一个实习生身上发生,但是这个同事至少在这里干了 3 年了。
在他的知识库里 base64 编码=加密
然后只有这种格式的才叫json。(用一对花括号包裹{})
{
"test": 1
}
这种不叫json,更别说其他的值类型的被叫json
[
"abc",
"def"
]
可能我描述有问题,我的意思是,这个同事只认为花括号的才是 json ,其他的所有都不是。另外更劲爆的,我在的公司居然是一家专做安全的公司。
而且看 OP 描述我怎么感觉这是把 '用户名|密码|时间戳' base64 编码了再作为 token ,每次请求都用这个呢。。。
这压根没有服务端状态验证吧,那我把时间戳改成未来时间,这个登录态就一直不会掉了。。
而且我还能用这个 token 机制暴力穷举出你库里的各种用户名密码。
数据库这样存不行,不能存明文。