通过“分布式系统的8大谬误”反思APP的设计 第四篇 谬误4:网络是安全的

谬误4:网络是安全的;
只要与网络服务相关,开发人员都要从开发设计以及业务需求方面考虑网络的安全性,iOS也不例外。所有最基本的攻击类型,网络服务都需要考虑:session劫持,盗取证书,代码注入等等。网络安全是个负责学科,现在先让我们考虑一些和iOS APP相关的内容。
我们只能像相信用户一样,相信用户的设备(译者:这里的意思是用户就是小白,他们不懂得如何保护自己的信息。)。任何一个安装应用的人都可以深入了解到应用的内容(译者:像图片资源,私钥,任何保存在手机上的文件),也可以轻而易举获取手机发送的网络信息。千万不要在你的手机上保存隐私信息(网络访问凭证,认证证书,加密用密钥,等等),而且也不能让在用户面前公布这些信息。
UDID(译者:设备的唯一标示,苹果上称作为UDID;iOS5后这个API被禁止使用了,有人就开发了生成伪UDID的方法,也有人直接使用MAC地址作为设备的唯一序列号。)实际上是一个非常不牢靠的用户认证机制。UDID的确是个非常方便获取唯一标示的方法,无需用户创建账户并登录。我曾经在一款APP的开发中使用UDID来临时标示用户,但这不是个长久的方案。 UDID是用户端提供的,是可以被串改的。比方,黑客可以有意伪装成另一个用户;也有可能是无意的,比方用户升级了他们的设备的操作系统或者换了台新的设备。总而言之,一个UDID只是识别了设备,识别不了用户。
移动设备经常会进入到公共网络服务中,而这些公共网络接入点很可能埋伏了不怀好意的黑客。你的APP发送的任何网络数据都可能被同个网络中的人截取。如果你觉得数据非常敏感,必须从加密的链接上发送,苹果提供了 Advanced URLConnection 样例,延时了如何在建立网络是如何使用基本的http授权,认证(包含了自己发布的证书,如何你想在自己的网络上发送)。一个最简单的例子,NSURLConnectionk完全可以支持https请求,你所要做的尽尽是实现2个代理函数。
原文中提供了一端建立https请求的代码,可以直接去看;
原文地址:http://blog.carbonfive.com/2010/11/29/iphone-distributed-computing-fallacy-4-the-network-is-secure/
译者的一些经验:
1, 不要将敏感信息保存在手机上,android手机的所有文件目录都是公开,任何拿到这个手机的都可以从手机上读取文件信息,所以不要将密码不经过加密就保存在文件中。iOS看似安全,实际上越狱后的iPhone的所有目录也是可读的。
2, 密码不能以明码保存;前两年许多网站的数据库数据泄露,暴露出密码都是明码保存在数据库中,就连CSDN也是如此。记住,密码必须是MD5后再保存于数据库中。
3, 之前有新人非常想不通,为什么网络数据会被人截取;后来,我演示通过wireshark抓包,解包内容。即使是HTTPS也不是牢不可破,Fiddler就可以解密https的数据,当然需要在手机上安装文件。这个的可怕之处在于,黑客可以通过解密https的数据获取你的接口服务的内容,抓住规律。
4, 并非只有我们的应用才会调用服务接口,本质上来说,我们的接口压根就是暴露在公众面前,所有人都可以来调用;
5, 关于支付宝交易请求的加密,在服务器端进行数据签名;这样的好处是,不需要在客户端保存签名密钥。

你可能感兴趣的:(网络,APP,设计,分布式系统,设备)