这太震惊了...(图片来自极客时间 安全攻防技能 30 讲)
难道每次执行什么 get,set 操作,都会检测一遍密码吗? 我理解不能像 mysql 一样,有个连接池,初始化一些长连接,之后就不用再认证/鉴权什么的了
1
GeekGao 232 天前
支持 TLS 啊,为啥一定要用密码
|
2
Yadomin 232 天前 5
|
3
qsnow6 232 天前
校验个密码能有多大的损失,扯蛋呢
|
4
mohumohu 232 天前
那不如直接用 unix domain socket
|
5
lsk569937453 232 天前
redis 是基于 TCP 协议的啊,握手(验证密码)之后就一直保持长连接,后续都是处理指令了啊。
|
6
zed1018 232 天前
首先后来版本的 redis 默认是没密码没错,但是也默认有保护模式,无密码账户只能在本机登录。
所以这文章纯属扯淡。 |
7
LeeReamond 232 天前
@qsnow6 如果协议里每条请求都带验证头的话确实会降性能,就像 http 上如果带鉴权插件就是会降一样,不过照我的记忆 RESP 是通过 auth 命令单次校验的。
|
8
yalin 232 天前
毕竟生成的内容
|
9
kneo 232 天前 via Android
没测试过,不好说。redis 操作比起普通的业务操作来说可以认为是超级快,理论上有可能因为增加一个验证环节就导致极端性能测试的吞吐量下降的。
|
10
k9982874 232 天前 via Android
啊?根据 redis-cli 的行为来看,感觉有点扯淡。redis-cli 也只是首次登陆时验证,建立连接后执行命令不需要再次验证,要是说 redis-cli 记录了用户密码每次附在请求中一起提交我是不信的。
想验证是否是真的像文中所说只要查一下各编程语言中的 redis client 实现即可。 |
11
ixiaohei 232 天前
使用 redis 密码建议使用长连接;保持 session 。短连接每次新建连接都都需要 auth
|
15
devliu1 232 天前
长连接就好了,只需要第一次发送 AUTH 命令
|
16
hefish 232 天前
很多贩卖安全的人,本身是不懂具体事务的,基本上只是照搬条例而已。
|
17
fkdtz 232 天前
无论从实际使用经验,还是 Redis 的设计原则、还是 client server 通信原理来看,好像都不大可能啊。
他没说具体什么原因导致的吗? 极客时间上的课不都是付费的么,应该很严谨才对,评论中没有提出疑问的么。 |
18
Kinnice 232 天前 via Android 4
他该不是每次操作的时候都先 auth 一下吧
|
19
ETiV 232 天前 via iPhone
用 PHP 测得的数据?以 req/s 为单位
|
20
pluto1 232 天前 via iPhone
去看看 RESP 协议就知道了,非常简单的,就是一来一回,没有额外的东西的,密码验证只需要 tcp 连接建立后 auth 一下,后面跟没有密码是一样的
|
21
Zzdex 232 天前
有点扯
|
22
tomczhen 232 天前
IT 民科
|
23
WonderCc 231 天前
这不扯淡吗
|
24
flyqie 231 天前 via Android
每次链接都 auth 一下这玩法太智障了,redis 这么用了怕不是被人笑话一辈子。。
极客时间的课水到这种程度了吗? |
27
shakeyo 231 天前
他这是每次执行命令都用新连接?
|
28
whoosy 231 天前
用脚趾头想想都不可能
|
29
crystom 231 天前 1
php 传统 fpm 模式是这样的,不过一般也用在性能敏感的场景像后台管理,没问题的
|
30
me1onsoda 231 天前
要连接池这个,jedis 不就是吗
|
31
cheng6563 231 天前
没搞连接池吧,每次发指令都重新验密码
|
32
8355 231 天前
我没看源码。。。但是我觉得如果 redis 是这样设计的 那连接的意义在哪里? 这不符合常规认知。。。。。
|
33
vczyh 231 天前
别的不清楚,我写过 RESP 协议,客户端认证的时候只需要发送 AUTH command ,这个之后不会每次发送认证信息,只需要发送执行的 command 就可以,所以理论上不会影响性能。
|
34
vczyh 231 天前
|
35
InDom 231 天前
作为一个经常使用 telnet 当 redis-cli 的人表示,起码 auth 只会在创建链接的时候发一次密钥后续是不需要发的。
至于每次请求服务端会检查,我觉得一个稍微成熟的开发都不会出现这个问题。 至于测试环境,是不是每次都 new Redis 了? 如果是,那结果就算是 50% 我也理解。 |
36
tingyunsay 231 天前
csdn 即视感
|
37
wetalk 231 天前
极客时间很多作者纸上谈兵,根本没有实操经验,信他们不如信坛子里的老哥
|
38
Dream95 231 天前
这样的也能卖课
|
39
error0 231 天前
在 server.c 的 processCommand() 方法执行命令之前 会执行 authRequired() , 判断 client 的 authenticated 是否为 1 (如果开启认证)。执行 authCommand 的时候如果账号密码正确就标识为 1 。
processCommand: https://github.com/redis/redis/blob/8a05f0092b0e291498b8fdb8dd93355467ceab25/src/server.c#L3948 authCommand: https://github.com/redis/redis/blob/8a05f0092b0e291498b8fdb8dd93355467ceab25/src/acl.c#L1490 |
40
nothingistrue 231 天前
这大概是「几十年」前的销售推广,因为很早就把技术人员开了只剩商务人员,就一直这么往外面忽悠人。代码安全审查领域,你只要见得多了,就总会碰到这样的坑爹玩意,客户资质越高,越容易碰到。
|
41
julyclyde 231 天前
如果前边有代理服务器,而代理服务器和 redis 本身维持了长连接,那么,
单次验密之后信任整个连接后续指令,是不是会导致其它未验证身份的客户端发给代理服务器的命令也被执行呢? |
43
googol2chen 231 天前
redis 的第三方库应该都有提供长连接方式
|