--- title: Digital Bodyguard emoji: 🐢 colorFrom: indigo colorTo: pink sdk: docker pinned: false license: mit short_description: Dynamic Contextual Security Network Driven by AI --- # 🛡️ Digital-Bodyguard Frontend | 校園資安 AI 防護網 這是一個專為校園入口網站設計的「資安防護模擬系統」前端介面。透過模擬 **Taipei Tech Portal** 的登入行為,串接後端 AI 偵測引擎,實現即時行為判定與行為軌跡紀錄。 --- ## 🚀 核心功能 (Features) * **校園入口模擬**:完美復刻登入介面,包含「FEIK」驗證碼校驗與多角色(學生/管理員)儀表板切換。 * **環境變數模擬器**: * **IP 切換**:手動切換校內、宿舍或國外異常 IP。 * **時間旅行**:模擬過去或未來的操作時間點,測試 AI 對非辦公時間行為的判定。 * **Session ID 偽造**:模擬 Cookie 被劫持的情境。 * **AI 即時判定連動**: * 串接後端 **HDBSCAN** 聚類算法,對每一個點擊行為進行「正常/異常」判定。 * **攔截機制**:偵測到 SQL Injection 或惡意行為時,前端自動彈出警報並阻斷操作。 * **即時 Log 監控區**:與 Hugging Face Dataset 同步,即時顯示最新 20 筆行為紀錄。 * **資安專家解析**:整合 **Google Gemini API**,對異常事件進行深度自動化威脅分析。 --- ## 🛠️ 技術細節 (Tech Stack) | 類別 | 使用技術 | 備註 | | :--- | :--- | :--- | | **框架** | **Vue 3 (Composition API)** | 核心邏輯採 `setup` 語法,狀態管理更直覺。 | | **建置工具** | **Vite 6** | 採用最新版 Vite,享受極速 HMR 編譯。 | | **樣式** | **Tailwind CSS 4** | bleeding edge 版本,全 CSS 驅動配置。 | | **API 通訊** | **@gradio/client** | 透過 WebSocket/SSE 串接 Python Gradio 後端。 | | **圖表** | **Chart.js** | 實作基準管理雷達圖與事件趨勢圖。 | | **部署** | **Docker + Nginx** | 解決 SPA 路由問題並優化靜態資源載入速度。 | --- ## 📝 實作筆記與挑戰 (Implementation Notes) ### 1. Gradio API 的「索引之戰」 **問題**:Gradio 的 `predict` 回傳資料是陣列格式,且包含大量 UI 更新物件。 **解法**:精確對位後端 `outputs` 順序。 * 登入接口:`[2]` 是錯誤訊息,`[4]` 是 Dataframe。 * 登出接口:`[6]` 是最新的 Dataframe。 * 使用 `parseGradioData` 函數將原始陣列轉換為 Vue 響應式物件。 ### 2. Vite 6 的 Polyfill 戰爭 **問題**:`@gradio/client` 引用了大量的 Node.js 原生模組(Buffer, Stream),導致瀏覽器編譯崩潰,噴出 `require$$0` 錯誤。 **解法**:在 `vite.config.ts` 中引入 `vite-plugin-node-polyfills`,並在 `commonjsOptions` 中明確 **exclude** Gradio 套件,阻止 Vite 過度轉換。 ### 3. Nginx MIME Type 陷阱 **問題**:部署到 HF Space 後,樣式失效,出現 `Refused to apply style because its MIME type ('text/html')`。 **解法**:修正 `nginx.conf`,顯式包含 `include /etc/nginx/mime.types;` 並將 CSS/JS 路由設定為 `try_files $uri =404;`,防止檔案缺失時回傳 `index.html`。 ### 4. 數據冷啟動同步 **實作方式**:在 `onMounted` 階段自動呼叫一次 `/logout`(傳入系統同步標籤),利用後端 `sync_from_hf()` 機制,確保使用者一進網頁就能看到最新的雲端歷史紀錄。 --- ## ⚙️ 環境設定 (Deployment) 1. **Secrets 設定**:在 Hugging Face Space 設定 `VITE_GEMINI_API_KEY`。 2. **Dockerfile 編譯**: ```dockerfile ARG VITE_GEMINI_API_KEY ENV VITE_GEMINI_API_KEY=$VITE_GEMINI_API_KEY RUN npm run build ``` 3. **後端連線**:確保 `App.vue` 中的 `Client.connect` 指向正確的後端 Repo ID。