|
如果你有在使用 AI 開發 WordPress 外掛,並且要設計一些自訂的後台管理介面時,一定遇過資料送出時無法正確儲存,或是儲存後被導向到奇怪的頁面。 根據我的經驗,這十之八九是 Nonce 的問題,AI 在處理 Nonce 這一塊常常會出錯,為了讓 AI 更好地理解該怎麼處理 Nonce,這篇文章就來分享 Nonce 的作用,以及如何讓 AI 不要再犯這種錯。 Nonce 是為了擋 CSRF 而生的所謂的 Nonce,最主要的功能是要防止跨站請求偽造(也就是俗稱的 CSRF)。 CSRF 主要的攻擊方式,是攻擊者誘導已經登入受害者的瀏覽器,自動發送請求到你的網站,也就是說,攻擊者不需要入侵你的網站,只要你的瀏覽器在登入狀態下點擊了惡意網址,攻擊就會開始。 舉個例子:
另一種方式,是用 JavaScript 自動提交表單來攻擊。只要你的分頁沒關、進入惡意網址,而惡意網址又知道你的後台位置,它就能進行跨站請求偽造,達成攻擊,而 WordPress 的後台網址你知、我知、獨眼龍也知,因此非常容易用釣魚的手法誘使受害者點擊。 Nonce 怎麼擋住 CSRF為了解決這個問題,WordPress 設計了 Nonce 機制,用來確保每一個請求都是從自己的網站送出的。Nonce 的全名是 Number Used Once,也就是只用一次的數字,但這個名字其實有點誤導,因為它預設的有效期限是 12 到 24 個小時。 它的運作原理適當使用者載入網站的某個介面(後台、設定頁、表單頁)時,伺服器會用 當使用者按下按鈕觸發操作時,前端會把這個 Nonce 跟其他資料一起送回伺服器。伺服器收到後,用 它能擋住 CSRF 是因為計算 Nonce 的時候帶了 Secret Key(存在 但光有 Nonce 還不夠WordPress 的前台與後台雖然都有 Nonce,但光靠 Nonce 其實是不夠的。 關鍵點在假設今天攻擊者註冊成為你的網站會員(例如訂閱者),當他登入後打開外掛的某個前台頁面,伺服器就會為他產生一個合法的 Nonce,這時他拿到這個 Nonce,就可以放到自己準備的請求中,藉此發送一個「合法的」跨站偽造請求。 所以,除了 Nonce 之外,我們還要檢查身分權限,確保目前的使用者真的有權限執行當下的行為。 基本原則是:如果要防止 CSRF,同時也防止低權限使用者拿到 Nonce 來偷襲,記得除了驗證 Nonce 之外,還必須檢查使用者權限,尤其是當後台操作會修改資料庫,或查詢敏感機密資料時,都要做到 Nonce 與使用者權限的雙重檢查。 一張票進 VIP 廳?想像電影院的剪票口換個方式理解這件事——想像你去看電影:
回到 WordPress: 電影院WordPress 對應API防什麼票nonce 兩道防線缺一不可:
AI 寫 Nonce 最常犯的錯:名稱對不上一個 AI 常犯的問題是它在埋入表單頁面的 Nonce 名稱,跟後端驗證時用的名稱常常不一致,一個頁面中可能同時有多個表單操作行為,AI 很容易搞混特定的 Nonce 應該用在哪一個動作上。 比較好的做法是:
簡單舉例,可以請 AI 先列出像這樣的對照表再開始寫程式碼: 表單行為Nonce action 名稱Nonce 欄位名驗證點儲存設定 把這張表給 AI 當「規格」,再讓它寫程式碼就能大幅降低 Nonce 名稱錯亂的機率。 接案者的自我檢查清單接到的案子要稽核安全,或自己用 AI 寫的時候要避雷,可以照這個清單檢查每一個
四個都做到,才算「我加了 nonce 啊」這句話真的成立。 如果想看完整的 WordPress 外掛安全稽核流程,可以接著看逆向走一次 WordPress 外掛漏洞,學會資安稽核的攻擊者思維;如果是 XSS 那一塊還沒讀過,WordPress XSS 攻擊:漏洞成因與真實 CVE 攻擊案例會把另一條漏洞線補上。整站層級的弱密碼、檔案竄改、XML-RPC 防護則整理在WordPress 安全防護實戰這篇。 — 用 AI 寫 WordPress 外掛踩到坑想找人聊聊?如果你正在用 AI 開發 WordPress 外掛或客製化網站,但每次遇到 Nonce、權限、漏洞這類安全問題就卡住,或者寫出來的程式碼自己也不確定有沒有藏雷——歡迎來聊聊。 我提供兩種服務:
不取代你開發,而是讓你的 AI 開發流程不會踩到因為 Nonce 而造成的卡關。 歡迎到 WordPress AI 開發顧問服務 看完整方案,或與我聯絡聊聊你的案子。 |
之前朋友約出來喝咖啡時他分享下一個階段的 AI 可能會發展成監督式的 AI,也就是當 AI 自己在跑的時候,會有另外一個 AI 來檢查它現在做的每一件事情是否都真的有往正確的方向推進。 當下聽到覺得這個 idea 很棒,但具體要怎麼實作完全沒有概念,更不用說這樣子 token 消耗的成本會不會變成兩倍?而且監督 AI 的 AI 需要有什麼能力?該以哪一種方式來進行監督?然後又該如何把找出的問題回報給原本的 AI 呢? 這一切問題在我最近研究 Claude Code 以外的工具時意外發現了解決方案,那就是之前我拿來做為 Discord Bot 的 AI 引擎 OMP。 OMP 是 PI 的分支,想理解什麼是 OMP 可以先從 PI 開始理解,PI 是一套開源且輕量化的 Coding CLI,也是跟 Claude Code 一樣跑在終端機的寫程式 Agent。 相較於 Claude Code 的封閉,PI 完全開源,並且支援多家不同的模型,PI 強調有需要什麼工具再自己額外安裝,就不會像 Claude Code 一樣原廠給你什麼就只能用什麼。 而 OMP 是 PI 的分支,它的概念跟...
之前分享我請 AI 設計的一套專門用來管理手邊待辦清單的專案管理軟體,邊用的時候我就在邊思考著:當我新增這些任務之後,我還是要回到終端機去把這些任務的描述、相關的文件以及完成的目標告訴 AI,然後等它跑完之後我再驗收,再回到我的計時軟體裡面來記錄是已完成還是該暫停。 如果可以在開立任務的時候,就能直接指派 AI 來做這件事情,是不是就可以少一個重複描述、開發需求的流程?剛好有了這個想法之後,就在 YouTube 上面看到一個叫做 Auto Claude 的專案。 它把 Claude 直接跟看板軟體整合,並且可以在裡面詢問 AI 關於專案的細節以及產生開發藍圖,也能設定專案的亮點與相關資訊。 我看到後驚為天人,覺得這似乎是另外一種理想的 AI 開發軟體,本想直接下載裝起來用,但請 Claude 研究後發現它有一些問題,於是就想說自己來開發,順便理解關於整個 Loop Engineering 的概念。 Claude Orchestrator 這次一樣是使用 Glaze 來開發,請它建立好專案的環境之後,然後再回到終端機去接手後續的多工並行。我的做法是先請 AI 去參考 Auto...
常常在社群媒體上看到各種自動化工具的廣告,從早期的 n8n 開始到現在 AI Agent 自動完成任務,這些工具跟流程都很棒。但是回到使用者本身,我們真的知道自己有哪些工作是可以被自動化或是應該「自動化」的嗎? 這就讓我回想起以前給自己的工作要求,那就是要把手上所做的每一件事情都記錄下來,並且可以明確看到每項任務的執行時間以及頻率,這樣事後才有辦法做回顧,我把這樣的理念也應用到承接專案的層面上。 這也是為什麼我有一些專案都是採取時薪計價的開發模式,因為我需要讓客戶知道他的預算都花在哪些項目,來藉此把資源用在合適的任務上。 我最早使用的即時軟體叫做 Ora,這是一套結合看板管理、敏捷開發流程、時數統計,甚至還有內建聊天討論串的一套強大工具。 它長期都是免費的,付費方案是團隊成員超過計算,所以我都是使用它來進行與客戶的專案管理,它的介面十分清楚且一目瞭然,可以縱觀地知道是哪一類型的任務花最多時間,也可以細看到具體是在處理哪一個問題所消耗的時數。 但當某天我打開準備使用它的時候,發現它被另外一套專案管理軟體 ClickUp...