難得在這邊看到有關套件審核的討論, 就順便來分享一下有關套件審核的部份.
以下是我憑記憶寫的, 有錯誤的話歡迎指正.
Firefox(AMO)和Chrome(CWS)一開始就使用了兩個不同的審核策略,
所以我們可以分別討論這兩個兩種不同的作法.
首先是Firefox(AMO), 主要是人工審核,
但實際上全球審核員只有十幾人(2018年時, 現在不曉得有沒有增加),
AMO上面約25300個套件只有118個是完全審核的(剛剛查的數據),
其餘的為部份審查(審查過之前某一版, 但沒審過最新版)或未審查.
可想而知, 大部份的套件都是沒審過的, 除非你就只裝一兩個, 像我就是這種,
不然多少都會裝到沒審過的, 我所有在AMO的套件, 現在也都是未審核狀態.
那如何確保沒審過的套件是安全的呢? 審核團隊用的是一個叫風險值的指標.
首先, 當你上傳一個新套件, AMO後台就會先把這個套件作分析,
大致上就是看你套件manifest.json內容, 看你的API permissions & Host permissions,
看你有沒有content script 和 該 content script 的 match patterns,
看你有沒有自訂CSP, 看你有沒有用到高風險API(eval 或類似作用的code),
看你有沒有使用混淆後的code,
權限越大, 能改動越多網站, 使用高風險API, 就會有一個越高的風險值.
審核者一上線就會看到一個用風險值排序的套件列表, 然後從一些高風險的套件開始審.
另外, 上傳新版本也會提高風險值, 例如一個套件經過人工審核後,
風險值就會降一些, 經過多次更版, 如果都沒有重新審核, 風險值就會一直疊加
(就會跑到審核列表的前面一些),
距離最後一次審核版本, 改越多, 加越多, 直到重新被人工審核.
再來就是套件的人工審核其實是分兩塊,
一塊叫內容審核, 一塊叫安全性審核, 兩塊的審核員是分開的.
內容審核其實是你上傳套件的第一關, 審核員無需技術背景,
只要審核你的套件內容有無違反AMO條款(不能有色情, 賭博, 違反美國法律之類的),
一般來說你上傳新套件或新版本, 會發現沒有立即出現在架上,
那就是因為還沒通過內容審核, 雖然這個過程也是人工, 但因為不用實際檢查程式碼,
所以可以審很快, 只要審查員上線, 通常可以審個上百個.
* 有一陣子AMO是上傳就上架, 但是後來AMO受到廣告攻擊,
用自動化方式上傳一堆廣告套件, AMO 也不像CWS要繳5塊美金,
所以砍帳號也無法阻止自動化註冊, 最後只好把上架後的內容審核改到上架前執行.
安全性審核就是大家平常比較熟知的審核, 需要技術背景,
主要就是檢查你套件是否安全, 有沒有把使用者資料傳到特定地方,
有沒有動態注入代碼問題, 有沒有提供混淆前的原始碼,
有沒有對應的隱私條款, 有沒有嚴重效能問題等.
一般你上傳套件後, 只要通過內容審核, 就會立即上架,
之後(可能是很久以後)才會有安全性審核.
再來是Chrome(CWS), 主要是自動審核, 但近兩三年有人工審核,
Google作為大數據的霸權, 除了結合靜態分析和動態分析外,
還導入了機器學習, 用來自動分析套件是否有問題,
從2015年的一份報告中指出Google已累積了超過45TB的動態分析資料.
Google的機器人會查詢搜索引擎, 瀏覽社交媒體, 查看熱門新聞網站,
看看有沒有該套件的相關資訊.
舉例來說, 如果有新聞網站報導了一篇某某套件竊取使用者資料,
或是有社群網站上有人討論到某某套件含有惡意程式碼,
Google就會自動下架該套件(當然會經過一些AI判定)
這也就是為啥有時候在CWS上的套件會莫明其妙下架,
因為AI有時候會誤判, 而當惡意套件在論壇上被討論時,
套件也會自動下架, 因為AI是24小時隨時都在幫忙監看的.
得益於越來越強大的機器學習, CWS的無人工審核讓開發者上傳套件後
無需等候人工審核就可以直接上架,
但是還是有不少漏網之魚, 比起AMO, CWS常常是套件被使用者發現問題後才下架.
(AMO也偶有惡意套件, 但相對少一些, 但審核人力問題, 很難改善)
畢竟惡意套件也有很多手段讓你難以透過簡單的自動檢查發現問題.
這兩年我在上傳套件到CWS時, 有注意到, 含有content script
(且有大範圍match patterns)的套件, 在上傳後會出現要人工審核(雖然不知道是
真人工還是人工智慧), 因此需要等個一兩天才會真的上架.
說明了Google對安全性的要求仍然是持續進步的.
實際上我也很久沒認真寫套件了, 所以上面的資訊可能沒有到最新,
不過大方向應該還是一樣的, 可以給想開發套件的人一點參考.
如果對上面提到的部份有問題, 歡迎討論.