iOS小技能:请求安全防护

简介: 银行和信用卡类app 为了安全,防止修改和抓包都是基本的要求。

前言

银行和信用卡类app 为了安全,防止修改和抓包都是基本的要求。

  • 防止抓包
  1. 防代理
  2. 【SSL证书验证(采用AFNetwork)】
经过app的SSL证书验证之后,别人无法获取报文,除非服务器的证书信任Charles的证书

https://blog.csdn.net/z929118967/article/details/77115940

  • 防止修改请求和返回数据

【iOS app侧对请求参数进行签名:【请求参数按照ASCII码从小到大排序、拼接、加密】(递归的方式进行实现)】

https://kunnan.blog.csdn.net/article/details/108195721

本文重点:

  1. 防代理分析请求数据
  2. SSL证书认证
  3. 采用签名禁止修改报文
  4. 不在本地缓存网络请求报文
  5. 利用NSURLProtocol 拦截修改请求

I 防止抓包

1.1 防代理

#pragma mark ——— 防代理
- (BOOL)getProxyStatusWithURL:(NSString *)url {
    NSDictionary *proxySettings =  (__bridge_transfer NSDictionary *)(CFNetworkCopySystemProxySettings());
    NSArray *proxies = (__bridge_transfer NSArray *)(CFNetworkCopyProxiesForURL((__bridge CFURLRef _Nonnull)([NSURL URLWithString:url]), (__bridge CFDictionaryRef _Nonnull)(proxySettings)));
    NSDictionary *settings = [proxies objectAtIndex:0];
    
    NSLog(@"host=%@", [settings objectForKey:(NSString *)kCFProxyHostNameKey]);
    NSLog(@"port=%@", [settings objectForKey:(NSString *)kCFProxyPortNumberKey]);
    NSLog(@"type=%@", [settings objectForKey:(NSString *)kCFProxyTypeKey]);
    //2019-10-11 22:28:29.993974+0800 ShopList[5912:810446] type=kCFProxyTypeHTTPS

    if ([[settings objectForKey:(NSString *)kCFProxyTypeKey] isEqualToString:@"kCFProxyTypeNone"]){
        //没有设置代理
        return NO;
    }else{
        //设置代理了
        return YES;
    }
}

1.2 app的SSL证书验证(AFNetworking证书认证)

-【 经过app的SSL证书验证之后,就是这样子,别人无法获取报文,除非服务器的证书信任Charles的证书】

[AFHTTPSessionManager manager].securityPolicy = [self customSecurityPolicyWithCertName:@"myCer2020"];
//设定安全策略未读取指定证书文件进行证书验证

AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
//进行SSL证书认证

II 防止修改请求和返回数据

2.1 对请求参数进行签名

【iOS app侧对请求参数进行签名:【请求参数按照ASCII码从小到大排序、拼接、加密】(递归的方式进行实现)】
https://kunnan.blog.csdn.net/article/details/108195721

2.2 不在本地缓存网络请求报文

设置网络请求缓存策略,不在本地缓存网络请求报文

NSURLRequestReloadIgnoringLocalCacheData
NSURLRequestReloadIgnoringCacheData

connection willCacheResponse{
    return nil;
}

III 利用NSURLProtocol 拦截请求

3.1 写一个tweak ,修改请求的HTTPHeaderField

原理分析文章:https://kunnan.blog.csdn.net/article/details/78083815

完整的源码请关注公号:iOS逆向:利用NSURLProtocol 拦截 UIURLConnection、NSURLSession的请求,进行HTTPHeaderField的修改

3.2 基于NSURLProtocol实现iOS应用底层所有网络请求拦截

  • 基于NSURLProtocol实现iOS应用底层所有网络请求拦截(含网页ajax请求拦截【不支持WKWebView】);
RequestBlock4NSURLProtocol
应用场景:隧道APP请求我们自己接口的都不走隧道、修改请求的HTTPHeaderField,设置代理IP和端口、防抓包(使Thor,Charles,Burp等代理抓包方式全部失效)

从CSDN下载Demo:https://download.csdn.net/download/u011018979/16753164

3.3 iOS APP 不走全局proxy的方案

iOS APP 不走全局proxy的方案【 例如:隧道APP的请求接口,一些自己特殊接口不走隧道】(利用NSURLProtocol 进行请求的拦截)

https://kunnan.blog.csdn.net/article/details/78147628

防抓包原理

    //APP请求我们自己接口的都不走隧道
    NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration ephemeralSessionConfiguration];
    configuration.connectionProxyDictionary = @{};

————————————————
版权声明:本文为CSDN博主「iOS逆向」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/z929118967/article/details/78147628
目录
相关文章
|
JSON JavaScript 前端开发
iOS小技能: 开发 uni-app 原生插件(支持iOS Extension)
术语:uni原生插件指的是将`原生开发的功能按照规范封装成插件包`,然后即可在 uni-app 前端项目中通过js调用原生能力。
1118 0
iOS小技能: 开发 uni-app 原生插件(支持iOS Extension)
|
6月前
|
存储 移动开发 JavaScript
【原生】sd.js帮助您简化繁重的获取数据、存储数据(CRUD)骚操作(吐槽~在安卓9.0以下或者IOS10.X以下手机端H5页面不支持,在这两种情况下的系统只能使用ajax或者原生js请求后台数据)
【原生】sd.js帮助您简化繁重的获取数据、存储数据(CRUD)骚操作(吐槽~在安卓9.0以下或者IOS10.X以下手机端H5页面不支持,在这两种情况下的系统只能使用ajax或者原生js请求后台数据)
|
iOS开发
iOS开发 GET、POST请求方法:NSURLSession篇
iOS开发 GET、POST请求方法:NSURLSession篇
102 0
|
安全 iOS开发
iOS小技能:下拉刷新控件的适配
1. 下拉顶部背景色设置: 往tableView的父控件添加拉伸背景视图 2. present 半屏适配 iOS13 modalPresentationStyle属性默认不是全屏样式`UIModalPresentationFullScreen`,而是半屏样式,需要根据需求手动设置。 present 半屏,会导致列表下拉刷新失效。
207 0
iOS小技能:下拉刷新控件的适配
|
iOS开发 Python
iOS小技能:lldb打印block参数签名
iOS逆向时经常会遇到参数为block类型,本文介绍一个lldb script,可快速打印出Objective-C方法中block参数的类型。
199 0
iOS小技能:lldb打印block参数签名
|
JSON JavaScript 前端开发
iOS小技能: 开发 uni 原生插件(支持iOS Extension)
背景:app采用uni实现 需求: iOS App前台后台离线(杀死情况下)推送语音播报(到账xx元、收款播报、自定义推送铃)。 实现方式:uni-app 原生插件(支持iOS Extension)
471 0
iOS小技能: 开发 uni 原生插件(支持iOS Extension)
|
安全 iOS开发 开发者
iOS小技能:重签名、打包脚本
重签名需求:改变了应用的二进制文件,或者增加、修改了应用里面的资源,应用本身的签名就会被破坏。
268 0
iOS小技能:重签名、打包脚本
|
IDE Unix 编译器
iOS小技能:Makefile的使用(Makefile的规则、部署脚本、config管理ssh连接)
make是一个命令工具,是一个解释makefile中指令的命令工具。其本质是**文件依赖**,Makefile文件制定编译和链接所涉及的文件、框架、库等信息,将整个过程自动化。
390 0
|
Swift
iOS12 切换到后台请求丢失的问题
iOS12版本后,AFNetworking请求过程中,app返回后台,会出现以下错误,并且网络请求中断(只在真机中出现,模拟器不会复现)
219 0
|
API iOS开发
iOS多个线程发起相同请求,避免重复
有时候在调用多个模块时,会对同一个API进行多次请求,但因为内容都是一样的,所以最好就是加上锁,防止重复请求造成网络资源浪费
199 0
下一篇
无影云桌面