[研究]Mend (WhiteSource) 又來第五次修改建議
2026-06-05
(完)
[研究]Mend (WhiteSource) 建議錯誤,改錯程式了
2026-06-05
原來是用迴圈組字串,每一個 T-SQL 字串某些變數是從資料庫撈出,所以每個字串的該變數值不同;
Mend 修改後,
while 迴圈後才把最終資料庫中值丟給變數,造成每個字串的該變數值都相同,執行結果錯誤。
(完)
[研究]Mend (WhiteSource) 弱點掃描工具結果是否不固定?
2026-06-05
Mend (WhiteSource) 弱點掃描工具結果是否不固定? 掃描時會即時自某些平台抓取弱點資訊 ? 或定時自某些平台抓取弱點資訊 ? 所以相同 原始碼專案,不同時間掃描結果可能不固定?
*****
是的,Mend(原 WhiteSource)相同原始碼專案在不同時間掃描,結果可能不完全相同,這是正常現象。
原因在於 Mend 的弱點資料庫會持續更新,而不是永遠固定不變。
例如:
| 時間 | 專案版本 | 結果 |
|---|---|---|
| 6/1 | log4j 2.17.0 | 無漏洞 |
| 6/10 | log4j 2.17.0 | 發現 1 個漏洞 |
| 6/20 | log4j 2.17.0 | 發現 2 個漏洞 |
| 7/1 | log4j 2.17.0 | 其中 1 個漏洞被撤銷 |
(完)
[研究]Mend (WhiteSource) 第三次建議修改了
2026-06-05
已經照建議改過2次了,結果又來了第3次,每次都說有弱點 (雖然是 Low),都建議修改。
原本
if (Uri.TryCreate(redirect, UriKind.Relative, out Uri targetUri))
第1次建議修改為
if (Uri.TryCreate(redirect, UriKind.Relative, out Uri targetUri) && targetUri.IsAbsoluteUri && targetUri.Host == Request.Url.Host)
第2次建議修改為
if (Uri.TryCreate(redirect, UriKind.Relative, out Uri targetUri) && !targetUri.IsAbsoluteUri)
=====
Remediation Description
The code is vulnerable to an Open Redirect attack (CWE-601). Added a check to ensure that the URL is a local URL before redirecting.
第3次建議修改為
if (Uri.TryCreate(redirect, UriKind.Relative, out Uri targetUri) && !targetUri.IsAbsoluteUri && targetUri.ToString().StartsWith("/"))
(完)
[研究]ASP.NET WebForm 的 Libman 會像 NuGet 判斷是否有新版 ? 相依性 ?
2026-06-05
因為有的前端js元件,NuGet沒有提供最新版,甚至不再提供更新了;而Libman有提供,故研究一下。
ASP.NET WebForm 的 Libman 會像 NuGet 判斷是否有新版 ? 相依性 ?
*****
不會,LibMan(Library Manager) 和 NuGet 的設計目標不同。
LibMan 會判斷是否有新版嗎?
部分可以,但能力有限。
{
"provider": "cdnjs",
"library": "jquery@3.7.1",
"destination": "wwwroot/lib/jquery/"
}
|
在 Visual Studio 中管理 libman.json 時,可以看到目前安裝版本與可選版本,例如:
Visual Studio 可能提示有較新版本(如 3.7.2),但:
本質上只是從 CDN 提供者(如 cdnjs、unpkg、jsDelivr)查詢可用版本。
**********
LibMan 會處理相依性(Dependency)嗎?
基本上不會。
例如:
{
"library": "bootstrap@5.3.8"
}
|
Bootstrap 可能需要:
|
LibMan 只會下載你指定的檔案:
|
但不會:
這些都是 NuGet 或 NPM 的工作。
**********
NuGet 與 LibMan 差異
| 功能 | LibMan | NuGet |
|---|---|---|
| 下載前端 JS/CSS | ✔ | 可但不建議 |
| 下載 .NET DLL | ✘ | ✔ |
| 相依性解析 | ✘ | ✔ |
| 版本衝突檢查 | ✘ | ✔ |
| 安全性弱點分析 | ✘ | ✔ |
| 自動升級相依套件 | ✘ | ✔ |
| Package Graph | ✘ | ✔ |
| transitive dependency | ✘ | ✔ |
ASP.NET WebForm 專案中常見的第三方前端元件管理方式比較:
| 項目 | LibMan | NuGet | NPM |
|---|---|---|---|
| 主要用途 | 下載前端 JS/CSS 檔案 | 管理 .NET 套件 | 管理前端套件 |
| 適合 WebForm | ★★★★★ | ★★★★☆ | ★★☆☆☆ |
| 需安裝 Node.js | ✘ | ✘ | ✔ |
| Visual Studio 原生支援 | ✔ | ✔ | 部分 |
| 自動下載相依套件 | ✘ | ✔ | ✔ |
| 相依性衝突檢查 | ✘ | ✔ | ✔ |
| 版本管理能力 | 基本 | 完整 | 完整 |
| 可查看可升級版本 | 部分 | ✔ | ✔ |
| 套件鎖定版本 | ✔ | ✔ | ✔ |
| 支援 Transitive Dependency | ✘ | ✔ | ✔ |
| 支援 Semantic Version | 有限 | ✔ | ✔ |
| 安全性弱點分析 | ✘ | ✔ | ✔ |
| Dependency-Track 掃描 | 較差 | 良好 | 良好 |
| Mend/WhiteSource 掃描 | 較差 | 良好 | 良好 |
| 離線建置 | ✔ | ✔ | 需先下載 |
| 學習門檻 | 低 | 低 | 高 |
| 維護成本 | 低 | 中 | 高 |
範例
| 需求 | LibMan | NuGet | NPM |
|---|---|---|---|
| 安裝 jQuery | jquery@3.7.1 |
Install-Package jQuery |
npm install jquery |
| 安裝 Bootstrap | bootstrap@5.3.x |
Install-Package bootstrap |
npm install bootstrap |
| 自動安裝相依套件 | ✘ | ✔ | ✔ |
| 更新指令 | 手動修改版本 | Update-Package | npm update |
實務建議
| 情境 | 建議 |
|---|---|
| 傳統 ASP.NET WebForm 維護案 | LibMan 或 NuGet |
| 公司要求 SCA(Mend、DT)完整掃描 | NuGet 優先 |
| 新開發且有前端工程流程 | NPM |
| 只想放 jQuery、Bootstrap 幾個檔案 | LibMan 最簡單 |
| 需要完整相依性管理與弱點追蹤 | NuGet 或 NPM |
若 WebForm 專案需要通過 OWASP Dependency-Track 或 Mend 稽核,我通常會建議:
| 類型 | 建議 |
|---|---|
| .NET 元件 | NuGet |
| JavaScript/CSS 元件 | NPM(最佳)或 NuGet |
| LibMan | 僅作為靜態檔案下載工具,不建議作為企業級元件管理機制 |
因為 LibMan 本質上只是把檔案下載到專案中,對於弱點追蹤、SBOM、相依性分析都遠不如 NuGet 或 NPM。
(完)
[研究]OWASP Dependency Track (DT) 元件弱點掃描工具結果是否不固定
2026-06-05
OWASP Dependency Track (DT) 元件弱點掃描工具,掃描時會即時自某些平台抓取元件弱點資訊 ? 或定時自某些平台抓取元件弱點資訊 ? 所以相同 原始碼專案,不同時間掃描結果可能不固定?
*****
是的,OWASP Dependency-Track(DT)對同一套原始碼、同一份 BOM(SBOM),在不同時間掃描,結果可能不同,這是正常現象。
Dependency-Track 本身不會在每次掃描時即時到各弱點平台查詢,而是透過背景工作(Background Tasks)定期同步弱點資料庫,之後再將已同步的弱點資料與您的元件進行比對。
DT 主要弱點來源
常見來源包括:
DT 的運作方式
一般流程:
|
因此:
為什麼相同專案結果會變化?
即使原始碼完全沒改,也可能出現:
1. 新 CVE 公布
例如:
|
專案沒變,但弱點資料庫變了。
2. CPE 比對規則修正
NVD 或 DT 的 Matching 規則可能更新。
例如原本:
|
後來:
|
3. CVSS 分數變動
某 CVE 可能被重新評分:
|
掃描結果的風險等級就會改變。
4. GHSA / OSS Index 新增 Advisory
有些弱點先出現在 GHSA:
|
甚至 NVD 還沒收錄。
5. BOM 解析器升級
Dependency-Track 或 BOM Parser 升級後:
結果也可能增加或減少弱點。
結論
對於 Dependency-Track:
| 情況 | 掃描結果是否可能改變 |
|---|---|
| 原始碼相同 | 是 |
| 套件版本相同 | 是 |
| BOM 相同 | 是 |
| DT 弱點資料庫更新 | 會改變 |
| NVD/GHSA 新增 CVE | 會改變 |
| CPE Mapping 修正 | 會改變 |
| DT 升級 | 可能改變 |
因此在實務上:
Dependency-Track 的掃描結果代表「目前已知的弱點狀態」,而不是「建立 SBOM 當時的弱點狀態」。
所以同一個專案今天掃描是 10 個弱點,一個月後重新分析可能變成 15 個,也可能因誤判修正而變成 8 個,這都屬於正常現象。
(完)
[研究]sa帳號可以刪除嗎 ? (SQL Server 2019)
2026-06-04
Principals (Database Engine)
https://learn.microsoft.com/en-in/sql/relational-databases/security/authentication-access/principals-database-engine?view=sql-server-ver17
The sa login can't be dropped, but it can be disabled so that no one can use it.
sa 登入不能刪除,但可以停用,這樣就沒人能用了。
sp_droplogin
https://documentation.help/tsqlref/ts_sp_drop_2q0e.htm
A login mapped to an existing user in any database cannot be removed. The user must be removed first by using sp_dropuser. Additionally, these logins cannot be removed:
* The system administrator (sa) login.
已對應到任何資料庫中現有使用者的登入名稱無法刪除。必須先使用 sp_dropuser 刪除該使用者。此外,以下登入名稱也無法刪除:
* 系統管理員 (sa) 登入名稱。
結論:sa 可以改名、停用,但刪除不掉。
(完)
[研究]administrator帳號可以刪除嗎? (Windows Server 2025)
2026-06-04
有人說,為了安全,另外建系統管理員帳號,把預設的administrator帳號刪除吧。
能停用,不等於可以刪除;能刪除,也未必保證系統能正常;不管如何,測試看看。
(1)以 administrator 帳號登入,刪除自己。
結論,作業系統直接拒絕刪除 administrator 帳號。
********************************************************************************
本機帳戶
https://learn.microsoft.com/zh-tw/windows/security/identity-protection/access-control/local-accounts
預設的本地使用者帳號
預設的本地使用者帳號是作業系統安裝時自動建立的內建本地使用者帳號。 你無法移除或刪除預設的本地使用者帳號。
系統管理員
你無法刪除或鎖定預設的管理員帳號。 不過,你可以重新命名或停用它。
********************************************************************************
(完)
[研究]ASP.NET WebForm 方案,搜尋甚麼字串 可知有使用 js.cookie 套件 ?
2026-06-03
NuGet 只到 2.2.1 版
https://www.nuget.org/packages/js-cookie/3.0.0-rc1#versions-body-tab
GitHub到 3.0.8 版
https://github.com/js-cookie/js-cookie/releases
ASP.NET WebForm 方案,搜尋甚麼字串 可知有使用 js.cookie 套件 ?
******
快速判斷是否有使用 js-cookie 套件,可以搜尋以下幾類關鍵字。
1. 搜尋 Cookies.(最有效)
js-cookie v2/v3 最常見用法:
|
直接搜尋:
|
或個別搜尋:
|
例如:
|
2. 搜尋 js.cookie
很多專案會直接引用檔案名稱:
|
搜尋:js.cookie
3. 搜尋 CDN 路徑
常見引用:
|
搜尋:
|
4. 搜尋 NuGet / LibMan 安裝痕跡
packages.config
可能有:
|
搜尋:js-cookie
libman.json可能有
|
搜尋:js-cookie
5. 搜尋實體檔案名稱
在 Visual Studio 的「搜尋檔案」或檔案總管搜尋:
|
常見位置:
|
6. 搜尋 BundleConfig
Web Forms/MVC 專案可能透過 Bundle 載入:
|
搜尋:js.cookie 或:cookie.min.js
7. 注意可能的誤判
有些專案沒有用 js-cookie,而是原生 Cookie:
|
這種情況搜尋:document.cookie即可找到。
建議在整個 Solution 搜尋
依序搜尋:
|
其中 Cookies. 通常是判斷專案是否使用 js-cookie 套件最快、最準確的關鍵字。因為 js-cookie 的 API 幾乎都透過全域物件 Cookies 呼叫。
(完)
[研究]Mend (WhiteSource) 硬把組字串查詢轉成參數化查詢,導致結果錯誤
2026-06-01
雖然組字串查詢在資安角度並不推薦,源碼掃描都會報告出來,因為掃描工具無法判斷來源是否安全;但因此段是2分鐘和3小時差異,且來源是資料庫 (若不安全,該先檢討寫入資料庫那段);Mend 硬拆開,在 while 迴圈後 AddWithValue,結果插入的每一筆值都相同,是錯誤的。