iOS直播間開發經驗小結

1.房間內的信令消息應該是由後臺進行分發,而不是客戶端自己分發

1.1假如客戶端進行分發會怎麼樣?

  • 客戶端誰來發信令消息?
    • 按照業務上的區分邏輯。我們很容易想到如踢人禁言禁麥這種控制性信令只能由房主或管理員身份來觸發。發文字消息或者發圖片這種普適性信令可以由發起者觸發。初看,這套邏輯沒問題,但實際上,隱患很大。如下
    • 客戶端存在被破解的可能性
      客戶端進行加密? 我攔截你的加密消息 原模原樣的再發一遍呢? 那你就得校驗唯一性。
      只校驗唯一性也有問題,還得在加上時間戳的校驗。因爲我們的信令消息id一般都是實時保存在內存中的,不會做本地保存。有可能被人拿殺死進程前的信息來重發一遍。【比如禮物類消息】,如果消息id做本地保存的話,也會有新的問題,時間你要保存多久?空間你要保存到多大後刪除呢?
      攻擊者還可以不用管你的任何加密方式,直接把客戶端內存值的數量進行修改,比如上報給接口數量是1個禮物,但客戶端發信令消息的時候給你篡改成99個。如果客戶端校驗不仔細,就會有此漏洞。
  • 維護成本巨大
  • 工作量大,安卓和iOS各需要寫一遍發信令的邏輯。
  • 在版本迭代中,很容易遇到信令消息字段新增,修改或者棄用的場景。如果由客戶端進行維護,那需要嚴格保持iOS和安卓版本的一致性。而且由於安卓的新版本更新率遠低於iOS,經常會有iOS爲了兼容安卓的老版本,不斷的發舊信令消息。
  • 線上出問題了,沒辦法及時做處理。
    如筆者遇見過,在房間內發特殊的阿語字符,安卓房間收到後會瞬間崩潰。如果文本消息由後臺進行分發,遇上此情況,就可以迅速屏蔽該字符避免崩潰。
  • 其他問題
    多人搶麥,A,B,C三個客戶端同時發起了搶麥,從邏輯上來講,這三個人信令消息發出的時候,必定時間戳是不同的,有大小之分。但是其他客戶端並不知道。假如真實的點擊時間最早是A,其次B,最後C。很可能到達E這個客戶端的順序是B,A,C。到達F這個客戶端的順序是C,A,B。這樣就引起了多臺手機麥位上人員顯示不一致的問題。【當時受困於客戶端自己瞎搞的邏輯,折中成是先收到誰的消息,麥位就先顯示誰,在一定時間內,比如5s內收到了其他的上麥消息,對比時間戳,若更早,則替換麥上的人】這樣的體驗並不是很好,在房間人多時,麥位上會先顯示一個人,往往又會馬上顯示另外一個人。而如果由後臺控制誰纔可以上麥,則完全沒有上述問題。
    以上邏輯,客戶端還會摻雜着時間戳問題。有惡意的用戶,他可以先斷網,在觸發斷網強制退出回調前,恢復網絡,因爲這時還未拉到麥位信息,所以麥位可進行點擊,此時用戶進行點擊,並同時把手機時間戳往前調到一個合適的時間。這樣無論他怎麼操作,他都可以把原來的麥位進行替換掉【筆者曾遇到過的問題,大R被反覆惡意下麥】。注意,這種場景下,時間戳僅在App啓動時候的一次修正並不能解決任何問題。需要每次實時修正。當然,我們有更簡單的判斷,未拉取到數據之前,直接不允許用戶進行點擊操作。
    爲了堅持讓客戶端去發信令消息,我們當然還可以做以下嘗試
    本地客戶端可以通過一些方式來增加被攻擊的門檻,但是性價比低。
    混淆與加固:
    筆者混淆過一段時間 但有一次審覈時來被蘋果發現了,審覈被拒,警告不允許再混淆。
    安卓應用360進行加固和混淆的,據瞭解,一樣可以被專業人士直接破解
    內存保護:
    增加業務複雜度,因爲每當客戶端發消息的時候,都需要內存比對一下信息,看是否篡改。當有正常業務邏輯觸發用戶信息修改的時候,還需額外同步其他地方修改。
    或者應用一些其他的高級防護技術【防調試,防止反編譯,代碼變現,代碼亂序,指令替換等】以上自己實現,工作量大,容易引起各種各樣其他Bug,產出回報小。如果直接用成熟的SDK,比如愛加密,則會加大成本費用(基礎版防護SDK幾萬起步)。
  • 以上所有問題的根源在於,客戶端沒有一個真實性參考平臺。本地的一切信息都有可能會被造假。而將造假後的信息發送給其他客戶端,很容易引起各種各樣無休止的問題,客戶端會陷入無盡的折磨之中,只能去被動防禦。而當線上真遇到此問題時,從用戶反饋到客服,客服反饋到測試,開發討論分析,定出解決方案,到進行修改,通過測試,上架成功,用戶更新。等這一系列流程走完後,最少過去三四天了,平臺的口碑早就受到了影響。綜上,如果一條信令消息被篡改後,可能會影響其他客戶端,那麼這類消息必須由後臺進行分發。

2.房間鎖問題

  • 房間鎖,無論在什麼情況下,接口都不應該直接返回鎖的密碼值,讓客戶端進行比對密碼是否正確,哪怕是進行加密後的。對於密碼是否正確的判斷一定是由後臺判斷,前端只負責提交用戶進入時輸入的密碼。
  • 房間鎖,一般我們會設計成純數字的形式。注意:當客戶端採用純數字鍵盤時,需要後臺對阿語下的數字進行額外處理,或客戶端自定義純阿拉伯數字鍵盤(有的大R會不喜歡這樣的鍵盤,他們就喜歡用自己的語言數字),或客戶端本身進行阿語判斷,轉換爲阿拉伯數字後在上傳。

3.目標用戶人羣的定位

• 將印度人和中東人放一起 會產生大量矛盾和文化衝突
• 印度人喜歡一些印度特殊的禮物 比如拖鞋 會覺得很嗨
• 阿拉伯人瞧不起印度人 覺得印度人又窮又鬧

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章