V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iOS 开发实用技术导航
NSHipster 中文版
http://nshipster.cn/
cocos2d 开源 2D 游戏引擎
http://www.cocos2d-iphone.org/
CocoaPods
http://cocoapods.org/
Google Analytics for Mobile 统计解决方案
http://code.google.com/mobile/analytics/
WWDC
https://developer.apple.com/wwdc/
Design Guides and Resources
https://developer.apple.com/design/
Transcripts of WWDC sessions
http://asciiwwdc.com
Cocoa with Love
http://cocoawithlove.com/
Cocoa Dev Central
http://cocoadevcentral.com/
NSHipster
http://nshipster.com/
Style Guides
Google Objective-C Style Guide
NYTimes Objective-C Style Guide
Useful Tools and Services
Charles Web Debugging Proxy
Smore
stephenliubp
V2EX  ›  iDev

iOS App 网络请求虽然用 HTTPS,但是像 Charles 专业抓包工具还是可以获取数据的,所以求一种比较合理的方案

  •  
  •   stephenliubp ·
    FantasticLBP · 2018-08-14 18:38:50 +08:00 · 7091 次点击
    这是一个创建于 2326 天前的主题,其中的信息可能已经有所发展或是发生改变。
    11 条回复    2018-08-27 09:13:03 +08:00
    CDuXZMAPgHp1q9ew
        1
    CDuXZMAPgHp1q9ew  
       2018-08-14 19:52:40 +08:00
    中间人攻击, 客户端校验证书可破
    MrMario
        2
    MrMario  
       2018-08-14 20:03:33 +08:00
    证书校验:
    客户端预置服务端证书(其实只要一个哈希就可以了)
    客户端网络库或者其他基础组件上,加上这个哈希校验,拒绝哈希不一致的请求

    注意证书更换升级等(可以考虑多买几张证书)
    snail1988
        3
    snail1988  
       2018-08-14 20:30:08 +08:00
    什么目的 防止 用户抓包?还是防止中间第三人抓包
    中间人 搜索一个概念 ssl-pinning
    防用户没有什么可行手段
    kwest
        4
    kwest  
       2018-08-14 21:27:30 +08:00
    用 HTTPS 却不去校验证书就是耍流氓。
    junbaor
        5
    junbaor  
       2018-08-15 10:14:39 +08:00
    双向认证了解一下
    stephenliubp
        6
    stephenliubp  
    OP
       2018-08-15 10:52:20 +08:00
    @snail1988 对,防止抓包,但是我写了 ssl-pinning 的代码测试过还是可以抓包的。

    ``` Objective-c

    + (AFSecurityPolicy*)customSecurityPolicy
    {
    NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"https12" ofType:@"cer"];
    NSData *certData = [NSData dataWithContentsOfFile:cerPath];
    AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
    securityPolicy.allowInvalidCertificates = NO;
    securityPolicy.validatesDomainName = YES;
    securityPolicy.pinnedCertificates = @[certData];

    return securityPolicy;
    }

    + (void)postUploadWithUrl:(NSString *)urlStr para:(NSDictionary *)para name:(NSString *)name fileData:(NSData *)fileData fileName:(NSString *)fileName fileType:(NSString *)fileType success:(void (^)(id responseObject))success fail:(void (^)(void))fail
    {

    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    manager.securityPolicy = [AFNetPackage customSecurityPolicy];
    [manager POST:urlStr parameters:para constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
    [formData appendPartWithFileData:fileData name:name fileName:fileName mimeType:fileType];
    } success:^(NSURLSessionDataTask * _Nonnull task, id _Nonnull responseObject) {
    if (success) {
    success(responseObject);
    }
    } failure:^(NSURLSessionDataTask * _Nonnull task, NSError * _Nonnull error) {
    if (fail) {
    fail();
    }
    }];
    }
    ```
    stephenliubp
        7
    stephenliubp  
    OP
       2018-08-18 11:03:15 +08:00
    数据安全方面给个推荐:Web 端: https://github.com/FantasticLBP/Anti-WebSpider。App 端:ssl 证书双向认证防止 抓包工具抓包;数据 RSA 加密;接口防重放
    AwayEM
        8
    AwayEM  
       2018-08-25 22:49:22 +08:00
    双向认证用越狱机也是有办法看到内容的...
    stephenliubp
        9
    stephenliubp  
    OP
       2018-08-25 22:50:37 +08:00
    @AwayEM 数据 RSA 加密了
    Daniate
        10
    Daniate  
       2018-08-26 20:40:55 +08:00
    试试把 NSURLSessionConfiguration 的 connectionProxyDictionary 属性设置成 @{}
    stephenliubp
        11
    stephenliubp  
    OP
       2018-08-27 09:13:03 +08:00
    @Daniate 嗯,早期用这个,后来换成“ ssl 证书双向认证;数据 RSA 加密;接口防重放“。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1900 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 16:15 · PVG 00:15 · LAX 08:15 · JFK 11:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.