@php $_pdfLogo = null; foreach (['png','svg','jpg','jpeg'] as $_ext) { $_path = public_path('logo.'.$_ext); if (file_exists($_path)) { $_mime = $_ext === 'svg' ? 'image/svg+xml' : 'image/'.$_ext; $_pdfLogo = 'data:'.$_mime.';base64,'.base64_encode(file_get_contents($_path)); break; } } @endphp
@php $bySev = $summary['by_severity'] ?? []; $total = $summary['total'] ?? 0; $openPorts = $summary['open_ports'] ?? 0; $hostsUp = $summary['hosts_up'] ?? 0; $pagesScanned= $summary['pages_scanned'] ?? null; $byOwasp = $summary['by_owasp'] ?? []; $critical = $bySev['critical'] ?? 0; $high = $bySev['high'] ?? 0; $medium = $bySev['medium'] ?? 0; $low = $bySev['low'] ?? 0; $info = $bySev['info'] ?? 0; $scannerType = $penTest->scanner_type ?? 'nmap'; $modeInfo = $scanModes[$penTest->scan_mode] ?? ['label'=>$penTest->scan_mode,'desc'=>'']; $scannerInfo = $scannerTypes[$scannerType] ?? ['label'=>strtoupper($scannerType),'color'=>'danger']; $scannerMeta = [ 'nmap' => ['label'=>'Nmap', 'ver'=>trim(shell_exec('nmap --version 2>/dev/null | head -1') ?: 'Latest'), 'toolColor'=>'#ef4444'], 'nikto' => ['label'=>'Nikto', 'ver'=>'2.1.5 (Docker)', 'toolColor'=>'#f59e0b'], ][$scannerType] ?? ['label'=>strtoupper($scannerType),'ver'=>'','toolColor'=>'#94a3b8']; $sec = $penTest->durationSeconds(); $duration = $sec ? ($sec>=60 ? floor($sec/60).'m '.($sec%60).'s' : $sec.'s') : '—'; if ($critical > 0) { $riskLevel='CRITICAL'; $riskClass='critical'; $riskDesc="本次滲透測試發現 {$critical} 個嚴重風險,目標系統面臨極高度被入侵風險,建議立即停止對外服務並進行全面修補。"; } elseif ($high > 0) { $riskLevel='HIGH'; $riskClass='high'; $riskDesc="本次測試發現 {$high} 個高風險問題,攻擊者可能利用這些弱點對目標造成資料洩漏或服務中斷。建議 7 天內完成修補。"; } elseif ($medium > 0) { $riskLevel='MEDIUM'; $riskClass='medium'; $riskDesc="本次測試發現 {$medium} 個中等風險,建議評估後於 30 天內修補,避免與其他弱點組合利用。"; } elseif ($low > 0) { $riskLevel='LOW'; $riskClass='low'; $riskDesc="本次測試整體風險偏低,僅發現 {$low} 個低風險設定問題,建議於例行維護時一併修復。"; } else { $riskLevel='SAFE'; $riskClass='info'; $riskDesc="本次滲透測試未發現明顯安全風險,目標系統暴露面控制良好,建議持續定期執行測試。"; } $owaspDetail = [ 'A01:2021' => ['name'=>'存取控制失效', 'desc'=>'使用者被允許執行超出其預期權限的操作,可能導致未授權的資料讀取、修改或刪除。'], 'A02:2021' => ['name'=>'加密機制失效', 'desc'=>'與加密相關的失敗,通常導致敏感資料暴露,包括明文傳輸、弱加密演算法、不安全的金鑰管理。'], 'A03:2021' => ['name'=>'注入式攻擊', 'desc'=>'攻擊者向直譯器發送惡意資料,如 SQL、OS 命令、XSS。可能導致資料竊取或系統入侵。'], 'A04:2021' => ['name'=>'不安全設計', 'desc'=>'設計階段缺乏安全考量,包括缺乏威脅建模、不安全的設計模式。'], 'A05:2021' => ['name'=>'安全設定錯誤', 'desc'=>'不安全的預設設定、不完整設定、錯誤的 HTTP 標頭、詳細的錯誤訊息等。'], 'A06:2021' => ['name'=>'易受攻擊與過時的元件', 'desc'=>'使用有已知漏洞的函式庫、框架或軟體模組,可能破壞應用程式防禦。'], 'A07:2021' => ['name'=>'身分驗證失效', 'desc'=>'與身分驗證和工作階段管理相關的弱點,允許攻擊者入侵密碼、金鑰或工作階段令牌。'], 'A08:2021' => ['name'=>'軟體及資料完整性失效', 'desc'=>'未驗證完整性的軟體更新、關鍵資料及 CI/CD 管道,如不安全的反序列化。'], 'A09:2021' => ['name'=>'安全記錄及監控失效', 'desc'=>'缺乏足夠的記錄和監控,導致無法偵測攻擊,使攻擊者能長期潛伏系統中。'], 'A10:2021' => ['name'=>'伺服器端請求偽造', 'desc'=>'應用程式在未驗證使用者提供 URL 的情況下發送請求,攻擊者可存取內部服務。'], ]; $owaspLabels = \App\Models\VulnScan::owaspLabels(); $sevColors = ['critical'=>'#dc2626','high'=>'#ea580c','medium'=>'#d97706','low'=>'#16a34a','info'=>'#475569']; $sevDescs = [ 'critical'=>'可直接被遠端利用,無需授權即可取得系統控制權。建議立即(24H內)修復。', 'high' =>'可能造成資料洩漏、身分驗證繞過等重大損害。建議 7 天內修復。', 'medium' =>'單獨利用危害有限,但可與其他漏洞組合使用。建議 30 天內修復。', 'low' =>'危害程度較低,通常為設定不當或資訊暴露。建議例行維護時修復。', 'info' =>'非直接威脅,主要為技術指紋識別,可輔助了解系統暴露面。', ]; @endphp {{-- ══════════════ 封面 ══════════════ --}}本次使用 {{ $scannerMeta['label'] }} {{ $scannerMeta['ver'] }} 進行{{ $scannerType==='nikto'?'Web 伺服器安全檢測':'網路滲透測試' }}, 採用 {{ $modeInfo['label'] }} 模式,針對目標 {{ $penTest->target }} 進行自動化安全評估。 掃描作業於 {{ $penTest->started_at?->format('Y年m月d日 H:i') }} 開始,歷時 {{ $duration }} 完成。 @if($hostsUp > 0) 共掃描到 {{ $hostsUp }} 台存活主機,發現 {{ $openPorts }} 個開放埠。@endif @if($pagesScanned !== null) 共掃描 {{ number_format($pagesScanned) }} 個頁面。@endif
{{ $critical }} CRITICAL 嚴重 |
{{ $high }} HIGH 高風險 |
{{ $medium }} MEDIUM 中風險 |
{{ $low }} LOW 低風險 |
{{ $info }} INFO 資訊 |
@if($openPorts > 0)
{{ $openPorts }} OPEN PORTS 開放埠 |
@endif
| Critical | 嚴重漏洞:可直接被遠端利用,無需授權即可取得系統控制權或存取敏感資料。常見如遠端程式碼執行(RCE)、遠端管理服務暴露等。建議立即修復(24 小時內)。 |
|---|---|
| High | 高風險漏洞:可能造成重大損害,如高風險服務暴露(RDP/FTP/Telnet)、資料洩漏、身分驗證繞過等。建議 7 天內修復。 |
| Medium | 中等風險:單獨利用危害有限,但可能與其他弱點組合使用。常見如不安全服務設定、HTTP 標頭缺失等。建議 30 天內修復。 |
| Low | 低風險:危害程度較低,通常為標準服務(SSH/HTTP/HTTPS)開放或一般設定觀察。建議於例行維護時修復。 |
| Info | 資訊性:非直接安全威脅,主要為服務探測、技術指紋識別,可輔助了解系統暴露面。 |
本次掃描未發現高風險問題。
@else @foreach($topFindings as $f) @php $sev = $f['severity'] ?? 'info'; @endphpOWASP Top 10 是國際公認的十大 Web 應用程式安全風險清單,以下為本次掃描結果與 OWASP 分類的對應關係。
| 分類 ID | 風險名稱 | 發現數 | 狀態 |
|---|---|---|---|
| {{ $oid }} | {{ $olabel }} | {{ $cnt > 0 ? $cnt : '—' }} | @if($cnt > 0)⚠ 發現 @else✓ 未發現@endif |
| 優先 | 嚴重度 | 問題名稱 | 建議修復措施 |
|---|---|---|---|
| {{ $rank++ }} | {{ strtoupper($f['severity']) }} | {{ $f['name'] ?: ($f['template_id'] ?? '—') }} | {{ mb_strimwidth($f['remediation'], 0, 150, '…') }} |
未發現任何問題,系統安全狀態良好。
@endforelse