核心事實
所有發送到瀏覽器的 JavaScript、HTML、CSS 都是明文可見的,Chrome DevTools (F12) 即可查看、斷點、修改。這是 Web 架構決定的,無法從根本改變。
風險分級
| 風險 | 示例 | 後果 |
| 業務邏輯洩露 | 價格計算、優惠規則、驗證算法 | 競品抄襲、用戶繞過前端驗證 |
| 敏感信息硬編碼 | API Key、加密密鑰、內部接口地址 | 被盜用、攻擊擴大面 |
| 代碼注入/篡改 | 用戶在 Console 修改變量、掛鉤函數 | 繞過權限、竄改數據 |
防護策略
1. 敏感邏輯後置 (核心原則)
- 驗證、計價、權限、加密——**全部在後端執行**。
- 前端僅做「展示、輸入收集、體驗優化」。
2. 代碼混淆與壓縮 (提高逆向成本)
- Webpack/Terser:
terser --compress --mangle --output bundle.min.js。
- Source Map **僅上傳到錯誤收集平台 (Sentry)**,不部署到 CDN。
- 進階:
javascript-obfuscator (控制流扁平化、字符串加密、死代碼注入)。
3. 內容安全策略 (CSP)
Content-Security-Policy: default-src 'self'; script-src 'self' 'nonce-{random}'; object-src 'none';
- 禁止內聯腳本、eval、new Function。
- 配合 Nonce/Hash 允許特定內聯。
4. 關鍵數據不落地前端
- Token 存
HttpOnly; Secure; SameSite=Strict Cookie,而非 localStorage。
- 加密密鑰由後端下發臨時會話密鑰,或用 Web Crypto API 衍生。
5. 完整性校驗 (Subresource Integrity)
<script src="https://cdn.example.com/lib.js"
integrity="sha384-...hash..."
crossorigin="anonymous"></script>
總結
「前端不可信」是鐵律。混淆只能防君子,真正的安全靠後端權威校驗、最小權限原則、CSP 防禦 XSS、敏感數據不前置。
- 上一篇文章: jQuery AJAX 動態生成的按鈕綁定點擊事件失效?使用事件委派
- 下一篇文章: Visio 2007 UML 組件圖無法調整「包」高度?改用矩形繪製
Copyright ©
程式碼之家 All Rights Reserved