多數人一聊 WordPress 資安,想到的都是外掛更新、防火牆、雙重驗證這幾件事,很少人會想到後台裡就藏著一個現成的破口,而且不是外掛帶來的漏洞,是 WordPress 核心內建、預設開著的功能。外觀底下的「佈景主題檔案編輯器」、外掛底下的「外掛檔案編輯器」,讓任何系統管理員直接在瀏覽器裡打開並修改佈景主題與外掛的 PHP 原始碼,存檔就立刻在正式站生效,不用 FTP,不用 SSH,也不用安裝任何額外工具。
方便歸方便,這個功能同時也常是駭客拿到後台權限之後最先動用的工具。不管對方是靠猜中弱密碼、一封釣魚信,還是某個外掛本身的漏洞混進來的,只要能登入,WordPress檔案編輯器就是植入後門最快、最不留痕跡的一條路。好消息是,把它關掉不需要裝任何資安外掛,在 wp-config.php 加一行設定就能做到。
佈景主題與外掛檔案編輯器是什麼?
WordPress 後台裡有兩個功能,形式一模一樣,只是管的檔案不同。外觀底下的「佈景主題檔案編輯器」讓使用者直接編輯已安裝佈景主題(預設開啟的是目前啟用中的那一個)的 PHP、CSS 檔案;外掛底下的「外掛檔案編輯器」則是編輯已安裝外掛的原始碼。如果站台用的是區塊佈景主題(Full Site Editing),這兩個入口有時候會被歸到「工具」分類底下,但功能完全一樣,都是在瀏覽器裡直接改程式碼、存檔即生效。
這兩個編輯器是 WordPress 核心內建的功能,不需要另外安裝任何東西,而且預設對所有系統管理員角色開放。它原本的用途很單純,讓人能快速修一行程式碼、除錯,或臨時調整一段樣式,省下切換到 FTP 軟體的麻煩。問題是,多數站主根本不知道這兩個入口存在,更不會想到,一個方便自己除錯的工具,同時也方便任何拿到系統管理員帳號的人。
編輯器讓攻擊者不需要碰主機就能寫後門
駭客要拿到 WordPress 後台的系統管理員帳號,管道不算少,猜中一組弱密碼、釣魚信騙到登入資訊、或是利用某個外掛本身的安全漏洞混進來,都有可能。一旦拿到這個帳號,檔案編輯器就是下一步最直接的選項。不用碰主機,不用知道 FTP 帳密,只要在瀏覽器裡打開任何一個外掛檔案,貼一段後門程式碼,存檔就立刻生效。
這段後門一旦寫進去,就會獨立於原本的入侵管道存在。就算網站管理員後來把弱密碼改掉、把有漏洞的外掛更新了,藏在某個檔案角落的這段程式碼還是留在網站裡,讓攻擊者隨時能再進來一次。這也是為什麼 WordPress 官方文件把檔案編輯器點名成攻擊者一旦能登入後台,往往最先動用的工具,理由也很直接,它能讓攻擊者立即執行任意程式碼。

只要在 wp-config.php 加一行程式碼
擋掉這個風險不需要裝任何外掛,只要在 wp-config.php 這個檔案裡加一行設定,define( 'DISALLOW_FILE_EDIT', true );。wp-config.php 是 WordPress 網站根目錄下的核心設定檔,資料庫連線資訊、資安金鑰這些設定也都寫在這裡。官方文件講得很明確,加上這一行的效果,等同於一次拿掉所有使用者的三個能力,edit_themes、edit_plugins、edit_files,也就是佈景主題編輯、外掛編輯、檔案編輯這三項權限全部一次關閉,跟帳號是不是系統管理員無關。
定義要放在「stop editing」提示那行之前
wp-config.php 的檔案範本裡,本來就有一行提示,大意是設定到這裡就結束、接下來開始寫程式。把 DISALLOW_FILE_EDIT 這行加在這行提示之前的任何位置都可以。如果檔案裡已經有一行一樣的設定,例如某個外掛先前寫入過,直接把那一行的值改成 true 就好,不要在下面重複再加一行。同一個常數被定義兩次,PHP 不會讓網站當掉,但只有第一次寫的那個值算數,後面重複的那行會被直接忽略——結果就是改了半天,設定其實沒生效,卻誤以為已經關掉了。動手改之前,先把 wp-config.php 備份一份,或整站備份一次,改壞了才有得救。編輯這個檔案可以用主機商後台的檔案總管,或是 SFTP 軟體登入伺服器修改。
沒有主機檔案存取權時的替代做法
不是每個站主都有 FTP、SFTP 或主機控制台的存取權限,尤其是網站交給別人代管的情況。真的碰不到伺服器檔案,還有三條路可以走。請平常維運網站的人,或主機商的客服,代為加入這一行設定;多數綜合型資安外掛都有「一鍵硬化」的功能表,裡面通常就包含這個開關,不用手動改檔案;或是透過「程式碼片段管理」類的外掛,新增一段自訂 PHP 來達到同樣效果,比直接手動改核心設定檔更不容易因為打錯一個字元而讓網站掛掉。不管走哪一條路,設定加完之後都要回頭確認它真的生效了。
連系統管理員也會一併失去編輯權限
設定生效之後,後台的樣子會跟著變。外觀底下的「佈景主題檔案編輯器」、外掛底下的「外掛檔案編輯器」這兩個選單項目會直接消失,而且是對所有帳號都消失,包括網站自己的系統管理員。這是因為 DISALLOW_FILE_EDIT 拿掉的是一種能力,不是針對某個帳號的權限開關,所以沒有例外。就算有人事先把舊的編輯器網址存成書籤,直接打開網址想進去,看到的也只會是一個權限不足的錯誤頁,進不去。
要確認設定真的加上去了,用系統管理員帳號登入後台,檢查外觀與外掛底下還有沒有這兩個選單項目就好,不用清快取,也不用重開網站,設定一存檔就立刻生效。
這個設定擋得住與擋不住的入侵路徑
先把話講清楚,這個設定擋的是一個很具體的動作,攻擊者已經拿到後台系統管理員權限之後,想透過內建的編輯器,把後門程式碼直接寫進現有佈景主題或外掛檔案。這一步被擋掉,等於拿掉攻擊者手上最快、最方便的那個選項。
但它擋不住的事至少有三件。第一,攻擊者一開始怎麼拿到系統管理員帳號,跟這個設定完全無關,弱密碼、憑證外洩、釣魚信、或另一個外掛本身的漏洞,這些管道一個都不會因為關掉檔案編輯器而變安全。第二,攻擊者可以改用編輯器以外的管道上傳惡意檔案,例如某個外掛的檔案上傳功能本身有漏洞、FTP 或 SSH 帳密外洩、或主機層級的其他弱點。第三,如果網站在設定這個開關之前就已經被植入惡意程式或後門,這個設定不會把既有的東西清掉,它只防止之後再用這條路徑加新的進來。
WordPress 官方文件對這點的定調也很直接,這個設定不會阻止攻擊者把惡意檔案上傳到網站,但可能擋下其中一部分攻擊。換句話說,它是一道防線,不是萬用解。
DISALLOW_FILE_EDIT 與 DISALLOW_FILE_MODS 差在要不要一併擋更新
另一個常被搞混的常數是 DISALLOW_FILE_MODS,名字跟 DISALLOW_FILE_EDIT 只差兩個字,涵蓋的範圍卻大得多。設定 DISALLOW_FILE_MODS 除了會關掉兩個檔案編輯器,還會連後台裡安裝、更新外掛與佈景主題的功能一起擋掉。官方文件講得很明確,DISALLOW_FILE_MODS 本身就已經包含 DISALLOW_FILE_EDIT 的效果,兩個常數不必同時設定。

但這裡有個取捨要留意。WordPress 官方的資安強化文件也一再提醒,WordPress 核心與外掛都要隨時更新到最新版本。把更新功能整個關掉,等於用少擋一個風險,換來多一個維運隱患,如果沒有人記得定期手動更新,已知的安全漏洞反而會在網站上留得更久。因此多數站台只需要設定比較保守的 DISALLOW_FILE_EDIT 就夠了;只有本來就走本機開發或測試站改版、透過版本控制部署、後台完全不透過網頁介面安裝外掛的進階站台,才需要考慮加開 DISALLOW_FILE_MODS。
少數外掛會因為這個設定跟著故障
這個設定唯一比較常見的副作用,跟外掛的寫法有關。部分外掛的程式碼裡,會用 current_user_can('edit_plugins') 這個判斷式來檢查使用者的權限,不一定真的跟檔案編輯功能有關,只是借用了同一個能力名稱來做別的判斷。一旦 DISALLOW_FILE_EDIT 把 edit_plugins 這個能力整批拿掉,那些外掛裡依賴這個判斷的功能,就可能連帶被跳過,或是跳出讓人摸不著頭緒的錯誤訊息。
這個副作用是官方文件自己承認的,不是誇大的說法,而且影響範圍是少數外掛,不是普遍現象。如果啟用這個設定之後,某個外掛的某項功能忽然不見了,或跳出奇怪的錯誤,第一個該懷疑的就是這個設定,可以先把它暫時改回 false 測試排除,確認問題是不是出在這裡,而不是急著重灌外掛,或直接找工程師求助。
真的要改程式碼,用這三種方式取代編輯器
停用編輯器之後,日常還是會有需要動到程式碼的時候,這裡有三條實際可行的替代路徑。
- 單純調整版面樣式(顏色、間距、字型這類):用外觀底下「自訂」內建的自訂 CSS 面板就能做,這條路本來就不經過檔案編輯器,完全不受這個設定影響。
- 真的需要改 PHP:透過主機商提供的線上檔案總管,或 FTP、SFTP 軟體,先在本機端或測試站改好,確認沒有語法錯誤、網站功能正常,再上傳覆蓋到正式站。
- 長期會頻繁調整程式碼的站台:搭配版本控制留下修改紀錄,或找固定配合的網站維運服務走測試站流程,不要為了單次的小修改就把
DISALLOW_FILE_EDIT改回 false,改完又忘記改回去,那樣等於讓這道防線形同虛設。
三條路殊途同歸,重點是遇到真的要改程式碼的時候,找得到不必打開後門編輯器的辦法,而不是圖方便就把設定改回去。
DISALLOW_FILE_EDIT 不是什麼複雜的資安工程,就是 wp-config.php 裡的一行設定,卻能拿掉駭客拿到後台之後最順手的那一步。它擋不住帳號一開始怎麼被攻破,也不是遇到麻煩就該關掉的東西,設定好之後,把它當成網站長期保留的一道防線,會比裝再多防護外掛都更實際。
