用 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 官方帳號,聊聊你目前的狀況。

作品案例

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

瀏覽作品案例

服務項目

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

瀏覽服務項目

Contact

聯絡我們

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

諮詢類型 必須