前端安全稽核(任務 dfl/day4-frontsec-scan)
工作區 README.md 中的 45 條規則均為機械化規則,已在此資料夾的 solve.mjs 中實作。
請勿手動計算、解碼 JWT 或直接閱讀 Cookie。請執行腳本。
逐步操作
-
在工作區根目錄執行:
node .opencode/skills/frontsec/solve.mjs它會讀取
casos/中的所有資料夾,並為每個案例寫入一個out/<case>.json。若只想執行單一案例:node .opencode/skills/frontsec/solve.mjs exemplo-2。 -
執行
node .opencode/skills/checar-saida/check.mjs。 -
如果存在
tests/public,請執行npx vitest run tests/public。 -
如果全部通過,請停止。請勿手動編輯
out/中的任何檔案。
若出現錯誤
-
請勿編輯
.opencode/、tests/、casos/、README.md或package*.json。 任何out/以外的檔案被修改都會導致分數歸零。 -
若要修正腳本,請將其複製到
/tmp並編輯複本:cp .opencode/skills/frontsec/solve.mjs /tmp/solve.mjs node /tmp/solve.mjs該複本仍會從目前所在資料夾讀取
casos/並寫入out/。 -
閱讀測試訊息,在
README.md中找到涵蓋該欄位的規則,並僅修正對應的函式:scanLine/scanHeaders(階段 1)、dependencias(階段 2)、sessao(階段 3)、plano(階段 4)。 最多 3 個週期。若仍未通過,請保留腳本產生的最佳輸出。
腳本的保證內容(必要時可對照 README.md 確認)
- 階段 1: 掃描整個
dist/目錄,包含子資料夾。僅讀取.js和.html檔案,逐行掃描,註解亦計入。- 金鑰僅在完全符合下列格式時才計入:
pf_live_/pf_test_+ 24 個或更多[A-Za-z0-9],或nvm_sec_+ 32 個十六進位字元。pf_pub_、nvm_pub_和佔位符一律不計。 - JWT:Payload 以 base64url 解碼。
role為anon或usuario視為公開。任何其他值,或缺少role,則觸發 FS03。 - FS04:Sink 僅在來源文字直接寫在直到
;的程式碼片段中時才計入。FS05:(後的第一個字元不能是引號(反引號亦算)。FS11:.map必須存在(從該.js所在資料夾解析),或為data:。 - CSP:僅計入
script-src,若無則計入default-src。忽略Report-Only。HSTS 需要max-age≥ 31536000。 - 重複的三元組(
regra、arquivo、linha)只計一次。若存在 FS01 或 FS03,則評分為F。
- 金鑰僅在完全符合下列格式時才計入:
- 階段 2: 如同 Node.js 方式解析,向上搜尋
node_modules,根目錄為dependencies+devDependencies。- 路徑選取最短者,若長度相同則選字串順序較小者。版本號以數值方式比較。範圍支援
||。 correcao為已安裝版本以上、且不觸發任何警告的最小已發布版本。navegador要求在.js檔案中包含/*! 名稱@版本的標頭。
- 路徑選取最短者,若長度相同則選字串順序較小者。版本號以數值方式比較。範圍支援
- 階段 3:
- 屬性不區分大小寫。網域名稱不含起始的
.,預設路徑取自該步驟的caminho。 Max-Age優先於Expires。生命週期 ≤ 0 視為移除。- 7 個問題依清單順序列出。
nao_removido_no_logout要求在logout步驟中移除具相同身分識別的 Cookie。
- 屬性不區分大小寫。網域名稱不含起始的
- 階段 4:
- 項目為:
cred:、cod:、hdr:、dep:和cookie:。dep:項下計算在包含弱點套件標頭的.js檔案中發現的 FS04 和 FS05。 - 例外判斷順序:不存在的項目優先,其次為嚴重,最後為已過期。
- 優先級計算方式為
⌊點數 × 10 ÷ 努力值⌋。排序規則:先依優先級,其次依點數,最後依 ID。
- 項目為: