Redis 可以禁用的高危命令

本贴最后更新于 548 天前,其中的信息可能已经时移世改

高危命令禁用

redis 一款高并发的内存 K-V 数据库,提供了好多命令,但是其中有部分对于生产环境来说比较危险,需要禁用掉。

keys 命令

keys 命令执行的时候是需要进行全库扫描的,因为 redis 执行的主线程是串行的,所以会导致其他命令也执行慢,从而拖垮整个 redis 实例。

flushdb、flushall 命令

flushdb、flushall 是清空 redis 数据库里面数据的命令,禁用原因:

  • 清空数据之后,开启 RDB 持久化一般无法恢复了,需要开启 AOF 持久化才有可能恢复数据。
  • 清空数据的操作本身耗时比较长,当数据量大的时候容易扩跨整个 redis 实例。

config 命令

config 命令可以直接修改 redis 加载到内存里面的配置信息,个人觉得主要是一些关键配置,比如:dir、dbfilename。这两个参数结合起来可以利用 redis 进行攻击,具体可以参考:https://www.freebuf.com/articles/328286.html 中 webshell 部分。

debug 命令

DEBUG 命令是一个内部命令。 它旨在用于开发和测试 Redis,比如下面命令,可以直接让 redis 停止工作 10
s

debug sleep 10

eval 命令

eval 命令用于执行 lua 脚本,建议禁止的原因是 lua 脚本里面信息 redis 没办法控制,比如,在 lua 脚本里面构造大量循环,会导致 redis 主进程僵死。

script、evalsha 命令

script、evalsha 结合起来也可以执行 lua 脚本,原因同 eval 命令

shutdown 命令

shutdown 可以直接停止 redis 服务。属于危险命令的范畴。

高危命令禁用方法

在 redis.conf 里面加入下面配置

rename-command keys ""
rename-command flushall ""
rename-command flushdb ""
rename-command debug ""
rename-command eval ""
rename-command config ""
rename-command shutdown ""
rename-command script ""
rename-command evalsha ""

而如果想要保留命令,但是不能轻易使用,可以重命名命令来设定。

例如:

rename-command FLUSHALL joYAPNXRPmcarcR4ZDgC81TbdkSmLAzRPmcarcR
rename-command FLUSHDB  qf69aZbLAX3cf3ednHM3SOlbpH71yEXLAX3cf3e
rename-command CONFIG   FRaqbC8wSA1XvpFVjCRGryWtIIZS2TRvpFVjCRG
rename-command KEYS     eIiGXix4A2DreBBsQwY6YHkidcDjoYA2DreBBsQ
  • Redis

    Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。从 2010 年 3 月 15 日起,Redis 的开发工作由 VMware 主持。从 2013 年 5 月开始,Redis 的开发由 Pivotal 赞助。

    284 引用 • 247 回帖 • 148 关注
1 操作
zeekling 在 2023-01-01 18:36:38 更新了该帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...