蘋果爸爸放大招藐翎,禁掉JSPatch熱更新(Apple爹已給回復(fù))

這應(yīng)該是軟件開發(fā)最近兩天最熱的話題了吧。实幕。吝镣。 O(∩_∩)O哈哈~
首先說一下這次受影響的第三方:
目前已經(jīng)知道的有:
高德地圖 已經(jīng)更新了sdk V1.3.4 規(guī)避了問題
Bugtags 已經(jīng)更新了SDK V2.2.1規(guī)避了問題 **
這里不得不說下,大廠就是效率啊昆庇,很快給出了解決方案末贾。
還有
rollout,react native整吆,weex拱撵,JSPatch,個推 ,bugly with hotfix
等表蝙。

也有說是使用dlopen(), dlsym(), respondsToSelector:, performSelector:, method_exchangeImplementations()這些個方法太多了拴测。。具體原因不清楚府蛇,還得等蘋果大大給出答案啊集索,誰讓他是你親爹來呢。欲诺。抄谐。

猜測的原因

蘋果為什么這么做呢?蘋果對熱修復(fù)一直以來的態(tài)度都是不贊同也不拒絕扰法,JSPatch 本身也并沒有違反開發(fā)者條例蛹含,而且 JSPatch 大多數(shù)都用于修復(fù) bug,提升 iOS 平臺 App 的質(zhì)量塞颁,對蘋果也是件好事浦箱,為什么要禁吸耿?猜測原因有兩點:可控和安全

可控

蘋果一貫作風(fēng)是讓所有事情可控酷窥,開發(fā)者能用什么不能用什么都盡量在自己的控制范圍內(nèi)咽安。大多數(shù)人使用 JSPatch 修復(fù) bug,或者弄一些臨時運營的小功能配置蓬推,這些沒有問題妆棒,但總會有少數(shù)用戶使用 JSPatch 去調(diào)用私有API做些事,這是蘋果不可控的沸伏,也無法知道有多少人這樣做了糕珊。
不過其實在代碼這塊蘋果其實一直可控程度有限,他會在提交時掃描你有沒有用某些私有方法毅糟,但只要你對這些私有方法調(diào)用做一些變化红选,加解密字符串拼接什么的,就能繞過掃描姆另,再通過后臺配置調(diào)用喇肋,是一樣的。JSPatch 只是讓調(diào)用私有 API 變得成本更低更方便點而已迹辐,可控這里只是個小理由蝶防。

安全

去年 FireEye 分析了使用 JSPatch 的安全問題,當(dāng)時也有文章回應(yīng)了右核,再復(fù)述一下慧脱,主要安全風(fēng)險有三點:
開發(fā)者自己本身對 APP 下發(fā)惡意代碼。
開發(fā)者沒有做好加密傳輸和校驗贺喝。
開發(fā)者接入的SDK里接入了JSPatch菱鸥,SDK 作者可以對這些 APP 下發(fā)惡意腳本。
第一點其實不算安全風(fēng)險躏鱼,因為開發(fā)者自己有惡意的話完全不需要借助 JSPatch氮采。
第二點大多數(shù)用戶使用 JSPatch 時都做好了非對稱加密,保證不會在傳輸過程被第三方篡改染苛。但這里技術(shù)上沒法保證用戶一定使用正確的加密方式鹊漠,蘋果無法知道有多少接入 JSPatch 的用戶沒有正確加密和校驗,這是未知的安全隱患茶行。
第三點在當(dāng)時并沒有什么第三方 SDK 接入 JSPatch躯概,但現(xiàn)在像高德地圖/個推等都接入了,如果他們要作惡畔师,或者他們本身服務(wù)端被入侵娶靡,確實是個安全隱患。
iOS 平臺是最安全的看锉,也是最注重安全的姿锭,即使熱修復(fù)帶來了 App 質(zhì)量更高的好處塔鳍,也無法無視這里的安全隱患,現(xiàn)在 JSPatch 國內(nèi)覆蓋面很大呻此,若出一個安全問題轮纫,會影響 iPhone 的聲譽,因為這個風(fēng)險焚鲜,所以考慮禁掉掌唾。

蘋果爸爸還是愛我們的
是挑戰(zhàn)也是機(jī)會

Apple大大終于給出了回復(fù):

The code referenced in our initial rejection message includes any code which passes arbitrary parameters to dynamic methods such as dlopen(), dlsym(), respondsToSelector:, performSelector:, method_exchangeImplementations(), and running remote scripts in order to change app behavior or call SPI, based on the contents of the downloaded script.

意思是:代碼中引用我們最初拒絕信息,包括任何代碼傳遞任意參數(shù)動態(tài)方法如dlopen(),dlsym(),respondstoselectorismemberofclass:performSelector:,method_exchangeImplementations(),并運行遠(yuǎn)程腳本為了改變應(yīng)用程序的行為或調(diào)用SPI,基于下載腳本的內(nèi)容恃泪。 都是不允許的郑兴。但是objective - c方法respondstoselectorismemberofclass:和performSelector:仍然是支持和允許的。

建議最近風(fēng)聲很緊贝乎,還沒有得到確定的解決方案的時候,還是暫時規(guī)避掉這些敏感東西吧叽粹,根據(jù)蘋果要求览效,收到警告的同學(xué)只需要在下次提交版本時去掉相關(guān)框架就可以,沒有時間期限虫几,目前也不會強制下架锤灿。否則你的App可能會被拒甚至被下架。

目前不清楚的點:(已經(jīng)給出了解決方案)

1辆脸、是否不允許使用JSPatch或Rollout.js但校、React Native、Weex等框架啡氢?

(只要是運行了遠(yuǎn)程腳本,為了改變應(yīng)用程序的行為或調(diào)用SPI,肯定是不行的啦)

2枯跑、AFN和SDWedImage等部分包括 such as dlopen(), dlsym(), respondsToSelector:, performSelector:, method_exchangeImplementations(),但是沒有遠(yuǎn)程更新旷坦,這樣能否使用?

(objective - c方法respondstoselectorismemberofclass:和performSelector:仍然是支持和允許的搀崭。)

3叨粘、第三方SDK,比如統(tǒng)計分析瘤睹、crash收集升敲、以及性能分析等,我們怎么檢查他們有沒有使用非法的方法轰传?

我的方法就是驴党,自己細(xì)致檢查,并且關(guān)注對應(yīng)的第三方網(wǎng)站給出的信息绸吸。

4鼻弧、后期的解決方案是什么设江?

請深入審查你的應(yīng)用,刪除任何代碼,框架,或sdk只要是包含上面禁止的內(nèi)容攘轩;然后提交更新你的應(yīng)用程序叉存。

馬上提交版本了,里面只用了JSPatch用于熱更新修復(fù)BUG度帮,但是沒有收到蘋果下發(fā)的警告郵件歼捏,準(zhǔn)備不下掉JSPatch 提交看看,到底會不會被拒笨篷。 提了之后再來補充結(jié)果瞳秽。

不過第一版,我還是要冒險測試下這個問題率翅,一旦通過了呢练俐。并且,沒有了熱更新真的好方啊冕臭,等我的消息吧 O(∩_∩)O哈哈哈~

結(jié)果:沒有下掉JSPatch直接被拒了腺晾,刪除之后在提交通過了。其中MJ和AFN等這些第三方庫是沒有問題的辜贵。坐等可以替代熱更新的方案悯蝉。

Apple 爹給出的具體回復(fù):

The code referenced in our initial rejection message includes any code which passes arbitrary parameters to dynamic methods such as dlopen(), dlsym(), respondsToSelector:, performSelector:, method_exchangeImplementations(), and running remote scripts in order to change app behavior or call SPI, based on the contents of the downloaded script. The Objective-C methods respondsToSelector: and performSelector: are still supported and allowed. For example, they can be used to check OS compatibilty before using a selector. However, you should only pass selectors to these methods, which are specified at compile time. If you think you are using static selectors, it’s possible a third-party framework you’ve added to your app is not in compliance.

Please perform an in-depth review of your app and remove any code, frameworks, or SDKs that fall in line with the functionality described above before submitting the next update for your app for review

JSPatch 官方給出的解決方案:

目前的建議以及后期的改進(jìn)方案

討論還可以看這些地方,已經(jīng)closed了托慨;
JSPatch Issues
react-native :https://github.com/facebook/react-native/issues/12778
Weex :https://github.com/alibaba/weex/issues/2875
JSPatch作者的看法

所以鼻由,最后的結(jié)果以及我們應(yīng)該做的就是:

請深入審查你的應(yīng)用,刪除任何代碼,框架,或sdk只要是包含上面禁止的內(nèi)容厚棵;確保符合要求之后蕉世,提交更新你的應(yīng)用程序。

完?吒小L直恕! 繼續(xù)關(guān)注中柿祈。哈误。。

3月28日躏嚎,JSPatch已經(jīng)給出了解決方案:對應(yīng)的解決方案

直接集成SDK的小伙伴可以更新了蜜自。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市卢佣,隨后出現(xiàn)的幾起案子重荠,更是在濱河造成了極大的恐慌,老刑警劉巖虚茶,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件戈鲁,死亡現(xiàn)場離奇詭異仇参,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)婆殿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進(jìn)店門诈乒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人婆芦,你說我怎么就攤上這事怕磨。” “怎么了消约?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵肠鲫,是天一觀的道長。 經(jīng)常有香客問我或粮,道長导饲,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任氯材,我火速辦了婚禮帜消,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘浓体。我一直安慰自己,他們只是感情好辈讶,可當(dāng)我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布命浴。 她就那樣靜靜地躺著,像睡著了一般贱除。 火紅的嫁衣襯著肌膚如雪生闲。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天月幌,我揣著相機(jī)與錄音碍讯,去河邊找鬼。 笑死扯躺,一個胖子當(dāng)著我的面吹牛捉兴,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播录语,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼倍啥,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了澎埠?” 一聲冷哼從身側(cè)響起虽缕,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蒲稳,沒想到半個月后氮趋,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體伍派,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年剩胁,在試婚紗的時候發(fā)現(xiàn)自己被綠了诉植。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡摧冀,死狀恐怖倍踪,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情索昂,我是刑警寧澤建车,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站椒惨,受9級特大地震影響缤至,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜康谆,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一领斥、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧沃暗,春花似錦月洛、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至惜辑,卻和暖如春唬涧,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背盛撑。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工碎节, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人抵卫。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓狮荔,卻偏偏與公主長得像,于是被迫代替她去往敵國和親陌僵。 傳聞我的和親對象是個殘疾皇子轴合,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 一.今天一早不少iOS開發(fā)者收到了蘋果的警告郵件,內(nèi)容如下: Your app, extension, and/o...
    朱曉輝閱讀 9,544評論 12 16
  • 17/03/08更新有不少小伙伴反應(yīng)蘋果發(fā)送了郵件要求去除項目中用于動態(tài)改變應(yīng)用的代碼 ,看來 JSPatch 要...
    dy_zhang閱讀 3,395評論 5 15
  • 開發(fā)者都收到了蘋果2017年的新開發(fā)者審核協(xié)議更新通知碗短。 2017年3月8…注意..是女神節(jié)這天受葛。大量開發(fā)者收到了...
    iOS_ITCode閱讀 603評論 0 2
  • 之前開發(fā)者都收到了蘋果2017年的新開發(fā)者審核協(xié)議更新通知。 2017年3月8...注意..是女神節(jié)這天。大量開發(fā)...
    符武閱讀 527評論 1 0
  • 前言 最近不少 iOS 開發(fā)者都收到了蘋果的警告郵件,在郵件中闰渔,蘋果稱開發(fā)者使用了動態(tài)代碼更新技術(shù)席函,要求開發(fā)者刪除...
    十人言末閱讀 868評論 0 5