2

我正在使用 Spring Jedis Client 在我的应用程序中使用 Redis。我想重命名这些命令,这样其他人就不能触发相同的命令,以防万一他们能够连接到我的服务器。

谁能举例说明如何使用 Jedis 中的重命名命令,然后如何使用修改后的命令触发后续命令?

4

2 回答 2

1

您还不能重命名 Redis 命令而不更改配置文件问题 #640

即使您添加rename-command配置文件指令并重新启动 Redis,Jedis 似乎也不允许轻松发送任意命令或提供简单(即无需更改代码)方式来重命名它们。

但是,如果您真的坚持重命名命令然后从 Jedis 调用它,您可以做的是 EVAL it。这可能会进入我的丑陋黑客万神殿(:)),但在添加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>

当然,如果你走这条路,你的代码很快就会变得非常混乱,所以要小心你踩到的地方……祝你好运!

于 2014-02-04T17:41:03.420 回答
0

如果恶意用户直接连接到 Redis,则可以访问所有操作码。

Redis 库中没有重命名命令的功能。即使您公开了对重命名命令的自定义 API 的访问权限,您也无法更改 Redis 本身的内部操作码。

编辑:

没错,确实可以通过更改配置文件来重命名命令!

设置新的命令名称后,您必须重新编译 Jedis。

src/main/java/redis/clients/jedis/Protocol.java首先在第 203 行重命名枚举。

现在找到相应的枚举用法src/main/java/redis/clients/jedis/BinaryClient.java并更改它。

这可能就足够了:在任何地方你仍然保留旧的命令 java 接口(例如 zadd 等),并且在 Jedis 内部它会调用重命名的命令与 Redis 对话。

那是你的意图吗?

于 2014-02-04T00:24:07.513 回答