轉(zhuǎn)載請注明出處:
https://ahangchen.gitbooks.io/chromium_doc_zh/content/zh/General_Architecture/SafeBrowsing.html
全書地址
Chromium中文文檔 for https://www.chromium.org/developers/design-documents
持續(xù)更新ing炒辉,歡迎star
gitbook地址:https://ahangchen.gitbooks.io/chromium_doc_zh/content/zh//
github地址: https://github.com/ahangchen/Chromium_doc_zh
瀏覽保護(hù)
啟動安全瀏覽后,在允許內(nèi)容開始加載前彤悔,所有的URL都會被檢查噪服。URL通過兩個列表進(jìn)行檢查:惡意軟件和釣魚網(wǎng)站。根據(jù)匹配到的列表恨诱,我們會在一個中轉(zhuǎn)頁面顯示不同的警告頁面媳瞪。
檢查安全瀏覽數(shù)據(jù)庫是一個多步驟的過程。
- URL首先會被哈希照宝,然后會用內(nèi)存中前綴列表進(jìn)行同步的檢查蛇受。
- 如果前綴得到匹配,會向安全瀏覽服務(wù)器發(fā)起一個異步請求厕鹃,拉取這個前綴的全量哈希列表兢仰。
- 一旦這個列表返回,完整的哈希會與列表中的每項進(jìn)行比較剂碴,URL請求可以繼續(xù)執(zhí)行或者終止把将。
- 如果想要知道更多內(nèi)容,你可以查看安全瀏覽協(xié)議的完整描述忆矛。
資源處理器
當(dāng)一個資源被請求時察蹲,ResourceDispatcherHost會創(chuàng)建一串的ResourceHandlers。對于加載資源時的每個事件催训,每個處理器可以選擇取消請求洽议,延遲請求(在決定要做的事情前,做一些異步工作)漫拭,或者繼續(xù)(讓處理鏈中下一個處理器做決策)绞铃。SafeBrowsingResourceHandler在鏈的頭部創(chuàng)建,所以它對于是否允許加載資源有著優(yōu)先權(quán)嫂侍。如果安全瀏覽被關(guān)閉儿捧,SafeBrowsingResourceHandler就不加入鏈中,因此沒有瀏覽相關(guān)的安全瀏覽動作會發(fā)生挑宠。
安全瀏覽中間頁面
當(dāng)資源被標(biāo)識為不安全時菲盾,資源請求會被暫停,并展示一個中間頁面(SafeBrowsingBlockingPage)各淀。用戶可以選擇繼續(xù)懒鉴,這會喚醒資源請求,或者返回,這會取消資源請求临谱,然后返回之前的頁面璃俗。
一些威脅細(xì)節(jié)的收集
如果中間頁面是因為命中下面這些規(guī)則而展現(xiàn):處于威脅列表中(包括惡意軟件,釣魚網(wǎng)站悉默,以及Uws)城豁,頁面是http而非https,標(biāo)簽頁不處于一個匿名窗口中抄课,那么會有一個可選項唱星,讓你發(fā)送關(guān)于這個不安全資源的具體細(xì)節(jié),以進(jìn)行更進(jìn)一步的分析跟磨。
當(dāng)中間頁面出現(xiàn)時间聊,一個IPC會發(fā)送給渲染器進(jìn)程,從DOM收集細(xì)節(jié)抵拘。這些數(shù)據(jù)由一棵URL樹組成哎榴,有各種frame,iframe僵蛛,腳本叹话,和嵌入標(biāo)簽。
如果用戶勾選了忽視中間頁面墩瞳,各種具體細(xì)節(jié)會異步地在瀏覽器端收集驼壶。首先會查詢歷史服務(wù)以獲得所有URL的重定向列表,然后會查詢Cache以獲得這些URL請求的頭喉酌,最后發(fā)送一個報告热凹。
下載保護(hù)
URL檢查
下載檢查操作與瀏覽頁面的操作類似,盡管由于下載的本質(zhì)不同會有一些差異泪电。在接收到頭之前般妙,我們都不知道一個資源請求是否是一個下載請求,因此所有下載也會通過瀏覽檢查相速。同理碟渺,我們不能檢查重定向URL,因為在瀏覽測試中我們已經(jīng)放過它了突诬。相反苫拍,重定向鏈保存在一個URLRequest對象里,一旦我們開始下載檢查旺隙,鏈中所有的URL同時會被檢查绒极。因為下載不像頁面加載那樣具備潛在的敏感,我們也會在內(nèi)存數(shù)據(jù)庫和全量哈希結(jié)果中分發(fā)要檢查的內(nèi)容蔬捷。最后垄提,檢查與下載并行完成榔袋,而不會阻塞下載結(jié)果直到檢查完成,然而直到檢查完成前铡俐,文件都會被賦予一個臨時的名字凰兑。
如果一個下載被標(biāo)記為惡意的,下載欄的這個項目會被替換為一個警告和一個保留或刪除該文件的按鈕审丘。如果選擇了刪除吏够,下載會被取消,文件會被刪除备恤。如果選擇了保留,文件會被重命名為它原來的名字(如果下載仍在進(jìn)行锦秒,后綴會是.crdownload)露泊。
哈希檢查
文件下載時,我們也會計算文件數(shù)據(jù)的哈希值旅择。一旦文件完成下載惭笑,這個哈希值就會與下載摘要列表進(jìn)行對照。當(dāng)前我們在評估哈希檢查的有效性生真,所以不會有UI展示出來沉噩。
這是處理一個請求的代碼流的概覽。一些細(xì)節(jié)被隱藏以保證規(guī)模的合理性柱蟀。綠線意味著一種常見情況川蒙,加載非惡意頁面的頁面時,需要同步檢查內(nèi)存中安全瀏覽數(shù)據(jù)庫长已。短劃線表示異步調(diào)用畜眨。點(diǎn)狀箭頭表示對Google安全瀏覽器的請求。
客戶端釣魚檢測
客戶端釣魚檢測運(yùn)行在用戶訪問的頁面的檢測模式上术瓮,以檢測釣魚網(wǎng)站沒有被列入安全瀏覽列表康聂。啟動時,以及之后的周期中胞四,ClientSideDetectionService會抓取最新的模型恬汁。這個模型會通過IPC發(fā)送給每個渲染進(jìn)程,然后分配給與每個RenderView關(guān)聯(lián)的PhishingClassifierDelegate辜伟。這允許了在渲染進(jìn)程檢查中完成分類氓侧。(渲染進(jìn)程訪問頁面文本。)
資源請求流
這是一個處理請求的代碼流的概覽圖导狡。一些細(xì)節(jié)被隱藏以保證規(guī)模合理性甘苍。綠線意味著一種常見情況,加載非惡意頁面的頁面時烘豌,需要同步檢查內(nèi)存中安全瀏覽數(shù)據(jù)庫载庭。短劃線表示異步調(diào)用。點(diǎn)狀箭頭表示對Google安全瀏覽器的請求。
安全瀏覽資源請求圖
規(guī)范
安全瀏覽柱狀圖使用“SB2.”前綴囚聚。舊版本的柱狀圖使用“SB.”前綴靖榕。也有一些安全瀏覽用戶規(guī)范(可以用“SB”前綴過濾),和一些瀏覽Rappor規(guī)范(前綴是“interstitial”)顽铸。
安全瀏覽數(shù)據(jù)庫
SafeBrowsingService負(fù)責(zé)更新各種安全瀏覽使用的數(shù)據(jù)庫茁计。
TODO(mattm): 提供更多關(guān)于數(shù)據(jù)庫格式和更新過程的信息。