docs/privacy-and-security.md

🛡 隱私保護與資安 (Privacy & Security)

RenUniversal 處理即時人臉影像,隱私與安全是設計核心。本文件說明前端的臉部打碼機制、後端的資安強化措施,以及對外部署時的建議。

回到 文件中心


1. 臉部隱私打碼 (Face Privacy Blur)

系統內建硬體層級的即時臉部馬賽克,於影像處理底層運作:

預設啟用隱私模式;以 --disable-privacy 啟動可預設關閉。實作位於 pipeline.py 的 privacy blur 區段。


2. 後端資安強化 (Backend Hardening)

以下為已落實的安全措施,對應原始碼如註明。

2.1 規則引擎防注入:AST 白名單求值器

姿態與事件規則來自使用者輸入(API 寫入的 rule_syntax)。系統不使用 eval() 直接執行,而是經 safe_eval.py 的 AST 白名單求值:

→ 徹底杜絕透過規則字串進行的任意程式碼執行(RCE)。

2.2 網路來源防護:自動驅逐與數量上限

/upload_frame 接受手機副鏡頭推送的影格,以 source 參數區分來源。為避免惡意端以大量不同 source_id 撐爆記憶體(DoS),state.pyupdate_network_frame

2.3 請求體強健性:統一 JSON 防護

所有寫入型 API(/settings/control、skills/events 的 create/toggle/delete、/api/settings/update)改用統一的 get_json_or_400() 解析:空 body 或非合法 JSON 會回傳乾淨的 HTTP 400,而非未處理例外造成的 500。

2.4 連線存取控制 (Basic Auth)

當以 --host 0.0.0.0--enable-tunnel 對外開放、卻未提供 --auth 時,系統會以 secrets 模組自動產生 12 字元隨機帳密並顯示於終端機,避免服務無認證裸奔。亦可用 --auth user:pass 自訂。


3. 對外部署建議 (Deployment Checklist)

當你打算讓本機以外的裝置連線時,建議:

⚠️ 自簽(adhoc)憑證適用於開發與區網,無法防範進階中間人攻擊;正式對外服務應改用受信任憑證並置於反向代理之後。


4. 相關原始碼

檔案 職責
backend/core/safe_eval.py AST 白名單布林求值器
backend/core/state.py 共享狀態、網路來源驅逐與持久化
backend/core/pipeline.py 影像流水線與臉部隱私打碼
backend/stream_server.py Flask 路由、Basic Auth、JSON 請求防護