iOS 网络安全简单理解
目前,大部分的移动应用都是需要联网,与服务器进行通信,获取最新的数据。一提到网络,肯定就有大量和安全性相关的问题出来。所以,对于我们开发者而言,如何打造一个安全的App,是必须面对的问题。前段时间我专门对iOS移动应用安全性方面进行了研究,下面我们分析iOS应用中可能会存在的安全风险以及相对应的处理方式。
1、网络安全
在网络请求中,我们经常使用两种请求方式:GET和POST。如果是用GET发送请求,当我们采用明文的方式给服务器发送数据,数据里面还包含一些敏感数据如账号密码,这些数据都是包装在URL中,并且服务器的访问日志会记录,所以黑客一旦攻破服务器,可以轻易获得所有用户的账号密码。POST相对于GET来说,要相对安全一些,我们发给服务器的数据是包装在请求体中,不会直接暴露在url中。但是其实POST也是不安全的,在MAC电脑上可以利用Charles软件(如果在Windows下,可以使用Fiddler软件)来将自己的电脑设置成代理服务器,从而截取应用的网络请求,所以GET和POST都是不安全的。这时,为了防止账号密码泄漏,我们要对其进行加密。加密的方式有很多种,最简单的就是base64加密,但是base64 过于简单,很容易破解,不推荐使用。第二种就是md5加密,其核心思想是从给定的数据中提取特征码,不容产生重复,安全性比较高,在计算机安全领域使用的比较广泛,但是现在也有专门的网站对md5进行破解,为了使MD5加密更安全,我们会进行加盐,HMac,加时间戳等,提高安全级别和破解难度。第三种就是对称加密和非对称加密。非对称加密:事先生成一对用于加密的公私钥,客户端在登录时,使用公钥将用户的密码加密后,将密文传输到服务器。服务器使用私钥将密码解密。这样的做法,保证黑客即使截获了加密后的密文,由于没有私钥,也无法还原出原始的密码。
2、协议问题
iOS9.0 之前,做网络请求时时用http协议,但是http协议是不安全协议,很容易被攻破,在成功破解了通信协议后,黑客可以模拟客户端登录,进而伪造一些用户行为,可能对用户数据造成危害。像我们平常听到的游戏代练,刷分,其实是游戏的通信协议被破解,黑客制作出了代练的机器人程序。在iOS9.0后,苹果推荐采用https协议进行网络数据传输。当然,如果自己手上有更好更安全的协议,可以用自己的。
3、本地文件安全
iOS应用的数据在本地通常保存在本地文件或本地数据库中。如果对本地的数据不进行加密处理,很可能被黑客篡改,所以我们要对重要的数据进行加密,根据重要程度选择安全性可靠的方式。
4、源代码安全
应用程序上架需要编译成二进制文件,这些二进制文件也是存在安全隐患。黑客可以通知反编译工具,对这个文件进行反编译。对于Objective-C代码,它常常可以反汇编到可以方便阅读的程度,这对于程序的安全性,也是一个很大的危害。因为通过阅读源码,黑客可以更加方便地分析出应用的通信协议和数据加密方式。一般我们应对的方式给我们的代码加一些东西,混淆源代码的内容,比如定义一些乱其八糟的宏,比如打乱代码的顺序等。这样,就算文件被反编译成功,也需要花大量的时间去破解。