美文网首页
《高性能iOS应用开发》安全

《高性能iOS应用开发》安全

作者: Yasic | 来源:发表于2018-03-14 06:29 被阅读25次

    任何附加的安全层都会导致应用变慢,需要权衡。

    应用访问

    匿名访问

    这里涉及到如何为设备创建唯一的标识符。

    目前主要有两个,IDFV 和 IDFA。

    • IDFV-Identifier For Vendor(应用开发商标识符)

    IDFV 是设备上每个应用的唯一持久标识符,其中 Vendor 就是应用开发商,对于 iOS7 以后的新版本,这个值通过 bundleId 除去最后一部分的剩下部分来生成。可以用两种方式来保留唯一的设备 ID,其一是将 bundleId 除最后一部分保持唯一,其二是通过共享钥匙串来共享密钥。IDFV 是一种应用加设备绑定产生的标识符,如果用户将属于此 Vender 的所有 App 卸载,则 IDFV 的值会被重置,再重装此 Vender 的 App 时,IDFV 的值和之前也不同。

    IDFV 的获取方式如下

        UIDevice *device = [UIDevice currentDevice];
        NSUUID *rv = device.identifierForVendor;
        if (rv) {
            NSLog(rv.UUIDString);
        }
    

    如果用户在设备重启后没有解锁,而应用已经在后台执行任务期间或在推送时被唤醒了,则可能获取到的 IDFV 是 nil。

    • IDFA-Identifier For Advertising(广告标识符)

    可以理解为广告标识符,在同一个设备上的所有 App 都会取到相同的值,是苹果专门给各广告提供商用来追踪用户而设的。广告标示符是由系统存储着的。这个值并不唯一,用户可以在设置/隐私/广告中还原或禁止广告跟踪,在 iOS10 以后的设备如果选择禁止广告跟踪,则 IDFA 就会变成00000000-0000-0000-0000-000000000000。因此它的获取方式如下

    #import <AdSupport/AdSupport.h>
    
        ASIdentifierManager *mgr = [ASIdentifierManager sharedManager];
        if (mgr.isAdvertisingTrackingEnabled) {
            NSUUID *rv = mgr.advertisingIdentifier;
            NSLog(rv.UUIDString);
        }
    

    认证访问

    大多数 app 采取自定义认证机制,需要注意

    • 强制要求强密码,长度至少为六个字符,包含大小写字符
    • 提供活跃连接列表,允许用户将其他设备或位置上的活跃连接取消
    • 支持双因素身份验证,并在异常情况下使用
    • 启用会话超时机制
    • 永久登录的 app,确保 token 保存于 keychain 中
    • 多次登录失败后启动 CAPTCHA

    验证码的原名为CAPTCHA,是一大串英文的缩写:Completely Automated Public Turing test to tell Computers and Humans Apart,全自动区分电脑和人类的图灵测试。它的目的在于区分人眼与电脑程式,产生只有人类才能辨别的文字,以避免恶意程式攻击或垃圾留言。

    网络安全

    • CRIME 攻击
    • BREACH 攻击
    • 中间人攻击

    一些建议:

    • 禁用 HTTP 压缩,但是会增加传输数据量
    • 从用户输入分离隐私,将授权码放在远离请求正文的地方
    • 对每个请求随机加密,但是无法实现并行请求
    • 修饰隐私,不以原始格式发送隐私
    • 使用 CSRF 保护
    • 隐藏长度,在 HTTP 响应中使用分块传输编码
    • 对请求限速

    • 证书锁定,通过只信任一个或几个能够作为应用根证书的证书,创建一个自定义的信任级别

    相关文章

      网友评论

          本文标题:《高性能iOS应用开发》安全

          本文链接:https://www.haomeiwen.com/subject/edagfftx.html