iOS 防止抓包(SSL Pinning)

本文介绍了如何在iOS应用中通过SSL Pinning防止网络请求被第三方抓包,包括判断网络代理的方法以及AFNetworking库中实现SSL Pinning的步骤,详细解释了不同SSL Pinning模式的选择和证书管理策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、判断是否有网络代理(不推荐)

当进行网络请求的时候,客户端判断当前是否设置了代理,如果设置了代理,不允许进行访问,附带判断是否设置代理的代码:

+ (BOOL)getProxyStatus {
    NSDictionary *proxySettings = NSMakeCollectable([(NSDictionary *)CFNetworkCopySystemProxySettings() autorelease]);
    NSArray *proxies = NSMakeCollectable([(NSArray *)CFNetworkCopyProxiesForURL((CFURLRef)[NSURL URLWithString:@"http://www.baidu.com"], (CFDictionaryRef)proxySettings) autorelease]);
    NSDictionary *settings = [proxies objectAtIndex:0];
    
    NSLog(@"host=%@", [settings objectForKey:(NSString *)kCFProxyHostNameKey]);
    NSLog(@"port=%@", [settings objectForKey:(NSString *)kCFProxyPortNumberKey]);
    NSLog(@"type=%@", [settings objectForKey:(NSString *)kCFProxyTypeKey]);
    
    if ([[settings objectForKey:(NSString *)kCFProxyTypeKey] isEqualToString:@"kCFProxyTypeNone"])
    {
        //没有设置代理
        return NO;
    }
    else
    {
        //设置代理了
        return YES;
    }
}

结果:


没有代理:

### iOS 应用程序防止抓包的方法和最佳实践 对于iOS应用程序而言,防止其通信被中间人攻击(MITM)拦截或通过其他方式被抓包至关重要。这不仅涉及网络层面上的安全措施,还包括客户端本身的防护策略。 #### 使用HTTPS协议加密传输数据[^1] 确保所有的API请求都采用HTTPS而非HTTP来建立连接。HTTPS利用SSL/TLS证书对服务器身份进行验证并加密客户端与服务器之间的所有流量,使得即使第三方能够截获这些信息也无法轻易解读其中的内容。 #### 实施严格的SSL Pinning机制 除了依赖于公共CA签发的SSL证书外,在移动应用内部实现SSL Pinning可以进一步增强安全性。这意味着直接将受信任的服务端公钥嵌入到APP中,并在网络握手阶段强制匹配该特定密钥,从而阻止任何试图伪造合法网站的身份认证行为。 ```swift func urlSession(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) { guard let serverTrust = challenge.protectionSpace.serverTrust else { return } if SSLPinningManager.shared.validate(serverTrust, forHost: "yourdomain.com") { let credential = URLCredential(trust: serverTrust) completionHandler(.useCredential, credential) } else { completionHandler(.cancelAuthenticationChallenge, nil) } } ``` #### 对敏感操作执行额外校验 当涉及到支付、登录等重要业务逻辑时,可以在每次发起这类动作之前向服务端发送一次性令牌或其他形式的时间戳标记作为附加参数;同时配合设备指纹技术收集诸如IMEI号之类的硬件特征用于辅助判断当前环境是否安全可靠。 #### 定期更新应用程序版本 保持软件处于最新状态有助于修复已知漏洞以及引入新的保护特性。开发者应当密切关注官方发布的补丁说明文档,及时响应可能存在的风险隐患。 #### 加固本地存储的数据 即便是在本机上保存的信息也需要采取适当的方式加以隐藏处理,比如使用Keychain Services API代替NSUserDefaults来保管密码之类的关键资料;另外还可以考虑启用iCloud Keychain同步功能以便跨平台共享经过高强度算法加扰后的凭证副本。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值