Пример команды переименования с клиентом Jedis

Я использую Spring Jedis Client, чтобы использовать Redis в своем приложении. Я хочу переименовать команды, чтобы никто другой не мог запустить их на тот случай, если они смогут подключиться к моему серверу.

Кто-нибудь может привести пример того, как использовать команду переименования из Jedis, а затем, как запустить последующие команды, используя измененную?

2 ответа

Вы не можете переименовать команду Redis, пока не измените проблему с файлом конфигурации # 640.

Даже если вы добавите rename-command Директива файла конфигурации и перезапустите ваш Redis, Jedis, похоже, не позволяет легко посылать произвольные команды или обеспечивает тривиальный (т.е. без изменения кода) способ их переименования.

Однако то, что вы можете сделать, если вы действительно настаиваете на переименовании команды и последующем ее вызове из Jedis, это EVAL. Это, вероятно, пойдет в мой пантеон уродливых хаков (:)), но после добавления rename-command get foo к моему /etc/redis/redis.conf и делать service redis-server restart посмотри что я могу сделать:

$ redis-cli 
redis 127.0.0.1:6379> set bar baz
OK
redis 127.0.0.1:6379> get bar
(error) ERR unknown command 'get'
redis 127.0.0.1:6379> foo bar
"baz"
redis 127.0.0.1:6379> eval "return(redis.call('get', KEYS[1]))" 1 bar
(error) ERR Error running script (call to f_db0e060e4f58231d51f21685b20ff847de8ab9e1): Unknown Redis command called from Lua script 
redis 127.0.0.1:6379> eval "return(redis.call('foo', KEYS[1]))" 1 bar
"baz"
redis 127.0.0.1:6379>

Конечно, если вы пойдете этим путем, ваш код может стать довольно запутанным в кратчайшие сроки, поэтому будьте осторожны, когда вы наступаете... Удачи!

Если злонамеренный пользователь подключается напрямую к Redis, то можно получить доступ ко всем кодам операций.

В библиотеке Redis нет функции переименования команд. Даже если вы предоставляете доступ к пользовательскому API, который переименовывает команды, вы не можете изменить внутренние коды операций самого Redis.

Редактировать:

Вы правы, можно переименовать команды, действительно изменив файл конфигурации!

После того, как вы установите новые имена команд, вы должны перекомпилировать Jedis.

Сначала переименуйте enum на src/main/java/redis/clients/jedis/Protocol.javaлиния 203.

Теперь найдите соответствующее использование enum на src/main/java/redis/clients/jedis/BinaryClient.java и изменить это тоже.

Этого может быть достаточно: везде, где вы все еще сохраняете старые командные интерфейсы java (например, zadd и т. Д.), И внутри Jedis он будет общаться с Redis, вызывающим переименованную команду.

Это твое намерение?

Другие вопросы по тегам