欢迎投稿

今日深度:

高性能Redis数据库安全手册(1)(2)

数据加密支持

Redis不支持加密。为了受信的客户端可以以加密形式通过互联网可以采用加密协议(SSL)传输数据。

禁用特定的命令

禁用Redis的一些命令是可行的,或者将他们改名。这样来自客户端的请求就只能执行有限的命令。

例如,虚拟的服务器提供商可能提供托管的Redis服务。在这种情况下,普通用户不应该能够调用Redis的配置命令来修改该配置实例,但提供和删除服务的系统能够有这样的权限。

在这种情况下,从命令表中重命名命令或者完全隐藏命令是可能的。这个功能可用在Redis.conf配置文件里做为一个声明。例如:

rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52

在上面的例子里,CONFIG命令被更名为一个更为陌生的名字。它也完全可以被重命名成空字符串,例如:

rename-command CONFIG ""

由精密的输入触发的攻击

还有一类攻击,攻击者即使没有获得数据库的访问权限也可以从外部发起攻击。一个此类攻击的例子是通过Redis的内部函数向Redis里插入数据。

攻击者可以通过一个web表单将一组字符串提交到一个hash的同一个堆栈,引起时间复杂度从O(1)到O(n) ,消耗更多的CPU资源,最终导致DOS攻击。为了防止这种特定的攻击方式,Redis为每个执行请求随机分配hash。

Redis使用快速排序算法来执行SORT命令。目前,这个算法不是随机的,所以通过对输入的精细控制可能触发命令的二次执行。

字符串转义和NOSQL注入

Redis协议里面没有字符串转义相关的内容,所以在通常情况下是不存在注入的。Redis协议使用的是前缀长度的字符串,完全二进制,保证安全性。LUA脚本执行EVAL和EVALSHA命令时遵循相同的规则,因此这些命令也是安全的。

然而这回事一个非常奇怪的用例,应用程序应该避免使用LUA脚本获取来自非信任源的字符串。




www.htsjk.Com true http://www.htsjk.com/shujukuaq/16964.html NewsArticle 数据加密支持 Redis不支持加密。为了受信的客户端可以以加密形式通过互联网可以采用加密协议(SSL)传输数据。 禁用特定的命令 禁用Redis的一些命令是可行...
评论暂时关闭