用 AI 寫程式安全嗎?學會像壞人一樣檢查你的網站

技術分享

AI 文章延伸

AI 幫你讀這篇文章

選擇平台後可直接帶入閱讀脈絡,快速整理重點、補齊盲點,並延伸到同站相關文章。

用 AI 寫程式安全嗎?我們的答案很直接:能跑,不等於安全。AI 幫你做出來的功能,多半第一次就能正常運作,但「會不會被有心人鑽漏洞」這件事,AI 通常不會主動幫你想,而這正是最常出事的地方。

大部分工程師檢查一段程式的習慣,是打開來找「哪裡寫錯了」,我們的做法剛好相反,先扮一次壞人,盯著這個東西問一句:「如果我想搞破壞,它能讓我做什麼?」等你想清楚要怎麼攻擊它,哪幾道該裝沒裝的鎖,自然就浮出來了。

這篇我們用一個 AI 很可能會寫出來的例子,從頭到尾走一遍,全程不需要你看得懂任何程式碼,只要跟著「壞人會怎麼想」就好。

一個「看起來很正常」的小功能

以 WordPress 後台為例,很多外掛會在後台給你一個設定頁,讓你改一些基本資料,例如網站顯示的名稱、客服信箱。負責把這些修改存起來的,是一個我們姑且叫它「收件窗口」的東西——你在後台按下儲存,資料就從你的瀏覽器送到這個窗口,窗口收下、存檔,完成。

AI 寫出來的版本大概長這樣,看不懂沒關係,重點在後面的白話拆解:

add_action( 'wp_ajax_update_setting', 'my_update_setting' );
add_action( 'wp_ajax_nopriv_update_setting', 'my_update_setting' );

function my_update_setting() {
    $key   = $_POST['key'];
    $value = $_POST['value'];
    update_option( $key, $value );
    wp_send_json_success();
}

這段東西完全能正常運作,你在後台改設定,它確實會存,測起來一切正常。如果只是「功能驗收」,它百分之百過關,問題是壞人不會照你設計的流程走。

第一步:先當壞人,問「我能拿它做什麼」

別急著挑毛病,先把自己放到攻擊者的位子上,這個窗口等於白白送了壞人三樣東西。

第一,這個窗口對「所有人」開放,連沒登入、根本不是這個網站會員的路人,都能直接戳它。第二,它不挑你要改什麼,你說要改哪一項設定、改成什麼內容,它照單全收,沒有一張「只准改這幾項」的清單把關。第三,它能改的,還是網站最核心的那一批總開關。

這三件事湊在一起,壞人不需要什麼高深技術,只要從外面送出一句話般的請求,就能叫這個窗口去動手。

最簡單的玩法,是把網站的「家門地址」改成壞人自己的網址,之後每個訪客一進門,瀏覽器都會被直接帶去壞人那邊,可以是假的登入頁、可以是廣告轉址、也可以是惡意程式的下載連結。

還有更狠的:把「開放任何人註冊」這個開關打開,再把新註冊的人預設成最高權限的管理員,下一秒,任何路人都能幫自己開一個帳號、直接變成你網站的主人,到這一步,整個網站就拱手讓人了。

第二步:回頭看,哪幾道鎖根本沒裝

現在切回防守的視角。剛剛壞人能一句話就得手,是因為這個窗口少裝了四道鎖。

第一道,一次性通行證:要能確認「這個動作真的是本人剛剛在後台按的」,而不是本人在別的地方被騙著點了一個連結、就在不知情的狀況下觸發了修改。

第二道,查身分:要確認「按下這個動作的人,到底有沒有資格做這件事」,而不是任何人來都照做。

第三道,關掉對外的門:這種後台設定,本來就不該開放給沒登入的路人,這扇門根本不該存在。

第四道,只准改講好的那幾項:與其讓窗口什麼設定都能改,不如事先列一張清單,清單以外的一律拒絕。

這裡有個最容易被忽略的重點:這四道鎖不是「裝一道就夠」的關係,少任何一道都已經是破綻,四道全沒就是整個網站被接管,所以做檢查的時候,不要抓到一個問題就收手,要繼續追問「還有什麼該擋沒擋的」,這就是資安裡常講的「多道防線」——一道被突破,後面還有別的擋著。我們之前在串接金流時談過同樣的道理,把好幾關串起來,少一關都不放行。

第三步:把鎖補齊,而且要一次補滿

補救不是「隨手加一道」就交差,而是讓四道鎖同時存在。對應回前面四件事,就是四個動作:把那扇對所有路人開放的門關掉、加上一次性通行證的檢查、加上查身分的關卡,再用一張清單把「能改的設定」限死在你預期的範圍內。

你可以試著想像,把這四道裡的任何一道拿掉,這個窗口都還是有風險,這就是為什麼補救要當成一整組來做,而不是補完第一個洞就以為沒事了。

第四步:把這次的教訓濃縮成一句口訣

拆完一個例子,重點不是記住這個例子本身,而是萃取出一條規則,讓你下次看到類似的東西,一眼就認得出該檢查什麼。

往後只要看到一個「能讓外面的人改網站東西」的窗口,立刻問四件事:有沒有確認是本人剛剛按的?有沒有查這個人有沒有資格?這個窗口是不是不小心對所有人都開放了?它能改的東西,有沒有限制在「只准改這幾項」?

有了這條口訣,下次檢查的時候,你的注意力會直接跳到這四個點上,而不是從頭一行一行慢慢讀。零散的「安全注意事項」就這樣變成一套可以重複跑的檢查動作。

為什麼用 AI 寫程式的人,更需要這套思維

前面那個什麼設定都能改的窗口,正是 AI 寫程式時很容易生出來的東西,原因不複雜:AI 只回答你問的問題,你叫它「做一個能存後台設定的功能」,它會給你一個能跑的版本,但通行證、查身分、白名單這些「你沒明講、少了卻會出事」的防護,它預設不會主動補上,這跟我們先前談過的觀察一致——AI 是放大器,只會把你問到的做好,你沒問的,它幫不了你。

所以如果你正在用 AI 加速開發,這套「先當壞人、再回頭補鎖」的思維,能讓你在確認「能跑」之後,再用攻擊者的眼睛把剛寫好的東西掃一遍。功能測得過,不代表擋得住壞人,這兩件事要分開驗。想看這套思維落到更技術層面的完整版本,可以接著讀我們拆解的 AI 寫 WordPress 外掛最容易漏掉的三個盲點

延伸思考

這套「先當壞人再補鎖」的思維很好用,但它有個前提值得記住:你只擋得住「想得到」的攻擊,像近年那種用 AI 模擬完整使用者流程、再夾帶精準測試的手法,光靠想像補不上,得另外用「平常流量長什麼樣」當基準線才認得出來。白名單這一道也一樣,當能填的內容變得很自由(例如開放上傳檔案、貼長文),就很難事先列得完,得換別的防法。

其他領域早就有同樣的智慧,航空和醫療界的「瑞士起司模型」說得最傳神——每一片防護都有洞,但把多片錯開疊起來,光就透不過去,這正呼應「四道鎖少一道都算破綻」。先假設自己會失敗、再回頭推哪裡會破,也是企業做「事前驗屍」、資安團隊做「紅隊演練」共用的招式。

關鍵概念:攻擊者思維稽核縱深防禦

常見問題

我不會寫程式,要怎麼確認 AI 幫我寫的東西安不安全?

你不需要看懂程式碼,但可以用這篇的四個問題去「拷問」AI:這個功能有沒有確認操作的人是本人、有沒有查身分、是不是不小心對所有人開放、能改的範圍有沒有限制。把這四題丟回去要求 AI 逐一檢查並補齊,就能擋掉大部分最常見的破綻。

網站突然被導去別的網址,是被駭了嗎?

很可能是。如果訪客一進你的網站就被自動帶去陌生的頁面,常見原因之一就是有人改掉了網站的核心設定。建議先確認後台還進不進得去、設定有沒有被動過,並儘快檢查是哪個環節讓外人有機會修改設定。

這套「像攻擊者一樣思考」的檢查,只適用 WordPress 嗎?

不只。任何「接收外部資料、然後動手改東西」的功能都適用,不管它跑在什麼平台。核心都是同一句:先假設有人想惡意利用它,再回頭看少裝了哪幾道鎖。


如果你正在用 AI 加速開發,想把「能跑」之後的安全這一關補起來,我們的 WordPress AI 顧問諮詢服務可以幫你把這套檢查變成每次都會跑的固定流程,也歡迎直接加 LINE 官方帳號,聊聊你目前的狀況。

Google 偏好來源

把我們設為 Google 偏好來源

喜歡我們的內容嗎?一鍵將我們設為偏好來源,未來在 Google 焦點新聞與 AI 概覽中就能優先看到我們的文章。

作品案例

看看我們打造的產品與專案。從 WordPress 外掛到 AI 客服方案,每一個作品都是實戰經驗的累積。

瀏覽作品案例

服務項目

WordPress 開發、WooCommerce 電商、LINE 整合、AI 解決方案,依據你的需求提供最適合的技術服務。

瀏覽服務項目

Contact

聯絡我們

有任何技術需求、專案諮詢或合作想法,歡迎填寫以下表單或聯繫LINE官方帳號,我們會盡快回覆。

諮詢類型 必須