Yoru Karu Studio
程式設計學習筆記 | 生活心得程式設計學習筆記 | 生活心得
🛡️ Web 資安完整指南 課程簡介 本系列從零開始系統化講解 Web 資安,涵蓋 SQL Injection、XSS、CSRF、OWASP Top 10、SSRF、反序列化攻擊等核心主題,並深入 Django 框架的安全實踐。專為全端工程師、資安新手、面試準備設計,幫助你建立完整的資安防禦能力。
為什麼要學資安?
✅ 避免數據洩漏(Capital One、Equifax 都因資安漏洞損失慘重) ✅ 通過技術面試(SQL Injection、XSS 必考) ✅ 提升職場競爭力(資安意識是優秀工程師的標配) ✅ 保護用戶隱私(開發者的責任) 📚 章節目錄 🔰 基礎必學 01. 資安基礎篇 01-1. 什麼是 Web 資安?為什麼重要? ⏱️ 8min 01-2. CIA 三元組:機密性、完整性、可用性 ⏱️ 10min 01-3. 常見攻擊類型概覽 ⏱️ 12min 01-4. 攻擊者思維 vs 防禦者思維 ⏱️ 10min 02. Injection 注入攻擊篇(面試必考 ⭐⭐⭐) 02-1. SQL Injection 基礎:什麼是 SQL 注入? ⏱️ 15min 02-2. SQL Injection 攻擊技巧(Union、Blind、Time-based) ⏱️ 18min 02-3.
為什麼現代搜尋能「讀懂」你的意思? 想像你在圖書館找書,問館員:「有沒有教我做網站的書?」
傳統搜尋引擎會找書名有「做」、「網站」這些字的書。 現代 AI 搜尋會理解你其實想找「網頁開發」、「Web Development」、「前端教學」相關的書。
這兩者的差異,就是關鍵字匹配與語義理解的差異。本文將帶你走過搜尋技術 50 年的演進之路。
📚 第一代:TF-IDF(詞頻-逆文檔頻率) 核心思想:統計詞的重要性 TF-IDF 誕生於 1970 年代,是最經典的文本檢索演算法。它的邏輯非常直觀:
TF(Term Frequency,詞頻)
一個詞在文檔中出現越多次,這個詞對該文檔越重要 計算:TF = 詞在文檔中出現次數 / 文檔總詞數 IDF(Inverse Document Frequency,逆文檔頻率)
一個詞在越少文檔中出現,這個詞越有鑑別力 常見詞如「的」、「是」出現在所有文檔中,沒有鑑別能力 計算:IDF = log(總文檔數 / 包含該詞的文檔數) TF-IDF 分數 = TF × IDF
實際例子 假設查詢:「what is nlp」
文檔 1:「what is life! candy is life!」 文檔 2:「nlp is an acronym for natural language processing」 文檔 3:「I like to do good research on nlp」
🚀 WebSocket 實戰應用 🎯 實戰專案概覽 本篇將實作四個完整的 WebSocket 應用:
即時聊天室 💬 即時通知系統 🔔 協作編輯器 ✏️ 多人遊戲同步 🎮 💬 專案一:即時聊天室 需求分析 功能: ✅ 多個使用者同時聊天 ✅ 顯示線上人數 ✅ 顯示「正在輸入...」 ✅ 訊息歷史記錄 ✅ 私訊功能後端實作(Node.js + ws) // server.js const WebSocket = require('ws'); const http = require('http'); const express = require('express'); const app = express(); const server = http.createServer(app); const wss = new WebSocket.Server({ server }); // 儲存所有連線 const clients = new Map(); // 訊息歷史(實務應該用資料庫) const messageHistory = []; wss.
🔀 WebSocket vs HTTP 深度比較 🎯 核心差異 💡 比喻: HTTP = 郵寄信件 - 你寄一封信(請求) - 郵局回信(回應) - 一問一答,不能主動通知 WebSocket = 電話通話 - 撥通後保持連線 - 雙方隨時可以說話 - 即時雙向溝通連線模式對比 HTTP(請求-回應):
客戶端 伺服器 │ │ ├─ GET /data ──────────────>│ │ │ │<─ 200 OK ──────────────────┤ │ (data) │ │ │ ├─ GET /data ──────────────>│ (需要新資料,再次請求) │ │ │<─ 200 OK ──────────────────┤ │ (new data) │WebSocket(雙向通訊):
客戶端 伺服器 │ │ ├─ WebSocket Handshake ────>│ (一次連線) │<─ 101 Switching Protocols ┤ │ │ │<══════ 保持連線 ═══════════>│ │ │ ├─ Message ────────────────>│ (隨時發送) │<─ Message ──────────────────┤ (伺服器主動推送) ├─ Message ────────────────>│ │<─ Message ──────────────────┤ 📊 詳細比較表 特性 HTTP WebSocket 連線 短連線(一次性) 長連線(持續) 方向 單向(客戶端發起) 雙向(任一方發起) 開銷 每次請求都有 Header(~200+ bytes) 握手後僅需 2-6 bytes 延遲 高(需建立連線) 低(連線已建立) 即時性 需輪詢 即時推送 瀏覽器支援 ✅ 所有瀏覽器 ✅ 現代瀏覽器 快取 ✅ 支援 ❌ 不支援 CDN ✅ 支援 ❌ 不支援 防火牆 ✅ 友善 ⚠️ 可能被阻擋 🔄 HTTP 實現即時通訊的方法 1️⃣ 短輪詢(Short Polling) 💡 比喻:每隔幾秒問一次「有新訊息嗎?」// 客戶端:每 3 秒請求一次 function shortPolling() { setInterval(async () => { const response = await fetch('/api/messages'); const messages = await response.
📡 Telnet 協定:遠端登入的起源 ⏱️ 閱讀時間: 8 分鐘 🎯 難度: ⭐ (簡單)
🎯 本篇重點 理解 Telnet 的基本概念、運作原理、為什麼不安全、與 SSH 的差異,以及現代的有限用途。
🤔 什麼是 Telnet? Telnet (Teletype Network) = 遠端終端機協定
一句話解釋: Telnet 是最早的遠端登入協定(1969年),讓你可以透過網路連線到另一台電腦的終端機,但所有資料都是明文傳輸,非常不安全。
比喻:透明玻璃屋的電話 Telnet = 在透明玻璃屋裡打電話 - 所有人都能看到你在說什麼 - 帳號密碼、指令、輸出都被看光 - 完全沒有隱私 SSH = 在隔音密封房間裡打電話 - 外人完全聽不到 - 所有內容都加密 - 完全安全 🏗️ Telnet 在網路模型中的位置 OSI 7 層模型 ┌──────────────────────────────┬─────────────────┐ │ 7. Application Layer (應用層) │ Telnet │ ← Telnet 在這裡 ├──────────────────────────────┼─────────────────┤ │ 6. Presentation Layer (表示層)│ 明文(無加密) │ ├──────────────────────────────┼─────────────────┤ │ 5.
🔐 SFTP 協定:安全的檔案傳輸 SFTP 在網路模型中的位置 ┌──────────────────────────────────────────────────────────┐ │ OSI 七層模型 TCP/IP 四層模型 │ ├──────────────────────────────────────────────────────────┤ │ 7. 應用層 (Application) │ │ ├─ SFTP ───────────────┐ 應用層 (Application) │ │ │ (SFTP, HTTP, FTP...) │ ├─────────────────────────────┤ │ │ 6. 表現層 (Presentation) │ │ │ ├─ SSH 加密 │ │ ├─────────────────────────────┤ │ │ 5. 會話層 (Session) │ │ │ ├─ SSH Session │ │ ├─────────────────────────────┼─────────────────────────────┤ │ 4. 傳輸層 (Transport) │ 傳輸層 (Transport) │ │ └─ TCP ─────────────────┘ (TCP) │ ├─────────────────────────────┼─────────────────────────────┤ │ 3.