用户很关心野狗云服务的安全问题。野狗的CEO刘之和创始团队中的大部分人都曾经在360工作,可见这是一个具有安全基因的团队,既具有安全意识,也具有安全技术。
安全是一个很宽泛的话题,不同层面有不同的安全问题,比如数据通道的安全,应用层的安全,web端的安全等。常见的对于安全问题的疑惑,可以总结为以下几个:
* 数据通道的安全
数据通道安全的目标是,在原本不安全的网络上,构建一个可信的数据传输通道。这一层考虑的安全问题集中在:如何保证数据不被泄漏和篡改,如何确认通信对端的身份。这是一个业内通用的问题,也早已经有了一个标准答案:这一层的安全主要是依靠TLS来保障的。野狗是全站使用TLS的,不论是官网,还是Rest API接口,或者是基于websocket的长连接,都不支持非安全的通信协议,而是全面采用HTTPS和 WSS。数据在传输过程中是经过加密的,证书的校验也确保了野狗云端身份的认证。关于TLS的知识,在这里就不展开了。需要指出的一点是,TLS绝不是“配置一下就完事”这么简单的。因为TLS的发展也经历了许多年,许多个版本的变迁,随意的配置很可能遗留有严重的安全隐患。即使是正确的配置,也有可能会爆出实现软件上的安全漏洞,比如著名的openssl心脏出血漏洞。安全是一个持续的过程,需要技术团队不断的跟进。野狗的TLS服务在著名的安全评测网站ssllabs的评分为A+。野狗团队中的安全专家不定期会将一些TLS方面的安全研究发布到这里: WILDSSL 。
应用数据的安全
有些用户担心应用数据的安全,比如存储在野狗云端的数据,只要调用SDK中的方法就可以读写了,那么如何防止他人恶意的篡改数据呢。严格意义上说,这不是一个安全的问题,而是一个应用层数据访问控制的问题。对数据读写访问权限的控制,野狗是通过Token和规则表达式来保障的。野狗的Token遵循标准的JWT格式,并使用应用的超级密钥进行HMAC-SHA256签名。规则表达式是一个符合javascript语法的表达式,可以结合Token中标识的用户身份,对数据进行细粒度的权限控制,也可以实现基于用户的数据读写权限控制。需要注意的一点是,超级密钥是用来对Token进行签名以防止伪造的,因此当需要将已有的终端用户账户系统和野狗集成时,必须确保超级密钥只用于服务器端生成野狗Token,而不能将超级密钥泄漏到客户端中。超级密钥的泄漏可能导致攻击者可以任意伪造应用中的登陆用户身份。 其他方面
除了这些之外,野狗还在许多方面为用户进行了安全方面的考量。野狗提供的“安全域名”白名单功能,用户启用之后,只有来自指定白名单中域名下的请求才会被野狗云端接受。这样可以有效避免数据被他人的应用中盗用,也可以防范csrf攻击。野狗在OAuth的跳转流程中也设置了白名单,确保只有经过授权的域名才可以通过OAuth流程获取终端用户信息。
安全是一个整体的体系,不是单靠某一层就可以保证的。虽然野狗已经考虑了安全的方方面面,用户基于野狗开发应用,仍然需要注意应用层面的安全。比如web端的安全,常见的XSS攻击等,这些是无法依靠野狗解决的。关于这些web安全方面的讨论,可以参考野狗联合创始人肖光宇的文章《 关于 Web 安全,99% 的网站都忽略了这些》 。