網頁介面與桌面版應用程式¶
不用 CLI,直接從瀏覽器掃描。介面伺服器已內建在掃描器映像檔裡,不需要額外安裝。

macOS / Linux:
cd ~/sbom-output # 輸出資料夾(放哪裡都行)
/path/to/bomlens/scripts/scan-sbom.sh --ui
# → 會自動開啟 http://localhost:8080
Windows——雙擊執行(不用指令列):在解壓縮後的資料夾裡雙擊 scripts\sbom-ui.bat,稍後瀏覽器就會開啟 http://localhost:8080。只要 Docker 正在執行就行,sbom-ui.bat 在 Rancher Desktop 或 Docker Desktop 上都能用(在 WSL2 上請在 WSL 內執行 scan-sbom.sh --ui)。
執行的位置就是輸出的基準目錄,而只有在掃描目標選「目前資料夾」時,才會掃描該資料夾裡的原始碼。使用 GitHub URL、上傳或 Docker 映像檔時,執行位置無關緊要。每次掃描都會存到自己的
{Project}_{Version}/子資料夾;基準目錄的預設值與變更方式請看產出物存放位置。
介面框架¶
介面由橫跨整個寬度的頂端列、放置目前掃描各區段的左側側邊欄,以及內容區組成:
- 頂端列——產品標誌(點了回首頁)、目前的專案、「重新掃描」按鈕(只在仍保有設定的掃描上出現,可用預先填入的開關設定重新掃描同一個目標)、橫跨元件與 CVE 的全域搜尋、掃描管理選單(點選時鐘圖示會展開過去的掃描清單,附有刪除按鈕與前往完整清單的連結)、「新增掃描」按鈕,以及語言 (KO / EN / TW) 與淺色/深色切換。
- 左側側邊欄——最上方是兩個離開目前掃描的具名連結(掃描管理、新增掃描),下方才是目前掃描的各個區段,並歸在清冊、安全、合規、AI 與產出物之下。側邊欄會隨掃描而變:AI 區段只在 AI/ML SBOM 才出現,而每個區段也只在有對應資料時才顯示。視窗較窄時會收合成只剩圖示。沒有開啟任何掃描時,也就是首頁畫面,不會有側邊欄。
- 內容區——首頁(掃描管理)畫面、「新增掃描」表單、執行中的畫面,或當前選定的結果區段。
全域動作(新增掃描、掃描管理)放在頂端列,側邊欄則在區段上方以帶文字的連結重複這兩項,因此結果畫面上永遠看得到一條寫著名字的回頭路。每個導覽元素——標誌、新增掃描、側邊欄的各區段、跳轉卡片與過去掃描的連結——都是有 URL hash (#/scan/<id>/<section>) 支撐的真正連結,因此 Cmd/Ctrl 點擊或中鍵點擊就能在新分頁開啟。
新增掃描¶
「新增掃描」畫面分成兩欄。左欄挑選來源,分成程式碼(目前資料夾、目錄路徑、GitHub URL、ZIP 上傳)、產出物(Docker 映像檔、套件或建置產出物、韌體映像檔)、SBOM(分析既有的 SBOM)與 AI 模型(從 HuggingFace 模型產生 ML-BOM,或上傳你自己的模型檔案),然後在來源方塊下方填入該來源專屬的輸入欄。右欄輸入專案名稱與版本、挑選要產生的產出物,然後開始掃描。
| 掃描目標 | 輸入方式 | 後端模式 |
|---|---|---|
| 目前資料夾 | 掃描介面執行資料夾中的原始碼 | SOURCE |
| 目錄路徑 | 執行資料夾底下的子資料夾(例如 OS rootfs)、以 --ui --mount <dir> 掛載的資料夾,或在桌面版應用程式中以「新增資料夾…」按鈕加入的資料夾 |
ROOTFS;資料夾若是 Yocto 建置目錄,則為 ANALYZE |
| GitHub URL | 輸入儲存庫 URL | SOURCE (clone) |
| ZIP 上傳 | 上傳 .zip/tar 檔案 |
SOURCE (extract) |
| 套件上傳 | 上傳建置產出物——.jar、.war、.ear、.deb、.rpm、.whl |
BINARY(wheel 會先解開封裝,再以 ROOTFS 方式掃描) |
| SBOM 上傳 | 上傳既有的 SBOM(JSON,或 Yocto SPDX 2.2 建置所發佈的 .spdx.tar.zst) |
ANALYZE |
| 韌體上傳 | 上傳 .bin 等檔案 |
FIRMWARE |
| Docker 映像檔 | 輸入映像檔名稱 | IMAGE |
| AI 模型 | 輸入 HuggingFace 模型 id (org/model) |
AIBOM |
| 模型檔案 | 上傳 .gguf、.safetensors、.pt 等(最大 8 GB) |
MODELFILE |
產生選項有開放原始碼授權聲明與安全(弱點)報告。掃描一律以 CycloneDX 寫出 SBOM,SPDX 副本則是在掃描結束後從結果畫面匯出,因此這裡沒有需要事先決定的事。另外還有一個進階掃描選項區段,收攏的是改變原始碼分析方式、而非改變產生哪些檔案的開關。逐檔授權條款掃描 (ScanCode) 會掃過專案自己的原始碼檔案,找出逐檔的授權條款文字(自家程式碼;它不會下載已宣告的相依項目),適用於原始碼掃描(目前資料夾、GitHub URL、ZIP 上傳)。偵測複製進來的開放原始碼 (SCANOSS) 會找出複製進原始碼樹的第三方開放原始碼(主要是 C/C++),同樣適用於原始碼掃描。韌體的進階選項則是更多弱點公告 (OSV)。SCANOSS 使用免費的 OSSKB 服務,該服務有速率限制,頻繁使用時可能得不到結果,因此若要經常執行,請到 scanoss.com 取得權杖填入。Docker 映像檔、SBOM 上傳與 AI 模型沒有進階選項。選擇 SBOM 上傳 (ANALYZE) 時,為進行風險分析會強制開啟授權聲明與安全報告;AI 模型掃描只會產生授權聲明(它沒有套件 CVE,因此略過安全報告)。
可重現的輸出開關會讓每次執行都產生逐位元組完全相同的 SBOM(相當於 CLI 的 --byte-stable);原始碼、映像檔與韌體掃描可以使用,SBOM 分析與 AI 模型則沒有這個選項。
對外授權條款欄位填入你的專案對外發行所採用的 SPDX 識別碼,例如 Apache-2.0(相當於 CLI 的 --license)。填了之後,「授權條款」區段會列出哪些相依項目與它衝突;留空則不做這項檢查,區段也會把這件事直接寫出來。這個欄位只在 BomLens 自行產生 SBOM 時出現,因此分析供應者 SBOM(其中已帶有供應者自己的宣告)與 AI 模型都沒有它。
產出物下方是選用的上傳步驟,可以把完成的 SBOM 送到伺服器。開啟後挑選目的地——Dependency-Track 或 TRUSCA——並輸入伺服器 URL 與存取權杖;TRUSCA 還會要求填入目標專案 id。URL 與權杖只用於本次執行,絕不儲存。這相當於 CLI 的上傳選項,詳見上傳到 Dependency-Track / TRUSCA。
Yocto 建置目錄¶
以「目錄」輸入欄挑選的資料夾若是 Yocto 建置目錄,BomLens 會把它辨識出來:此時不會走訪建置樹,而是分析建置發佈在 tmp/deploy/images/<machine>/ 底下的映像檔 SBOM——建置樹裡放的是 sysroot 與原生建置工具,這些從來不會進到映像檔裡。掃描記錄會寫出它讀了哪個資料夾裡的哪份文件,結果頁面會把這次掃描標示為 Yocto 建置目錄,弱點也會帶著建置本身所做的判定——已由 recipe 修補、判定為不適用,或是仍然未處理。
建置時若設定了產生 SBOM(在 conf/local.conf 加入 INHERIT += "create-spdx-3.0" 與 INHERIT += "vex",需要 5.0 Scarthgap 或更新的版本——4.0 Kirkstone 沒有這個 class),能取得的資訊最完整。SPDX 2.2 也會連同旁邊的 .spdx.tar.zst 一起讀取,只是不帶 CVE 判定;完全沒有 SPDX 的建置,則改讀它所寫出的 manifest。只有三者皆無的建置目錄才會讓掃描停下來,而不是退回目錄掃描——那樣的結果會與映像檔的實際內容不符。行為與限制請看供應者 SBOM 指南;CLI 則透過 --target 辨識同一個資料夾。
掃描進行中¶
執行期間,畫面會顯示管線階段——產生 SBOM、正規化、授權聲明、安全、報告——隨著即時記錄一段段推進,因此你能看到掃描進行到哪裡,也能在錯誤發生的當下就讀到它(clone 失敗、沒有 Docker socket、不支援的檔案)。
結果區段¶
掃描結束後,左側側邊欄會填入該次掃描的各個區段。
總覽一開頭就說明掃描了什麼——資料夾路徑、clone 來源的 URL、容器映像檔參照、上傳的檔案名稱,或 AI 模型 id——因此幾週後再回頭看這份結果,仍然知道這些數字是從哪裡來的。接著是一眼可見的統計數字,做成可跳到各詳細區段的卡片,然後才是需要注意的項目——已知的惡意套件排在最前,接著是格式符合性未通過(分析供應者 SBOM 時)、Critical(嚴重)或 High(高)等級的弱點,以及被標記為需要授權檢視的元件。惡意套件之所以排在最前面,是因為它已經在建置過程中執行,必須直接移除,而不是排進修補計畫。掃描若標記出上游已終止支援的元件,卡片區會多出一個「已終止支援」計數方塊,其中同時有弱點的元件會以風險色顯示(參考元件已終止支援)。另外還有一個方塊統計落後於最新版本的元件數(參考版本新舊)。再往下是並排的兩個風險軸:安全嚴重程度分布與授權分類。點選任一邊的其中一段,就會進到對應的區段(「弱點」或「授權條款」),而且篩選條件已經套用好。
掃描若是在分析縮減的情況下結束——例如 cdxgen 因 Docker 磁碟空間不足而未能執行,SBOM 只好退回僅含直接相依項目——這裡會有橫幅說明原因與該怎麼做。掃描若還在進行,即時記錄會顯示在「總覽」這裡,而不是每個區段底下都有一份。

元件會列出所有偵測到的項目,附有搜尋與篩選(有弱點、僅直接相依、需人工檢視、已終止支援、非最新),以及「範圍」(直接或間接)與「風險」(最嚴重的弱點等級與數量)兩個欄位。內建的 OSV 快照認定為惡意套件的元件會帶上「惡意套件」標記,排在其他標記之前,公告識別碼與快照日期則放在它的提示 (tooltip) 裡。上游已終止支援的元件會帶上「已終止支援」標記,知道終止日期時也一併顯示。不是最新版本的元件會標示為「非最新」;開啟 deps.dev 補充資料 (STALENESS_ENRICH=true) 後,它的詳細資訊還會顯示落後幾個版本以及最後一次發行的日期(參考版本新舊)。大型 SBOM 會分頁顯示。點選資料列即可就地展開詳細資訊——PURL、來源/下載位置、著作權、授權條款,以及所有弱點。詳細資訊裡有弱點時,也會提供連結帶你到已篩選出該元件的「弱點」區段;弱點自己的詳細資訊則有連回「元件」中該套件的連結,因此追查時可以在兩份清單之間來回,不必重新輸入名稱。

弱點先依嚴重程度、再依 CVSS 排序,並提供 CVSS 欄位與修正版本;每一列都能就地展開,顯示 CVSS 向量、說明與參考資料。點選嚴重程度長條中的一段即可篩選出該嚴重程度,也可以用 CVE 或套件名稱搜尋。

相依性會把 SBOM 裡記錄的關聯以關係圖或樹狀呈現。直接相依會被強調,有已知弱點的套件則以其嚴重程度標示。切換到樹狀檢視,就能把直接相依與間接相依展開成階層。

授權條款一開頭是授權分類軸,依 Copyleft 強度把元件分組——網路型 Copyleft (AGPL)、強 Copyleft (GPL)、弱 Copyleft(LGPL、MPL、EPL…)、寬鬆式、需人工檢視與未分類。無法辨識的授權條款絕不會被當成寬鬆式,而是落到未分類,交由人來看。點選某個分類,區段的其餘部分就會篩選成該分類。分類之下是各授權條款的分布——每個授權條款有多少元件宣告,數量多的排在前面,沒有授權條款的那一組放在最後。選了分類會讓這份清單縮小;點選某個授權條款則會開啟已依它篩選的「元件」表格,在那裡還能與類型、範圍和風險篩選一起使用。分布下方,若這次掃描宣告了對外授權條款,會列出條款與它衝突的相依項目——最嚴重的排在前面,每一項都附上判定的理由。這是文件輔助資料,不是法律判定。若未宣告對外授權條款,區段會說明這項檢查沒有執行以及如何開啟,而不是留下一份空清單、讓人誤讀成沒有問題。再往下是條款需要人工檢視的元件——AI 行為限制(RAIL/Llama/Gemma)與非商業授權條款。

SBOM 符合性在你分析既有 SBOM(SBOM 上傳/ANALYZE 模式)時出現,歸在「合規」分組底下。區段開頭有一行說明它衡量的是什麼:這份 SBOM 符合格式與提交要求的程度——一併顯示的法規對照僅供參考,不構成合規判定。它會顯示格式判定——通過或未通過——以及基本的 CycloneDX 檢查(時間戳記、產生工具、最上層元件、名稱與版本涵蓋率、PURL 涵蓋率、間接相依性),每一項未通過的檢查都會列出缺漏的項目,另外還有一份法規對照彙總,說明這些檢查如何對應到法規基準(EU CRA 透過 BSI TR-03183-2、2026 年版的美國 SBOM 最低要素)。被分析的 SBOM 若帶有 machine-learning-model 元件,G7 AI 最低要素檢查(全部為建議性質)會以子區塊的形式出現在這裡,依 G7 的七個分組排列,並標示資料來源——自動(直接讀取)、推斷、已宣告,或在沒有自動化來源時標為需人工檢視。摘要數字與標記的含意由 AI 模型 SBOM 指南說明。

產出物會把產生的檔案(SBOM、授權聲明、風險報告、安全報告、符合性報告)依種類分組列出,可依格式個別下載,也可以打包成單一 ZIP 下載。
原始碼樹顯示的是這次掃描實際看過哪些東西,而不只是它找到了什麼。左邊的樹列出檔案,挑一個就會在旁邊開啟它的內容。只要掃描有檔案可讀,這個區段就會出現:原始碼掃描、目錄或 rootfs 掃描、韌體映像檔(解開封裝之後)、容器映像檔,以及本身是壓縮檔的建置產出物(jar、war、whl、zip、tar)。容器映像檔與壓縮檔沒有可走訪的資料夾,因此 BomLens 會解開一份暫存副本、讀完它,然後在掃描結束前刪除。符號連結會連同它指向的路徑一起列出——在容器映像檔裡,/bin 底下幾乎每個指令都是指向 busybox 的連結,把它們排除掉,樹狀結構看起來就會像那些指令根本不存在。掃描若開啟了逐檔授權條款掃描 (ScanCode),每個檔案還會帶上在其中偵測到的授權條款。
擷取的內容設有上限,好讓掃描的輸出資料夾維持合理大小:只收文字檔,每個檔案最多 256 KB、全部合計 8 MB,並且優先擷取授權條款文字與套件 manifest,讓額度緊縮時留下來的正是判斷結果背後的佐證。畫面上沒有內容的檔案會說明原因——它是二進位檔,或是擷取已達上限——而樹上方那一行會寫出擷取了幾個檔案、又略過了幾個。沒有任何檔案是被無聲丟掉的。
提交的 SBOM在掃描讀取的是他人產生的 SBOM 時出現(SBOM 上傳/ANALYZE)。其他每個畫面描述的都是 BomLens 把該輸入轉換成的 CycloneDX 文件,因此這個區段描述的是輸入文件本身:它以什麼格式與規格版本撰寫、文件名稱與識別碼、建立時間、產生它的工具,以及它所記載的供應者或作者。供應者沒有填寫的欄位會直接省略,而不是留白顯示——在合規畫面上,一個看起來很篤定的錯誤值,代價比缺漏更大。項目本身不會在這裡重複;區段會連到「元件」,那裡列出它們並附有排序、篩選與風險資訊。

該區段的 SBOM 卡片上有一個匯出為 SPDX 2.3按鈕。它會把完成的 CycloneDX BOM 轉換成 {Project}_{Version}_bom.spdx.json 並立刻開始下載,不需要重新掃描。轉換後的檔案會以一般的下載項目加入卡片,也會納入 ZIP;已經有 SPDX 檔案的掃描則不再提供這個按鈕。CycloneDX 仍然是主要格式,只存在於 CycloneDX 的資料(弱點、bomlens:* 屬性)不會一併帶過去。簽章只有 CLI 支援 (--spdx --sign),因此這裡匯出的檔案和介面產生的其他產出物一樣都沒有簽章。
轉換需要 syft。掃描器映像檔內含 syft,因此一般的部署方式會就地完成轉換。syft 不存在時——例如桌面版應用程式的基礎 UI 映像檔——BomLens 會另外啟動掃描器映像檔的容器來做轉換,首次使用時會下載該映像檔一次。兩者都做不到時,按鈕就不會顯示。
AI 專屬區段¶
若是 AI/ML SBOM(帶有 machine-learning-model 元件的 CycloneDX SBOM),側邊欄會多出:
模型與資料集——每張模型卡的識別碼、架構、任務、授權條款、供應者與完整性,一個四軸揭露面板(權重/架構/訓練資料/訓練過程,依 BOM 中記載的程度),以及該模型引用的資料集。SBOM 若帶有模型風險評估,卡片一開頭會顯示整體等級標記(未發現限制訊號/有條件使用/注意/需人工檢視)、各軸判定(授權條款、檔案安全、資料集——未評估的軸會顯示破折號)、等級背後的原因、自訂授權條款摘錄與上游承襲警告(有的話),以及判定所依據的用途;資料集的每一列也各有自己的等級標記。區段最後會提醒:這項評估僅供參考,並非法律意見。AI 模型掃描時,「新增掃描」表單會多出一個使用情境選擇器(內部檢視與研究/產品整合/微調並再散布/僅使用輸出),用來調整這項評估。

G7 AI 最低要素檢查出現在上面的SBOM 符合性區段裡——只有 SBOM 含有模型元件時才會加上。
該區段還會顯示一張 AI 合規概況卡片:把 G7 結果、被標記需檢視授權的元件數,以及法規框架涵蓋範圍(EU AI Act、韓國 AI 基本法)彙整成一覽摘要。它僅供參考,不是認證,同一份資料也會寫入 _ai-profile 檔案(參考產出物)。
掃描管理¶
首頁畫面可以從側邊欄的「掃描管理」連結、標誌,或頂端列的掃描管理(時鐘)選單開啟,它會列出這台機器上儲存的所有過去掃描。輸出基準目錄底下每個掃描的 {Project}_{Version}/ 子資料夾就是一筆項目。搜尋框與掃描類型篩選標籤(只列出實際存在的類型——原始碼、容器、RootFS、韌體、AI 模型、SBOM)可以縮小清單。類型取自這次掃描指向的對象;若這樣還無法確定,才看 SBOM 宣告的根元件——分析供應者文件時會判讀為 SBOM,而不是它的根元件通常自稱的「原始碼」。三張摘要卡片顯示掃描總數、其中有幾筆有風險(點這張卡片就會篩選出它們),以及專案數。表格可依掃描、產生時間、元件或最高嚴重程度排序。點選資料列可重新開啟該筆結果,刪除則會移除它的子資料夾——刪除前會先跳出確認,因為檔案會從磁碟移除,而且沒有留下任何可還原的副本。這裡只用本機檔案——沒有帳號,也沒有資料庫。
補充說明¶
只要 Docker 引擎正在執行,韌體上傳方塊就會自動出現。運作方式以及如何改指向其他映像檔標籤, 請看韌體指南。
注意:介面的原始碼掃描(目前資料夾/ZIP/GitHub)是在容器內以 syft 分析目錄。只有存在鎖定檔(
package-lock.json、go.sum等)或已安裝的相依項目時,才會擷取到元件。如果你只有資訊清單 (manifest) 而需要更深入的解析,請改用 CLI 的原始碼模式 (cdxgen)。
變更連接埠/發生衝突時:預設連接埠 (8080) 已被其他服務占用時,請指定不同的連接埠:
從其他機器連上介面:介面只發佈在 loopback 介面上,因此只在啟動它的那台機器上回應。它是透過引擎 socket 執行掃描,這也是預設不對外開放到網路的原因。如果確實需要在別處使用,請設定綁定位址,並在它前面架一層會做身分驗證的代理伺服器:
注意:介面雖然簡單,仍然必須先安裝並啟動 Docker 引擎(免費方案:WSL2 + docker-ce,或 Rancher Desktop)。啟動程式會偵測到 Docker 未安裝或未執行,並顯示安裝連結。