首页 > 代码库 > App上架重磅通知:App Store安全新规17年1月生效

App上架重磅通知:App Store安全新规17年1月生效

 

作者:沙铭

来源:公众号 沙铭世界观

ID:mobview

 

做推广的也许并不了解什么是ATS(App Transport Security),不过这却是一个定时炸弹,引爆点在2016年底,后果就是你不注意,可能就会导致产品无法在App Store上架,虽然没有违规操作下架那么严重,但结果同样致命。现在还有2个月的缓冲期,但还有很多开发者没有想到这一点,有必要给大家提个醒。

 

ATS是在2015年由苹果引入的强化网络传输安全的标准,要求所有的App在从Web端获取数据的时候都要使用安全的HTTPS链接,并进一步强调要使用最新的TLS1.2版本的HTTPS。

 

注:可以从网址前缀http://或者https://来区别两种标准

 

苹果也清楚还有大量的Web内容仍旧在使用不安全的HTTP链接,因此定义了ATS开关选项的集合(Dictionary),允许大家通过info.plist文件设置(如下图所示),不过我估计99.9%的开发者会选择先打开允许任意链接的选项,然后大部分人过段时间就忘了这回事,好像什么事都没有发生过。

 技术分享

现在是醒过来面对现实的时候了,苹果在WWDC时已经透漏,强制使用ATS的大限是今年底,也就是说,从17年开始苹果审核团队会将ATS作为强制审核项,以苹果的脾气,可能会硬来,反正已经给了一年多的缓冲期了!

 

到时一刀切怎么办?作为CP应该如何处理?我们今天就来详聊下这个问题!

 

首先,我们还是要了解具体的政策,然后在此基础上做出合理的猜测,这样每家CP根据自己的具体情况评估之后就知道该怎么做了。然而无论如何,大的原则是要快速做出反应,不要存有侥幸心理!

 

当然,HTTPS是大势所趋,苹果强制执行ATS也是本着对用户负责的态度,无可厚非。在执行的尺度上,我认为苹果也会灵活的评估,肯定有一些"I will know it when I see it"的模糊情况,想必App Store的老司机都心领神会。

 

虽然说17年ATS会成为强制标准,但是这里面还是分为几种不同的情况的,为了帮助大家理解,沙铭从推广和开发两个角度去说

 

推广角度

 

  1. App的内容来源如果有自家网站,去和技术核对一下是使用哪种传输标准,如果仍然使用HTTP或者是低于TLS1.2的HTTPS,要不就赶紧整改,要不就准备和苹果审核磨,准备好申请特例的充分理由。在我的星座苹果系列中有两篇文章《善变双子,难言的苦衷:史上最强审核团队起底,掩藏的秘密》和《闷瓜金牛,本应昭告天下却缄默:开发者账号,审核加速揭秘》,了解应该如何跟审核团队打交道,以及开发者账号在审核过程中的作用,还是非常必要的。

     

  2. App的内容如果有来自已知的第三方,可以暂时不用管,让技术设置一下ATS的开关(下文中会涉及),不过最好的做法是和第三方沟通下,敦促他们所有的传输都使用TLS1.2加密。

     

  3. App的内容来自于不可知的第三方,比如说允许用户通过App访问任意网站,可以忽视ATS,不过来自于自有网站的内容还是必须遵循第一条。同时询问技术使用的是何种框架,如果是WebKit,建议切换到Safari,否则今后可能还会有麻烦事。

     

  4. 如果是提供流媒体内容的App,不想服从于ATS,就必须在源头进行流媒体加密,并且使用苹果的流媒体框架,就可以暂时无视ATS。

 

因此,大家可以根据自己的情况来决定是采用哪种对策,当然上策是尽量使用TLS1.2的HTTPS安全标准,实在不行就要多想想如何跟苹果解释,以争取特例!

 

不过有个问题目前还不是特别明朗:对于那些不达标准的已上架App如何处理?我个人不太相信App会因为这个原因被下架,苹果最可能的做法是等到App迭代时拒绝上架。这时可能又有人会想了:那我就不更新!呵呵,也许也是一种办法。总而言之,新一轮的猫捉老鼠游戏又要开始了。

 

开发角度

 

1. ATS设置中打开了以下开关,又没有提交合理的解释,那么会100%被拒

 

  1. NSAllowsArbitraryLoads,打开此开关相当于关闭ATS

  2. NSExceptionAllowsInsecureHTTPLoads,使用自有网站的HTTP链接

  3. NSExceptionMinimumTLSVersion,使用自有网站低于TLS1.2标准的HTTPS链接

 

至于什么是合理的解释,这个就完全是一个主观判断的过程了,也许有的人觉得自己的理由很充分,但是如果不能够说服苹果审核,你的App就是上不了线,这考验团队的沟通技巧和英文水平!

 

2. 以下几种情况苹果给予特例,不需要提供解释:

 

  • App提供流媒体服务,媒体源已经对内容进行了加密,这时只要使用苹果的AV Foundation框架加载内容,就可以无视ATS;

  • 不使用Forward Secrecy(完全前向保密)技术,可以在ATS设置中关闭NSExceptionRequiresForwardSecrecy开关(缺省是打开);

  • NSThirdPartyException,使用第三方链接,而这里面又包括使用第三方HTTP链接或者是低于TLS1.2版本的HTTPS等几个开关。

 

估计有人会想,那我把自己的网站伪装成第三方网站,使用这个特例不就好了,Bingo!如果你能经得起被拒甚至更重的惩罚,也许可以试试,不过有理由相信苹果有多种方法判断关联网站,承受不起风险者勿试。

 

3. ATS设置中还有个开关NSAllowsArbitraryLoadsInWebContent,打开后允许使用任意Web链接,这个和NSAllowsArbitraryLoads有些区别,主要是针对那些提供类似于Web浏览器服务的App,由于事先不知道用户会浏览哪些网站,因此无法限制链接类型。

 

不过苹果建议如果要提供浏览器类的服务,请使用SFSafariViewController,优于WKWebView,后者更适用于对用户访问web内容更有把控的情况。

 

关于ATS的详细设置,开发可以参考苹果官方文档。

 

此外,苹果还建议放弃以下较老的标准

 

  • RC4

  • SSLv3

  • SHA-1

  • 3DES

 

并向最新的安全标准迁移,包括

 

  • Forward Secrecy

  • SHA-2

  • OCSP Stapling

     

 

App上架重磅通知:App Store安全新规17年1月生效