@extends('layouts.app') @section('title', '掃描報告 — ' . $vulnScan->target_url) @section('content')
返回掃描清單
@if($vulnScan->status === 'done') 匯出 PDF @if($vulnScan->scanner_type === 'zap') @endif 重新掃描 @endif
@csrf @method('DELETE')
{{-- 基本資訊 --}}
目標 URL
{{ $vulnScan->target_url }}
掃描工具
{{ $vulnScan->scannerLabel() }}
@if($vulnScan->scanner_type === 'nuclei') {{ $vulnScan->profile }} @elseif($vulnScan->scanner_type === 'garak') {{ $vulnScan->scan_mode }} @if($vulnScan->llm_model)
{{ $vulnScan->llm_model }}
@endif @elseif($vulnScan->scan_mode) {{ $vulnScan->scan_mode }} @endif @if($vulnScan->scanner_version)
v{{ $vulnScan->scanner_version }}
@endif
狀態
@if($vulnScan->status === 'done') 完成 @elseif($vulnScan->status === 'running') 執行中 @elseif($vulnScan->status === 'failed') 失敗 @else 待執行 @endif
開始時間
{{ $vulnScan->started_at?->format('Y-m-d H:i:s') ?? '—' }}
結束時間
{{ $vulnScan->finished_at?->format('Y-m-d H:i:s') ?? '—' }}
@if($vulnScan->durationSeconds() !== null)
耗時
@php $sec = $vulnScan->durationSeconds(); $dur = $sec >= 60 ? floor($sec/60).'m '.($sec%60).'s' : $sec.'s'; @endphp
{{ $dur }}
@endif
{{-- 即時進度(執行中) --}} @if(in_array($vulnScan->status, ['pending', 'running']))
掃描進行中 每 5 秒更新
{{-- 統計列 --}}
模板: 請求: 發現:0 執行:
{{-- 終端 log --}}
等待輸出…
@endif @if($vulnScan->status === 'failed' && $vulnScan->error_log)
錯誤訊息:
{{ $vulnScan->error_log }}
@endif @php $isGarakMode = ($vulnScan->scanner_type === 'garak'); @endphp @if($vulnScan->status === 'done') {{-- ════ Garak 專用摘要區塊 ════ --}} @if($isGarakMode) @php $gSum = $vulnScan->summary ?? []; $gBySev = $gSum['by_severity'] ?? []; $gLlmOwasp = $gSum['by_llm_owasp'] ?? []; $gModel = $gSum['llm_model'] ?? $vulnScan->llm_model ?? '—'; $gTotal = $gSum['total'] ?? 0; $gLlmDetail = [ 'LLM01:2025'=>['name'=>'提示注入', 'color'=>'danger'], 'LLM02:2025'=>['name'=>'敏感資訊洩漏', 'color'=>'danger'], 'LLM05:2025'=>['name'=>'不當輸出處理', 'color'=>'warning'], 'LLM06:2025'=>['name'=>'過度自主行為', 'color'=>'warning'], 'LLM07:2025'=>['name'=>'系統提示詞洩漏', 'color'=>'info'], 'LLM09:2025'=>['name'=>'錯誤資訊', 'color'=>'secondary'], ]; @endphp
Garak LLM 安全評估
對目標模型 {{ $gModel }} 進行 OWASP LLM Top 10 2025 行為安全測試。 Garak 直接與模型對話,發送對抗性提示,評估模型是否存在提示注入、越獄、資料洩漏等風險。
{{-- 統計卡 --}}
{{ $gTotal }}
測試失敗
@foreach(['high'=>['warning','高風險'],'medium'=>['info','中風險'],'low'=>['primary','低風險']] as $sev=>[$col,$lbl])
{{ $gBySev[$sev] ?? 0 }}
{{ $lbl }}
@endforeach
{{-- OWASP LLM Top 10 對應 --}} @if(!empty($gLlmOwasp))
OWASP LLM Top 10 2025 測試結果
@foreach($gLlmDetail as $lid => $lm) @php $cnt = $gLlmOwasp[$lid] ?? 0; @endphp
{{ $lid }} {{ $lm['name'] }} @if($cnt > 0) {{ $cnt }} @else 通過 @endif
@endforeach
@endif @endif {{-- isGarakMode --}} {{-- 統計卡片 --}} @php $sum = $vulnScan->summary ?? []; $bySev = $sum['by_severity'] ?? []; $byOwasp = $sum['by_owasp'] ?? []; $byLlmOwasp = $sum['by_llm_owasp'] ?? []; $exposedEndpoints = $sum['exposed_llm_endpoints'] ?? []; $total = $sum['total'] ?? 0; $pagesScanned = $sum['pages_scanned'] ?? null; $isAiMode = ($vulnScan->scan_mode === 'ai'); $isGarakMode = ($vulnScan->scanner_type === 'garak'); $sevMeta = [ 'critical' => ['label' => 'Critical', 'bg' => 'danger', 'icon' => 'bi-bug-fill'], 'high' => ['label' => 'High', 'bg' => 'warning', 'icon' => 'bi-exclamation-triangle-fill', 'text' => 'dark'], 'medium' => ['label' => 'Medium', 'bg' => 'info', 'icon' => 'bi-dash-circle-fill', 'text' => 'dark'], 'low' => ['label' => 'Low', 'bg' => 'primary', 'icon' => 'bi-info-circle-fill'], 'info' => ['label' => 'Info', 'bg' => 'secondary','icon' => 'bi-info-circle'], ]; // OWASP Top 10 2021 詳細說明 $owaspDetail = [ 'A01:2021' => ['name'=>'存取控制失效','desc'=>'使用者被允許執行超出其預期權限的操作,可能導致未授權的資料讀取、修改或刪除。','color'=>'danger'], 'A02:2021' => ['name'=>'加密機制失效','desc'=>'與加密相關的失敗,通常導致敏感資料暴露。包括明文傳輸、弱加密演算法、不安全的金鑰管理。','color'=>'danger'], 'A03:2021' => ['name'=>'注入式攻擊','desc'=>'攻擊者向直譯器發送惡意資料,如 SQL、OS 命令、LDAP 注入。可能導致資料竊取、資料損毀或完整系統入侵。','color'=>'danger'], 'A04:2021' => ['name'=>'不安全設計','desc'=>'設計階段缺乏安全考量,包括缺乏威脅建模、不安全的設計模式、無法防禦業務邏輯攻擊。','color'=>'warning'], 'A05:2021' => ['name'=>'安全設定錯誤','desc'=>'包括不安全的預設設定、不完整的設定、開放式雲端存儲、錯誤的 HTTP 標頭、詳細的錯誤訊息等。','color'=>'warning'], 'A06:2021' => ['name'=>'易受攻擊與過時的元件','desc'=>'使用有已知漏洞的函式庫、框架或其他軟體模組,可能破壞應用程式的防禦,導致嚴重影響。','color'=>'warning'], 'A07:2021' => ['name'=>'身分驗證失效','desc'=>'與身分驗證和工作階段管理相關的弱點,允許攻擊者入侵密碼、金鑰或工作階段令牌。','color'=>'warning'], 'A08:2021' => ['name'=>'軟體及資料完整性失效','desc'=>'未驗證完整性的軟體更新、關鍵資料及 CI/CD 管道,如反序列化漏洞。','color'=>'info'], 'A09:2021' => ['name'=>'安全記錄及監控失效','desc'=>'缺乏足夠的記錄和監控,導致無法偵測攻擊、無法及時響應,使攻擊者能長期潛伏。','color'=>'secondary'], 'A10:2021' => ['name'=>'伺服器端請求偽造','desc'=>'應用程式在未驗證使用者提供的 URL 的情況下發送請求,攻擊者可利用此存取內部服務。','color'=>'info'], ]; // OWASP LLM Top 10 2025 詳細說明 $llmOwaspDetail = [ 'LLM01:2025' => [ 'name' => '提示注入', 'en' => 'Prompt Injection', 'color' => 'danger', 'desc' => '攻擊者透過精心設計的輸入操控 LLM 的行為,繞過安全規則或執行非預期指令。直接注入:使用者直接覆蓋系統提示;間接注入:透過外部資料(網頁、文件)嵌入惡意指令。', 'impact'=> '可能導致 LLM 洩漏機密系統提示、執行未授權操作、產生有害內容或被用作攻擊跳板。', 'sol' => '實作輸入驗證與過濾;使用特權層級分離系統提示與使用者輸入;採用 RAG 架構限制模型存取範圍;對模型輸出進行後處理驗證。', 'ref' => 'https://owasp.org/www-project-top-10-for-large-language-model-applications/', ], 'LLM02:2025' => [ 'name' => '敏感資訊洩漏', 'en' => 'Sensitive Information Disclosure', 'color' => 'danger', 'desc' => 'LLM 在回應中意外揭露機密資料,包括個人資訊(PII)、企業商業機密、訓練資料內容、API 金鑰或系統架構細節。根本原因常為缺乏輸出過濾或訓練資料清理不足。', 'impact'=> '可能違反 GDPR/個資法,洩漏商業機密,或讓攻擊者取得進一步攻擊所需的認證資訊。', 'sol' => '對輸出內容進行 PII 偵測與遮蔽;設定系統提示明確禁止洩漏機密;定期稽核訓練資料;實作輸出過濾器攔截敏感模式(如 API Key、帳號密碼格式)。', 'ref' => 'https://owasp.org/www-project-top-10-for-large-language-model-applications/', ], 'LLM03:2025' => [ 'name' => '供應鏈漏洞', 'en' => 'Supply Chain Vulnerabilities', 'color' => 'warning', 'desc' => 'LLM 應用依賴的第三方元件(預訓練模型、套件、外掛、資料集)存在安全風險。包括使用未經驗證的模型、含後門的微調資料集、或有漏洞的整合套件。', 'impact'=> '攻擊者可透過供應鏈植入惡意邏輯,影響模型行為或取得應用程式執行權限。', 'sol' => '使用受信任來源(Hugging Face Model Card 驗證);定期掃描依賴套件漏洞;簽署並驗證模型檔案雜湊;維護 SBOM(軟體物料清單)。', 'ref' => 'https://owasp.org/www-project-top-10-for-large-language-model-applications/', ], 'LLM04:2025' => [ 'name' => '資料與模型投毒', 'en' => 'Data and Model Poisoning', 'color' => 'warning', 'desc' => '訓練資料或微調資料遭到惡意篡改,導致模型在特定觸發條件下產生有偏差或有害的輸出(後門攻擊)。也包括推論期間透過 RAG 注入惡意資料。', 'impact'=> '可導致模型在特定觸發詞下輸出有害內容、繞過安全過濾器,或在分類/決策場景中產生偏誤結果。', 'sol' => '驗證訓練資料來源與完整性;使用差分隱私技術;定期以紅隊測試評估模型行為;監控推論結果異常分布。', 'ref' => 'https://owasp.org/www-project-top-10-for-large-language-model-applications/', ], 'LLM05:2025' => [ 'name' => '不當輸出處理', 'en' => 'Improper Output Handling', 'color' => 'warning', 'desc' => '應用程式未充分驗證或清理 LLM 的輸出,直接將其傳遞到後端元件(資料庫、Shell、瀏覽器)。可能造成 XSS、SQL Injection、命令注入等二次攻擊。', 'impact'=> '若 LLM 輸出被用於動態 SQL 查詢、Shell 命令或 HTML 渲染,攻擊者可能透過提示注入間接觸發遠端程式碼執行。', 'sol' => '對 LLM 輸出進行嚴格的輸出編碼(HTML encode、參數化查詢);視 LLM 輸出為不受信任的使用者輸入;使用 Content Security Policy 防止 XSS。', 'ref' => 'https://owasp.org/www-project-top-10-for-large-language-model-applications/', ], 'LLM06:2025' => [ 'name' => '過度自主行為', 'en' => 'Excessive Agency', 'color' => 'warning', 'desc' => 'LLM 代理(Agent)被授予過多的權限或自主能力,超出完成任務所需範圍。包括存取過多工具、可執行高影響操作(刪除資料、發送郵件、呼叫外部 API)而無需確認。', 'impact'=> '攻擊者可透過提示注入誘使 LLM Agent 執行高危操作,如資料刪除、帳號修改、SSRF 到內部服務。', 'sol' => '採用最小權限原則,僅授予任務所需的最小工具集;對高影響操作要求人工確認;限制 Agent 的外部網路存取範圍;記錄並稽核所有 Agent 操作。', 'ref' => 'https://owasp.org/www-project-top-10-for-large-language-model-applications/', ], 'LLM07:2025' => [ 'name' => '系統提示詞洩漏', 'en' => 'System Prompt Leakage', 'color' => 'info', 'desc' => '透過精心設計的查詢誘使 LLM 揭露其系統提示詞內容,可能洩漏業務邏輯、安全規則、API 端點、或應用程式架構資訊。', 'impact'=> '攻擊者可利用洩漏的系統提示詞設計更精準的繞過攻擊,或取得敏感的業務規則與設定資訊。', 'sol' => '不在系統提示詞中存放敏感認證或 API 金鑰;指示模型不揭露系統提示內容;使用提示詞加密或間接引用設定;定期測試模型對提示詞揭露請求的回應。', 'ref' => 'https://owasp.org/www-project-top-10-for-large-language-model-applications/', ], 'LLM08:2025' => [ 'name' => '向量與嵌入弱點', 'en' => 'Vector and Embedding Weaknesses', 'color' => 'info', 'desc' => 'RAG(檢索增強生成)架構中的向量資料庫或嵌入模型存在安全弱點,包括向量反轉攻擊(從嵌入還原原始文本)、不當存取控制導致跨使用者資料洩漏。', 'impact'=> '可能導致機密文件內容洩漏給未授權使用者,或攻擊者透過相似度搜尋推斷其他使用者的敏感資料。', 'sol' => '實作嚴格的向量資料庫存取控制(依使用者/角色隔離);使用加密儲存向量;定期稽核 RAG 的檢索結果是否符合授權範圍。', 'ref' => 'https://owasp.org/www-project-top-10-for-large-language-model-applications/', ], 'LLM09:2025' => [ 'name' => '錯誤資訊', 'en' => 'Misinformation', 'color' => 'secondary', 'desc' => 'LLM 產生看似可信但實際上不正確的資訊(幻覺),用於醫療、法律、財務等高風險決策場景時可能造成嚴重後果。也包括對抗性攻擊刻意誘導模型輸出錯誤資訊。', 'impact'=> '在高影響決策場景中(醫療診斷、法律建議)可能導致實際傷害;也可被用於散佈虛假資訊。', 'sol' => '提供引用來源強化回應可驗證性;對關鍵輸出進行人工審核;在 UI 上明確標示 AI 生成內容;使用 RAG 接地模型回應至可信資料來源。', 'ref' => 'https://owasp.org/www-project-top-10-for-large-language-model-applications/', ], 'LLM10:2025' => [ 'name' => '無限制資源消耗', 'en' => 'Unbounded Consumption', 'color' => 'secondary', 'desc' => '缺乏對 LLM 推論請求的速率限制、Token 用量上限或並發控制,攻擊者可發動 DoS 攻擊耗盡計算資源,或利用大量請求造成高額 API 費用(帳單炸彈)。', 'impact'=> '可導致服務中斷、雲端費用異常飆升,或透過大量平行請求提取訓練資料(模型反轉)。', 'sol' => '實作請求速率限制(Rate Limiting)與 Token 配額;設定單次請求最大 Token 上限;監控異常使用模式並自動封鎖;使用 API Gateway 統一管理請求流量。', 'ref' => 'https://owasp.org/www-project-top-10-for-large-language-model-applications/', ], ]; // ZAP 常見 plugin 說明(description + solution)— 與 pdf.blade.php 共用單一來源 $zapPlugins = \App\Services\ZapService::pluginInfo(); $sevRiskDesc = [ 'critical' => '嚴重漏洞:可直接被遠端利用,無需授權即可取得系統控制權或存取敏感資料。建議立即(24 小時內)修復。', 'high' => '高風險漏洞:可能造成重大損害,如資料洩漏、身分驗證繞過。需要一定條件才能被利用。建議 7 天內修復。', 'medium' => '中等風險:單獨利用危害有限,但可與其他漏洞組合使用。常見如 XSS、CSRF、資訊洩漏。建議 30 天內修復。', 'low' => '低風險:危害程度較低,通常為設定不當或資訊暴露問題。建議於例行維護時修復。', 'info' => '資訊性:非直接安全威脅,主要為技術指紋識別或設定觀察,可輔助了解系統暴露面。', ]; @endphp
{{ $total }}
總計
@foreach($sevMeta as $sev => $meta)
{{ $bySev[$sev] ?? 0 }}
{{ $meta['label'] }}
@endforeach
{{-- 掃描頁面數 --}} @if($pagesScanned !== null)
掃描頁面:{{ number_format($pagesScanned) }}
@endif {{-- OWASP 分類 --}} @if(!empty($byOwasp))
OWASP Top 10 分類
@foreach($owaspLabels as $oid => $olabel) @php $cnt = $byOwasp[$oid] ?? 0; @endphp
{{ $oid }} {{ $olabel }} @if($cnt > 0) {{ $cnt }} @else - @endif
@endforeach
@endif {{-- OWASP LLM Top 10(AI 掃描模式) --}} @if($isAiMode) {{-- AI 模式標題說明 --}}
AI / LLM 伺服器掃描模式
本次掃描針對 AI 推論伺服器進行 OWASP LLM Top 10 2025 相關漏洞檢測。除 ZAP 主動掃描外, 系統額外探測常見 LLM 端點(Ollama、LiteLLM、OpenWebUI、LocalAI 等), 並將發現的漏洞對應至 OWASP LLM Top 10 2025 分類框架。
{{-- 已暴露 LLM 端點 --}} @if(!empty($exposedEndpoints))
偵測到未受保護的 LLM API 端點 {{ count($exposedEndpoints) }}

以下端點在未提供任何認證的情況下可直接存取(HTTP 200/401/403/405), 攻擊者可能直接呼叫 AI 模型、查詢模型清單或執行管理操作。

@foreach($exposedEndpoints as $ep)
{{ $ep }}
@endforeach
@endif {{-- OWASP LLM Top 10 分類統計 --}}
OWASP LLM Top 10 2025 對應分析
{{-- 說明框 --}}
關於此分析的計數方式
  • 本表統計的是 ZAP 掃描所發現的傳統 Web 漏洞,依漏洞性質對應至 OWASP LLM Top 10 2025 的相關風險類別。
  • 同一筆漏洞可能同時關聯多個 LLM 風險類別(例如 CORS 設定錯誤同時對應「敏感資訊洩漏」與「系統提示詞洩漏」),因此各類別數字加總會大於實際漏洞總數,此為正常現象。
  • 顯示「—」代表此次掃描未發現對應該類別的直接相關漏洞,並非代表該風險不存在,LLM 特有風險(如提示注入、模型投毒)需搭配人工滲透測試或紅隊演練才能完整評估。
@foreach($llmOwaspDetail as $lid => $lmeta) @php $cnt = $byLlmOwasp[$lid] ?? 0; @endphp
{{ $lid }} {{ $lmeta['name'] }} {{ $lmeta['en'] }} @if($cnt > 0) {{ $cnt }} @else @endif
@if($cnt > 0)
{{ $lmeta['desc'] }}
@endif
@endforeach
OWASP LLM Top 10 2025 由 OWASP Foundation 發布,專為大型語言模型應用程式設計的安全風險框架。 官方文件
@endif {{-- isAiMode --}} {{-- 詳細發現清單 --}} @php $sevCounts = []; foreach($findings as $f) { $s = $f['severity'] ?? 'info'; $sevCounts[$s] = ($sevCounts[$s] ?? 0) + 1; } @endphp
{{-- 控制列 --}}
{{-- 嚴重度篩選按鈕 --}}
@foreach(['critical'=>['danger','嚴重'],'high'=>['warning','高'],'medium'=>['info','中'],'low'=>['primary','低'],'info'=>['secondary','資訊']] as $sev=>[$col,$lbl]) @if(($sevCounts[$sev] ?? 0) > 0) @endif @endforeach
{{-- 搜尋 --}}
{{-- 每頁筆數 --}}
@if(empty($findings))
未發現任何問題
@else
@foreach($findings as $i => $f) @php $sevColor = ['critical'=>'danger','high'=>'warning','medium'=>'info','low'=>'primary','info'=>'secondary'][$f['severity']] ?? 'secondary'; $sevText = in_array($f['severity'],['high','medium']) ? 'dark' : 'white'; $searchText = strtolower(($f['name'] ?? '') . ' ' . ($f['template_id'] ?? '') . ' ' . ($f['matched_at'] ?? '') . ' ' . implode(' ', (array)($f['owasp'] ?? [])) . ' ' . implode(' ', (array)($f['cve_id'] ?? [])) . ' ' . implode(' ', (array)($f['tags'] ?? [])) . ' ' . ($f['extra']['param'] ?? '') . ' ' . ($f['extra']['evidence'] ?? '')); @endphp {{-- 展開詳細資訊 --}} @php $pluginId = $f['extra']['plugin_id'] ?? null; $pluginInfo = $pluginId ? ($zapPlugins[(string)$pluginId] ?? null) : null; $descText = !empty($f['description']) ? $f['description'] : ($pluginInfo['desc'] ?? ''); $remedText = !empty($f['remediation']) ? $f['remediation'] : ($pluginInfo['sol'] ?? ''); $fSev = $f['severity'] ?? 'info'; $fOwasp = (array)($f['owasp'] ?? []); $fCve = (array)($f['cve_id'] ?? []); $fRef = (array)($f['reference'] ?? []); $sevBg = ['critical'=>'danger','high'=>'warning','medium'=>'info','low'=>'primary','info'=>'secondary'][$fSev] ?? 'secondary'; $sevTxt = in_array($fSev,['high','medium']) ? 'dark' : 'white'; $fExtra = (array)($f['extra'] ?? []); @endphp @endforeach
嚴重度 名稱 匹配位置 OWASP / CVE
{{ strtoupper($f['severity']) }}
{{ $f['name'] ?: ($f['template_id'] ?? '—') }}
@if(!empty($f['template_id']) && $f['template_id'] !== $f['name'])
{{ $f['template_id'] }}
@endif @if(!empty($f['tags']))
@foreach(array_slice((array)$f['tags'], 0, 5) as $tag) {{ $tag }} @endforeach
@endif
{{ $f['matched_at'] ?? '—' }}
@foreach((array)($f['owasp'] ?? []) as $oid) {{ $oid }} @endforeach @foreach((array)($f['cve_id'] ?? []) as $cid) {{ $cid }} @endforeach @if($isAiMode) @foreach(array_slice((array)($f['llm_owasp'] ?? []), 0, 2) as $lid) {{ $lid }} @endforeach @endif
{{-- ① 影響網址位置 --}}
影響網址位置
{{ $f['matched_at'] ?? '—' }} @if(!empty($f['matched_at'])) @endif
{{-- 偵測細節:方法 / 參數 / 信心等級 / CWE / 觸發證據 --}} @if(!empty($fExtra['method']) || !empty($fExtra['param']) || !empty($fExtra['confidence']) || !empty($fExtra['cweid']) || !empty($fExtra['evidence']))
偵測細節
@if(!empty($fExtra['method'])) {{ $fExtra['method'] }} @endif @if(!empty($fExtra['param'])) 參數:{{ $fExtra['param'] }} @endif @if(!empty($fExtra['confidence'])) @php $confColor = ['高'=>'danger','中'=>'warning','低'=>'secondary','誤報'=>'light'][$fExtra['confidence']] ?? 'secondary'; @endphp 信心等級:{{ $fExtra['confidence'] }} @endif @if(!empty($fExtra['cweid'])) CWE-{{ $fExtra['cweid'] }} @endif
@if(!empty($fExtra['evidence']))
觸發證據(ZAP 於回應中比對到的內容)
{{ $fExtra['evidence'] }}
@endif
@endif
{{-- ② 對應風險分類 --}}
對應風險分類
{{-- 嚴重度說明 --}}
{{ strtoupper($fSev) }}
{{ $sevRiskDesc[$fSev] ?? '' }}
{{-- OWASP 分類 --}} @if(!empty($fOwasp))
OWASP Top 10 2021
@foreach($fOwasp as $oid) @php $od = $owaspDetail[$oid] ?? null; @endphp
{{ $oid }} {{ $od['name'] ?? $oid }}
@if($od)
{{ $od['desc'] }}
@endif
@endforeach
@endif {{-- OWASP LLM Top 10(AI 模式) --}} @if($isAiMode && !empty($f['llm_owasp']))
OWASP LLM Top 10 2025
@foreach((array)$f['llm_owasp'] as $lid) @php $ld = $llmOwaspDetail[$lid] ?? null; @endphp
{{ $lid }} {{ $ld['name'] ?? $lid }}
@if($ld)
{{ $ld['desc'] }}
影響:
{{ $ld['impact'] }}
@endif
@endforeach
@endif {{-- CVE --}} @if(!empty($fCve))
CVE
@foreach($fCve as $cid) {{ $cid }} @endforeach
@endif
{{-- ③ 說明 + 解法 --}}
{{-- 漏洞說明 --}}
漏洞說明
@if($descText)

{{ $descText }}

@else

(此項目暫無詳細說明,請參考右側參考資料)

@endif
{{-- 建議修復方式 --}}
建議解法
@if($remedText)
{{ $remedText }}
@else

(請參考右側參考資料或 OWASP 防禦指南)

@endif {{-- AI 模式:LLM 專屬修復建議 --}} @if($isAiMode && !empty($f['llm_owasp']))
@foreach((array)$f['llm_owasp'] as $lid) @php $ld = $llmOwaspDetail[$lid] ?? null; @endphp @if($ld)
LLM 防禦建議({{ $lid }})
{{ $ld['sol'] }}
@endif @endforeach
@endif
{{-- ④ 參考資料 + 技術資訊 --}}
{{-- 參考資料 --}}
參考資料
@if(!empty($fRef)) @foreach(array_slice($fRef, 0, 6) as $ref) {{ $ref }} @endforeach @else {{-- 根據 OWASP 分類補充參考連結 --}} @foreach($fOwasp as $oid) OWASP {{ $oid }} 詳細說明 @endforeach @if($pluginId) ZAP Alert #{{ $pluginId }} 說明 @endif @if(empty($fOwasp) && !$pluginId) (暫無參考連結) @endif @endif
{{-- 技術資訊 --}}
技術資訊
@if(!empty($f['template_id']))
ID:{{ $f['template_id'] }}
@endif @if(!empty($f['type']))
類型:{{ strtoupper($f['type']) }}
@endif @if($isGarakMode && isset($f['extra']['failed']))
測試失敗:{{ $f['extra']['failed'] }} / {{ $f['extra']['total'] }}
失敗率:{{ $f['extra']['fail_rate'] }}%
測試通過:{{ $f['extra']['passed'] }}
@endif @if(!empty($f['extra']['count']))
發現次數:{{ $f['extra']['count'] }} 處
@endif @if(!empty($f['extra']['cvss_score']))
CVSS 評分:{{ $f['extra']['cvss_score'] }}
@endif @if(!empty($f['tags']))
@foreach(array_slice((array)$f['tags'], 0, 8) as $tag) {{ $tag }} @endforeach
@endif
{{-- row --}}
{{-- 分頁列 --}}
@endif
@endif {{-- status === done --}}
{{-- 防止 footer 遮住最後一行 --}} @endsection @push('scripts') @endpush