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
目录
相关文章
|
4月前
|
存储 移动开发 JavaScript
【原生】sd.js帮助您简化繁重的获取数据、存储数据(CRUD)骚操作(吐槽~在安卓9.0以下或者IOS10.X以下手机端H5页面不支持,在这两种情况下的系统只能使用ajax或者原生js请求后台数据)
【原生】sd.js帮助您简化繁重的获取数据、存储数据(CRUD)骚操作(吐槽~在安卓9.0以下或者IOS10.X以下手机端H5页面不支持,在这两种情况下的系统只能使用ajax或者原生js请求后台数据)
|
7月前
|
iOS开发
iOS开发 GET、POST请求方法:NSURLSession篇
iOS开发 GET、POST请求方法:NSURLSession篇
74 0
|
Swift
iOS12 切换到后台请求丢失的问题
iOS12版本后,AFNetworking请求过程中,app返回后台,会出现以下错误,并且网络请求中断(只在真机中出现,模拟器不会复现)
153 0
|
API iOS开发
iOS多个线程发起相同请求,避免重复
有时候在调用多个模块时,会对同一个API进行多次请求,但因为内容都是一样的,所以最好就是加上锁,防止重复请求造成网络资源浪费
152 0
|
网络协议 前端开发 数据安全/隐私保护
iOS拦截http请求 ( 为小白用户定制的精简版本)
iOS拦截http请求 ( 为小白用户定制的精简版本)
688 0
iOS拦截http请求 ( 为小白用户定制的精简版本)
|
移动开发 iOS开发
iOS开发:日志记录及AFNetworking请求
本篇文章主要目的是为了将用户操作习惯记录到本地文件,然后定期或者根据实际需要打包压缩上传到服务器,用以处理用户在闪退的时候,或需要详细了解具体某个用户在这一段时间的操作习惯。由于要压缩上传本地日志,顺道集成了AFNetWorking了post和get的接口请求,以及请求是接口失败后,错误信息显示,这个在开发的时候特别方便,后台可以在根据这些错误日志查询对应的问题。
284 0
|
iOS开发
iOS网络编程之五——请求回执类NSURLResponse属性简介
iOS网络编程之五——请求回执类NSURLResponse属性简介
243 0
|
缓存 安全 iOS开发
iOS网络编程之四——请求类NSURLRequest使用详解
iOS网络编程之四——请求类NSURLRequest使用详解
466 0
|
Web App开发 网络安全 iOS开发