iOS 网络数据安全(防止抓包)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS 网络数据安全(防止抓包)相关的知识,希望对你有一定的参考价值。

参考技术A 在上个例子中,小客和小服在沟通中存在一个很大的安全隐患,假设邮差在送信过程中被人拦截下来,并篡改了信的内容,这样就会导致隐私泄露和信息被恶意修改问题,并且小客和小服完全不知道发生了什么。我们如果使http请求更安全呢?

A 参考 https://github.com/SmileZXLee/aboutHttp.git

1.服务端生成一对公钥和私钥把公钥交给客户端,
当客户端需要进行数据请求的时候,数据加密处理,客户端保存的公钥,对请求数据进行加密传给后台,后台利用私钥对请求解密,拿出参数进行处理后再加密返回给客户端.客户端对返回的数据进行解密然后进行界面的展示

2.其实第一个很多时候就可以了.对于复杂的APP,有很多接口是不用加密的.这样就出现了防代理的模式:

这里用的CFNetwork.framework框架,进行代理的获取.
这种接口的处理对于用户开VPN的情况下很多时候是有错误的效果.他其实没有代理想抓你包的意思.但是开的VPN会被认为是代理了,导致无法使用APP.

3.SSL Pinning

通过对服务端生成的.cer证书进行域名校验,服务器通过.crt证书导出.cer放到客户端进行处理.
NSURLSession处理

或者是AF里面自定义

证书会失效,证书由于是服务端生成的根据域名来的所以一般最长的是一年的证书.所以不能忘了换,不然可能会对接口请求产生问题.
那么还有没有不用证书来校验的方式呢?还能防止抓包呢?

苹果官方文档

CFNetWork

这个属性可以设置网络代理,默认值是 NULL,使用系统的代理设置。
configuration.connectionProxyDictionary = @;

https://github.com/frankKiwi/FNKSafaNet.git

以上四个方案,建议是第一个加密 和 第四个结合处理.第四个对于H5页面的网络请求还是可以抓到的.

ios七层协议:
从下到上:
a.物理层:传输的是比特流,网卡位于这层。
b.数据链路层:本层传输的是帧;本层主要定义了如何格式化数据,错误检测。交换机位于本层
c.网络层:本层传输的是数据包,路由器位于本层。本层协议是IP协议(Internet Protocol Address),主要功能是路由选择最短路径,将数据包从发送端路由到接收端
d.传输层:协议有TCP(传输控制协议)/UDP(用户数据报协议);主要是控制重传、数据分割之类的,主要是解决数据之间的传输,和传输质量。是IOS最核心的一层,其中TCP协议是最重要的协议
e.会话层:不同机器之间建立会话
f.表示层:解决不同系统之间的语法问题
g.应用层:应用网络中发送数据:需要注意Http协议(超文本传输协议),Https(超文本传输安全协议)

TCP/IP四层模型
与IOS七层模型相同,从下往上依次为:
a.链路层(物理层+数据链路层),
b.网络层(IP),
c.传输层(TCP),
d.应用层(应用层+表示层+会话层)(HTTP)。

ios开发防止App被抓包(可正常请求)

参考技术A 实现iOS应用底层所有网络请求拦截(如ajax请求拦截),包含http-dns解决方法,有效防止DNS劫持,用于分析http,https请求,禁用/允许代理,防抓包
用到第三方库 ZXRequestBlock
1,安装
通过CocoaPods安装

手动导入
将ZXRequestBlock拖入项目中。
导入头文件

使用方法
拦截全局请求

禁止网络代理抓包(开启后将无法通过网络代理抓包,通过Thor,Charles,Burp等均无法抓取此App的包,且在代理网络下App内部请求不受任何影响)

允许网络代理抓包【默认为允许】

启用HTTPDNS(将会直接从本地或http://119.29.29.29 进行DNS解析,是一种避免DNS劫持的措施)

关闭HTTPDNS【默认为关闭】

禁止所有网络请求

恢复所有网络请求

以上是关于iOS 网络数据安全(防止抓包)的主要内容,如果未能解决你的问题,请参考以下文章

iOS App的几种安全防范

https 真的安全吗?可以抓包吗?如何防止抓包吗?

Https 真的安全吗?可以抓包吗?如何防止抓包吗?

iOS核心笔记——网络编程-网络安全

Android App 如何防止抓包

网络安全:Wireshark抓包