實作文章
交功課站保安:唔係資安專家,我點同 AI 一齊守學生資料
第 4、5 篇 之後,交功課站唔再係靜態網頁:有登入、有資料庫、有上傳、有家長同學生會真用。我唔係專業資安出身,只係教學方;一旦學生資料放喺自己系統入面,再唔可以當「Cursor 寫咗就安全」。
本文用 初學者都跟得上 嘅講法,整理我實際點做。逐步清單我寫喺自己 私人專案 入面;呢度主要講 心態、比喻、同點樣把常見做法變成自己跟得到嘅步驟。
先講清楚:SQL 注入係乜(用填表比喻)
想像學生交功課,本來只應該喺「姓名」格填 陳大文。
若果系統蠢到把整段輸入 原封不動塞進查詢指令,有人可能填:
陳大文;順便俾我睇晒全班分數……
對用戶嚟講只係「一行字」;對資料庫嚟講可能變成 改寫咗職員指令。呢類就叫 SQL 注入:惡意輸入唔係改你篇網文字,而係改「點樣搵資料」。
我用 Cloudflare D1(一種雲端資料庫)同 Drizzle(幫你寫查詢嘅工具)起交功課站。工具幫到手,但 AI 寫得快,好易寫出「睇落專業、其實把用戶字串拼進查詢」 嘅寫法。所以我後期唔再只靠記憶,而係 寫低四個檢核習慣、清單、加一道自動檢查。
四個檢核習慣:唔係我發明,係我點用
網上、課程、Cursor 對話入面,都有人講 寫資料庫查詢時四類常見錯誤。我 唔係原作者,亦唔打算裝專家;我只係把佢哋整理成 四個檢核習慣,每次改後端接口都逐項對:
- 聽明 四類錯誤係乜(下面用日常語重述)
- 寫入專案:清單文件、合併前打勾表、本機掃描指令
- 本文寫我嘅理解;若你睇 OWASP、Drizzle 等公開文件,會見到同一類原則,只係表述唔同
若規則係你從文章、課程或 AI 對話整理而來,讀者唔需要知道你「發明」咗咩;老實寫一句來源或「整理自常見做法」,再寫明你已放入專案、會跟住做,已經足夠。清單將來加項、改字,只係你產品演進,唔使同某位原作者逐字對齊。
四項檢核係乜(用比喻講)
| 檢核項 | 日常意思 | 點解 AI 易錯 |
|---|---|---|
| 第 1 項 | 用戶輸入只准填 格子內,唔准改 表格格式 | AI 愛用「原始 SQL 字串」一貼就貼 |
| 第 2 項 | 唔好 先砌好半句查詢 再話「已經安全」 | 最似安全、人手最易漏 |
| 第 3 項 | 排序、欄位好似 餐牌:只得幾款揀,唔可以自創菜名 | 列表頁加「點排序」參數時好易中招 |
| 第 4 項 | 搜尋關鍵字要 處理萬用字元;一堆編號要用 安全清單方式,唔好一串逗號砌落去 | 複製搜尋功能時常漏其中一步 |
每項檢核都會漏:自動掃描好似 門口探測器,唔係 全屋保安系統。通過掃描,只代表 冇撞到最常見嗰幾種錯,唔代表 權限、業務邏輯 啱。尤其第 2 項同 「呢個老師可唔可以睇呢份功課」 無關;後者係下面「大堂以外」要守嘅事。
交功課站有一個 老師睇繳交列表 嘅接口,當 安全寫法範例 放喺專案入面。我改新功能時會叫 Cursor 跟嗰份做,而唔係由零描述成個系統。
大堂以外:四個檢核習慣守唔到嘅嘢
我習慣當交功課站係 一間學校大樓:四個檢核習慣主要守 圖書館櫃位點搵書(資料庫查詢);但 入唔入到大樓、入邊間課室、帶唔帶到假文件,要靠其他層。以下係我 同一時期 有做、亦建議初學者逐層加嘅(專案內有完整權限說明):
1. 大門:登入
Better Auth(Google、電郵連結)負責「你係邊個」。未登入就唔應該讀寫學生資料。
比喻:校門保安睇證;再靚嘅查詢,未登入都唔該執行。
2. 房卡:角色同「係咪你嘅班/你嘅作業」
登入只證明身份;仲要問:呢個人係老師定學生?係咪呢份作業嘅建立者?學生係咪已加入呢個班?
AI 好易寫出「查得到資料」,但 冇驗係咪作業建立者,改一改網址編號就睇到他人功課。呢個 唔係 SQL 注入,但對教學站 更致命。
3. 防撞門:速率限制同人機驗證
- Turnstile(Cloudflare 人機驗證):減少機器人狂試登入、狂上傳。
- 資料庫計數限流:例如加入班、上傳、改個人資料,超過次數就暫停。
比喻:唔俾有人一秒撞校門一百次。
4. 假送貨:防止偽造請求同多餘欄位
已登入用戶改資料時,網站要帶 防偽造請求代幣(專案內有統一請求方式),並確認請求 來自你自家網站。寫入時亦 拒絕表格以外多咗嘅欄位(避免有人順手改「角色」變管理員)。
比喻:職員只收表格上印明嘅欄位,唔收貼紙上額外要求。
5. 假文件:上傳檢查
副檔名同檔案類型白名單之外,再讀 檔案開頭特徵,避免「改個 PDF 名其實係程式」。
比喻:快遞要開箱驗一眼,唔係只睇外箱標籤。
6. 閉路電視:操作紀錄
登入、上傳、發布作業、改分等,寫入 操作紀錄;出事時知 幾時、邊個帳、做咗乜類型操作(唔係萬能,但好過冇)。
7. 鎖匙唔貼牆:通行碼同密鑰
WhatsApp、郵件、資料庫 通行碼 放伺服器設定,唔好放上公開 GitHub,唔好貼去聊天群。
(連載 第 5 篇 講過 Meta 通道;原則一樣。)
8. 自動看門犬:合併前檢查同依賴掃描
改後端接口時,自動流程會跑 SQL 危險寫法掃描;套件有更新會跑 已知漏洞檢查。
比喻:探測器加巡邏犬;有用,但 你仍然要行一圈、自己對一對。
我點同 Cursor 合作:講清楚範圍同驗收
我 預設 AI 寫出嚟嘅程式可能唔安全,所以盡量跟專案內文件學,而唔係背晒術語。
每次改到資料庫,我會:
- 開對專案(交功課站,唔係 Blog)
- 附上 SQL 檢查清單,或話「跟老師繳交列表嗰個接口嘅寫法」
- 講清範圍:今次只做乜、邊啲檔案唔好改(同 第 6 篇 講嘅一樣)
- 改完兩關:跑本機 SQL 掃描(或等自動檢查)+ 自己對照四個檢核習慣問「惡意輸入會點」
- 收工前 可以開一段「唔改程式,只列今晚上線前檢查項」對話,對照上線清單
對 AI 講嘢,我會用 短而具體嘅限制,例如:
只改老師繳交列表相關檔案;搜尋同排序要跟專案內安全範例;禁止把用戶輸入拼進 SQL;改完話我知要跑邊條檢查指令。
呢句 唔保證 佢一次啱,但會減少「順手幫你重寫成個系統」。
初學者可以點開始(唔使一次做晒)
| 你而家嘅階段 | 建議 |
|---|---|
| 只得 Astro 靜態 Blog | 四個檢核習慣暫時用唔著;先記 分專案、唔好混改錯地方 |
| 剛加資料庫 | 第一個列表功能之前 抄一份清單 + 一個安全範例 + 一條本機掃描指令 |
| 已有登入同上傳 | 四個檢核習慣 加上 權限、Turnstile、上傳檢查;唔好以為「有查詢工具就夠」 |
| 規則係跟書籍、文章或 AI 整理 | 在專案說明開頭註明來源或「整理自常見做法」;重點係你有清單、有檢查 |
我學到嘅一句
四個檢核習慣唔係裝飾,係因為 AI 寫得快過我跟得快,而我預設佢會錯。
大堂(登入、權限、防刷、上傳、紀錄)同圖書館(查詢)要 一齊諗。自動檢查通過,只代表 探測器冇響,唔代表 家長問起你答得到。
若你只記一件事:用戶輸入一律當「可能惡意」,跟住追「佢入到邊、查到邊、改到邊」,你已經好過好多「相信 AI 話已完成」嘅狀態。
讀完可以帶走乜
任何有 登入、資料庫、上傳 嘅網站,都可以喺 你自己專案 準備四樣嘢:
- 一頁紙清單:寫低四個檢核習慣(參數化、唔好半拼、排序白名單、搜尋同清單要小心),每次改後端接口逐項打勾。
- 一個安全範例:揀一個列表或搜尋功能,寫到「正確做法」,之後叫 AI 跟呢份做,唔好由零估。
- 一道合併前檢查:本機或自動流程跑危險寫法掃描;紅咗就停,唔好當裝飾。
- 一頁權限說明:邊個角色可以做乜、上傳點驗、點防刷;同四個檢核習慣分開寫,唔好混在一齊。
我自己都係咁做:清單同打勾表寫喺專案內,每次改功能前翻一次。你照同樣 結構 寫自己版本就夠,唔使理我邊個檔名。
本文講 點解要守、點諗、點同 AI 合作;平台同工具會變,但 「用戶輸入當可能惡意、改完要對清單」 唔會變。
常見問題 FAQ
「四個檢核習慣」係你發明嘅嗎?
唔係。內容整理自常見 SQL 防注入做法(參數化、禁半拼、排序白名單、搜尋與清單要小心),再寫入交功課站專案嘅清單同自動掃描。「四個檢核習慣」只係我幫自己記住:改後端接口時要逐項對一對。
四個檢核習慣同登入、Turnstile 有咩分別?
四項主要守「點樣查資料庫」;登入、權限、防刷、人機驗證、上傳檢查係大堂同房間門卡,兩邊都要做,唔可以只做其中一邊。
有自動掃描係咪就可以唔睇?
唔可以。掃描好似門口金屬探測器,會漏小物件;改完仍要人手對照清單,問一句「惡意輸入會點」。
About me
你好,我係阿丸。呢度以數位主權為核心,分享點樣用 AI 幫手整網頁、建立吸客贈品頁、整理內容同上線作品, 目標係幫你用更短時間把內容同網站做成可帶走、可維護嘅自有資產。
我會持續更新可跟做嘅教學、踩坑記錄同流程模板,等你唔使被平台黑盒綁死,亦唔使再由零重複試錯。
同時呢度會多寫一人公司最常遇到嘅訂閱制現實:工具加價、用量隱形成本、平台綁定風險, 同埋點樣用可執行嘅做法,將名單、主站同漏斗慢慢揸返喺自己手度。
你會見到嘅內容包括:支出檢視框架、用量上限與警報、搬遷前準備同主權策略;目標唔係一夜換晒工具, 而係先止血,再建立長期可維護嘅自有資產。
想先攞可跟做模板同檢查清單?
先由免費吸客贈品包開始,將文章做法變成你可即用嘅落地清單,再按需要對照服務範圍安排下一步。
想睇合作模式同交付範圍,可先睇服務與合作方式。