Vibe Coder
OWASP 與常見漏洞:AI 生成程式的資安檢查清單
OWASP Top 10 是業界公認最常見的 Web 安全漏洞清單,涵蓋權限控管、加密、注入攻擊、設計與設定錯誤等類別。AI 生成的程式常見的問題是 SQL Injection、用 MD5 存密碼、API 回傳整包物件洩漏敏感欄位,這些都要在上線前逐一檢查修正。
OWASP 與常見漏洞:AI 生成程式的資安檢查清單
攻擊者不會特地挑你的小作品下手,他們用自動化工具掃全部 IP,不挑對象。你的天氣小工具和大公司的系統一樣在攻擊範圍內,差別只在有沒有先做好防禦。
AI 生的程式碼預設有漏洞:SQL Injection、明文密碼、過度暴露的 API 回傳,這些都是 AI 常犯的錯,而它不會主動提醒你。這篇用 OWASP Top 10 當地圖,帶你認出最常見的幾種漏洞。
你將學到什麼
OWASP Top 10 是什麼
業界公認的十大 Web 安全漏洞清單,上線前的檢查基準。
Injection 最危險
SQL Injection 怎麼發生、為什麼 ORM 是最好的防線。
認證機制常見錯誤
明文密碼、沒有 Rate Limit、JWT 不設過期。
AI 生成程式的資安盲點
四個 AI 最常寫出來、你要主動抓出來的問題。
OWASP Top 10 概覽
| 排名 | 類別 | 簡說 |
|---|---|---|
| A01 | Broken Access Control | 使用者能做不應該做的事(看別人的資料) |
| A02 | Cryptographic Failures | 加密做得不好,資料被看光 |
| A03 | Injection | SQL Injection、XSS,輸入被當成程式碼執行 |
| A04 | Insecure Design | 設計本身就不安全 |
| A05 | Security Misconfiguration | 設定錯誤(預設密碼、開放不必要的 port) |
| A07 | Identity and Authentication Failures | 認證機制有問題(弱密碼、沒有 Rate Limit) |
| A09 | Security Logging Failures | 沒有稽核 Log,出事了不知道發生什麼 |
Injection:最危險的漏洞
使用者輸入的資料被當成程式碼執行,最常見的是 SQL Injection。
# 危險:使用者輸入直接拼進 SQL
email = "' OR 1=1 --" # 惡意輸入
query = f"SELECT * FROM users WHERE email='{email}'"
# 實際執行:SELECT * FROM users WHERE email='' OR 1=1 --'
# 結果:回傳所有使用者的資料!
# 安全:用 parameterized query
query = "SELECT * FROM users WHERE email = $1"
result = await db.fetchrow(query, email) # 驅動程式處理跳脫
ORM 是最好的防 Injection 方式用 SQLAlchemy、Prisma、Supabase Client 等 ORM,它們自動做參數化處理,不讓使用者輸入直接碰到 SQL。Vibe Coder 盡量用 ORM,不要自己拼 SQL 字串。
另一個常見類型是 XSS(跨站腳本攻擊):把惡意 JS 注入到網頁讓其他使用者執行。React 預設會跳脫 JSX 裡的內容,但直接用 dangerouslySetInnerHTML 或 innerHTML 就有風險。
Broken Authentication:認證機制的常見錯誤
| 問題 | 風險 | 正確做法 |
|---|---|---|
| 密碼明文存 DB | DB 外洩,所有密碼直接洩漏 | 用 bcrypt 或 argon2 hash |
| 沒有 Rate Limit | 允許暴力破解密碼 | 登入失敗 5 次鎖定 15 分鐘 |
| JWT 不設過期 | Token 被偷後永久有效 | 設定合理的過期時間(1 小時) |
| 弱 JWT Secret | Token 被偽造 | 至少 256 位元的隨機 Secret |
| 密碼沒有複雜度要求 | 容易被猜到 | 最少 8 字元,要有數字或符號 |
from passlib.context import CryptContext
pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")
def hash_password(password: str) -> str:
return pwd_context.hash(password)
def verify_password(plain: str, hashed: str) -> bool:
return pwd_context.verify(plain, hashed)
Sensitive Data Exposure:敏感資料在不該出現的地方出現
| 常見問題 | 後果 | 解法 |
|---|---|---|
| API 回傳整個 DB 物件(含密碼 hash) | 前端能看到不應該看的欄位 | 只回傳必要欄位,用 Pydantic response_model |
| 錯誤訊息包含 Stack Trace | 洩漏系統架構給攻擊者 | 前端只看通用錯誤,詳細記到 Log |
| Log 裡有密碼或 API Key | Log 被取得就等於金鑰洩漏 | Log 前過濾敏感欄位 |
| HTTP 傳輸(沒有 HTTPS) | 傳輸中被竊聽 | 強制 HTTPS,現代平台都自動支援 |
AI 生成程式的常見資安盲點
| AI 常生成的 | 問題 | 正確做法 |
|---|---|---|
| hashlib.md5(pwd) | MD5 太快,可以暴力破解 | 改用 bcrypt.hash(pwd) |
| return user.__dict__ | 包含密碼 hash 等敏感欄位 | 用 Pydantic 定義回傳格式 |
| f"...WHERE id={id}" | SQL Injection 風險 | 用 ORM 或 parameterized query |
| 沒有 CORS 設定 | 允許任何網域存取你的 API | 設定允許的 Origin 白名單 |
只在自己的測試環境驗證漏洞驗證 SQL Injection 是否修復時,只能在自己的測試環境用惡意輸入測試,絕對不要對任何正式系統或他人的系統做這件事。
延伸學習
HE201|Harness Engineering System Design(6 小時)
六小時的實作課:從 Blueprint 走到可以跑的規格,再用 No-code、n8n 低程式碼與程式碼三條路各做一次同一個 harness,最後處理可靠度——重試、錯誤處理、人工覆核。7 章 54 課,含常見坑與排錯、Capstone 實作,附學員講義 PDF。
NT$ 5,999
做出你的第一個 Skill
一場快閃直播的完整重製。從搞懂 Skill 的五個層級開始,帶你把一件你每天在做的重複工作,寫成一支 AI 真的會照做的 Skill ── 命名、description、輸入拆解、Workflow 訪談、Output 與 Checks,最後組成一份能通過格式檢查的 SKILL.md。
NT$ 999
常見問答
OWASP Top 10 是什麼?
OWASP 是開放的 Web 應用程式安全專案,每幾年發布一次 Top 10 清單,列出最常見的十大 Web 安全漏洞,是業界的資安基準。
為什麼 SQL Injection 這麼危險?
因為使用者輸入的資料如果直接拼進 SQL 語句,攻擊者只要送出像 ' OR 1=1 -- 這樣的字串,就能讓查詢回傳資料庫裡所有使用者的資料。用 ORM 或 parameterized query 可以完全避免。
React 不是本來就會防 XSS 嗎?
React 預設會跳脫 JSX 裡的內容,能擋掉大部分 XSS,但如果直接使用 dangerouslySetInnerHTML 或 innerHTML,等於自己把防線拆掉,這時候就有風險。
AI 生成的程式最常見的資安盲點是什麼?
常見的有四個:用 hashlib.md5 存密碼、API 直接回傳 user.__dict__ 洩漏敏感欄位、把使用者輸入直接拼進 SQL 字串、以及完全沒設定 CORS 白名單。

