Redis 可以禁用的高危命令
高危命令禁用
redis一款高并發(fā)的內存K-V數據庫,提供了好多命令,但是其中有部分對于生產(chǎn)環(huán)境來(lái)說(shuō)比較危險,需要禁用掉。
keys 命令
keys 命令執行的時(shí)候是需要進(jìn)行全庫掃描的,因為redis執行的主線(xiàn)程是串行的,所以會(huì )導致其他命令也執行慢,從而拖垮整個(gè)redis實(shí)例。
flushdb、flushall 命令
flushdb、flushall是清空redis數據庫里面數據的命令,禁用原因:
- 清空數據之后,開(kāi)啟RDB持久化一般無(wú)法恢復了,需要開(kāi)啟AOF持久化才有可能恢復數據。
- 清空數據的操作本身耗時(shí)比較長(cháng),當數據量大的時(shí)候容易擴跨整個(gè)redis實(shí)例。
config 命令
config命令可以直接修改redis加載到內存里面的配置信息,個(gè)人覺(jué)得主要是一些關(guān)鍵配置,比如:dir、dbfilename。這兩個(gè)參數結合起來(lái)可以利用redis進(jìn)行攻擊,具體可以參考:https://www.freebuf.com/articles/328286.html 中webshell部分。
debug 命令
DEBUG 命令是一個(gè)內部命令。 它旨在用于開(kāi)發(fā)和測試 Redis,比如下面命令,可以直接讓redis停止工作10
s
debug sleep 10
eval 命令
eval 命令用于執行lua腳本,建議禁止的原因是lua腳本里面信息redis沒(méi)辦法控制,比如,在lua腳本里面構造大量循環(huán),會(huì )導致redis主進(jìn)程僵死。
script、evalsha命令
script、evalsha結合起來(lái)也可以執行lua腳本,原因同eval 命令
shutdown 命令
shutdown可以直接停止redis服務(wù)。屬于危險命令的范疇。
高危命令禁用方法
在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 ""
而如果想要保留命令,但是不能輕易使用,可以重命名命令來(lái)設定。
例如:
rename-command FLUSHALL joYAPNXRPmcarcR4ZDgC81TbdkSmLAzRPmcarcR
rename-command FLUSHDB qf69aZbLAX3cf3ednHM3SOlbpH71yEXLAX3cf3e
rename-command CONFIG FRaqbC8wSA1XvpFVjCRGryWtIIZS2TRvpFVjCRG
rename-command KEYS eIiGXix4A2DreBBsQwY6YHkidcDjoYA2DreBBsQ
這就試試去???
對的,分布式鎖就要用
有時(shí)就是需要eval來(lái)執行命令??