跳轉到

網頁介面與桌面版應用程式

不用 CLI,直接從瀏覽器掃描。介面伺服器已內建在掃描器映像檔裡,不需要額外安裝。

BomLens 的「新增掃描」畫面

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 或套件名稱搜尋。

弱點——CVSS 欄位與可展開的資料列

相依性會把 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 指南說明。

符合性——格式判定與 G7 建議子區塊

產出物會把產生的檔案(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 匯出按鈕

該區段的 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) 已被其他服務占用時,請指定不同的連接埠:

UI_PORT=9090 ./scripts/scan-sbom.sh --ui      # http://localhost:9090

從其他機器連上介面:介面只發佈在 loopback 介面上,因此只在啟動它的那台機器上回應。它是透過引擎 socket 執行掃描,這也是預設不對外開放到網路的原因。如果確實需要在別處使用,請設定綁定位址,並在它前面架一層會做身分驗證的代理伺服器:

UI_BIND_ADDRESS=0.0.0.0 ./scripts/scan-sbom.sh --ui

注意:介面雖然簡單,仍然必須先安裝並啟動 Docker 引擎(免費方案:WSL2 + docker-ce,或 Rancher Desktop)。啟動程式會偵測到 Docker 未安裝或未執行,並顯示安裝連結。