在iOS文档的用户专栏里,有这样一段话。
《在注册过程中,服务端会检查注册用户的信息,以确保注册的用户名和电子邮件地址是惟一的。
服务端还会对用户密码进行不可逆的加密处理,不会明文保存任何密码。在客户端,应用切勿再次对密码加密,这会导致重置密码等功能失效。》
我想问的问题是,如果按照文档所说,在网络请求里传送明文的密码,会不会导致请求被截取,发生用户信息泄漏的事故?这个问题LeanCloud是如果应对的?
我们保障网络传输的时候数据是加密传输,不用担心这方面的安全问题。
用户注册时发送过来的用户名和密码,在 LeanCloud 云端会对密码进行加密存储。以后用户登录的时候,传输明文的用户名、密码,LeanCloud 云端认证的时候再次进行转换,来核实用户身份。不管请求的时候传输的是明文还是密文,这个信息都有可能被截获,别人都有可能伪造这个请求来进行登录,这是无法避免的。如果不想明文被人看到,可以在应用层对密码做一个哈希变换,然后把打乱的密码传给 LeanCloud 云端。但是这样别人一样可以截包,然后伪造同样的登录请求。这种情况也不是云服务特有的,你自己搭建一个应用后台,一样也会面临类似的问题。
我们该做的是如何避免伪造请求带来更多破坏:修改别人的数据、拖库等等。LeanCloud 提供了严密的 ACL 访问控制机制,大家可以看一下我们的安全文档,默认情况下用户账户信息是只有登录者自己才能修改的。
传输过程都是基于 https (SSL)的,直接抓包截获是解不开数据的,看不到。(但该类方法对中间人攻击无效。)
如果在应用层加密:那么邮件重置密码功能由于是LeanCloud网页上重设密码,应用开发者没法干预,那么邮件重置密码功能就作废了。
明文密码发送,我们也是做了安全防范的:第一是走 HTTPS 协议,第二是防止了中间人攻击,所以你使用我们最新的 SDK,可以发现很难截获传输中的明文密码。