面向互联网用户的APP,安全问题是绕不开的,是开发者必须要考虑的重要问题。
然而实际开发过程中,很多开发者仅仅只是实现了功能,安全问题几乎没有认真考虑过。
这篇文章谈谈本人在工作过程中关于安全问题积累的一些经验。这里说的APP安全主要是针对和服务端有数据库交互的应用,数据存放在本地甚至没有数据交互的应用,暂且不表。
个人理解的APP安全核心由两个问题组成:1、如何确保用户的数据请求是合法的?2、如何确保数据交互过程是安全的?
第一个问题的解决思路是鉴权。每一次请求(这里特指http/https请求),都需要在请求参数或请求头里加入两个值:用户唯一id和请求凭证,这两个值必须是一一对应的,可在用户登录成功后由服务端生成返回给客户端并存储在本地。服务端处理的每一个请求,会把这两个值取出来进行比对校验,校验通过则认为请求合法,即可做正常的业务处理。否则直接返回错误信息。服务端存储用户id和请求凭证时,可加入有效期,进一步提高安全性。
有一点需要注意,用户登录或注册时,此时客户端本地并没有请求凭证,服务端如何做校验?答案是短信验证码。可以看下现在主流APP,登录或注册几乎都是使用验证码进行校验,在手机未丢失的情况下,这可能是最安全的校验方法了(你要是把验证码告诉别人当我没说),有些应用甚至在付款等关键操作也加入短信验证码,以提高安全性。
第二个问题的解决思路是加密。HTTP请求是不安全的,数据交互过程是明文传输,有可能被截获或被篡改。使用HTTPS可以避免该问题。HTTPS原理简单提一下:1.使用对称算法进行数据传输过程中的加解密,常用的有DES、AES算法;2.使用非对称加密算法进行密码(对称算法的公钥)的加解密,常用的有非对称算法RSA、Elgamal算法。3.使用Hash算法校验密码的完整性,常用的有MD5,SHA1,SHA256算法。如果不能提供HTTPS服务,则需要根据实际情况自己实现数据传输过程的加解密。如果是关键数据,建议使用RSA等非对称加密,但性能较差,我之前负责的一个APP就曾经因为所有请求都是用RSA加密而导致后台服务宕机。如果是非核心数据,可以使用对称加密算法。
网友评论