密码是由系统管理员在Redis。CONFIG文件中设置的明文密码,为了防止暴力破解攻击他应该足够长。原因有两个:
Redis的执行效率非常快,外部设备每秒可以测试相当数量的密码 Redis的密码是存储在Redis.conf文件和内部客户端的配置中的,因此不需要管理员记住。所以可以使用相当长的密码。
身份验证的目标是提供第二层的安全保障。这样当防火墙或者其他第一层的系统安全设置失效的话,一个外部设备在没有密码的情况下仍然不能访问redia。
AUTH命令像其他的redia命令一样是不加密传输的,所以他不能阻止攻击者在内网的窃听。
数据加密支持
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。
小编推荐阅读