WordPress 架站好用但安全嗎?過來人談資安風險與防護

找架站方案時,你是不是曾經疑惑:為什麼有些以 WordPress 為主力的行銷公司大力推薦 WordPress,另一邊卻有自架平台的公司不斷強調資安疑慮,認為自家開發才最安全?其實這兩種說法並沒有誰對誰錯,畢竟在推廣自家產品時,難免都會強調優點、弱化缺點,用各種話術吸引你下決定。

【本文由GPT4.1修飾文案,拯救我貧乏的用詞…】

雖然我自己的網站也是用 WordPress 架設,但我不偏好任何一邊。
理由很簡單——沒有絕對的好壞,只有適不適合。
如果我有更多時間和資源做一個功能齊全的 CMS 後台,大概也不會用 WordPress。

一、WordPress 或自架平台怎麼選?有多少預算做多少事

在選擇網站架構方案時,許多人會在「WordPress 跟自架平台到底該選哪一個?」這個問題上猶豫。
關於這點,判斷的關鍵還是在於你的預算、需求和維護資源,以下是一些建議:

1. 正確看待 WordPress 能做到的事

WordPress 適合需要「基本形象網站+部落格」的用戶,因為這是 WordPress 的原始標配。 如果你的需求很單純,只要有形象頁面、新聞、文章或作品發佈,WordPress 是一款簡單易用的工具。

但如果你期望的網站功能更複雜(例如:多層管理員權限、會員制、積分系統、特殊的表單或資料流程),可能就需要安裝外掛來實現。這時要注意:

  • 外掛相容性問題:外掛多半是不同開發者寫的,容易發生衝突或升級後出現 bug,導致網站難以維護。
  • 資安疑慮:加裝外掛越多,潛在的漏洞與維護成本也會提升。若非委託有能力自己開發/維護外掛的公司,只用現成外掛,難以完全掌控安全性。

若你需要「高度客製化」或「企業等級」的權限分級與系統流程,建議考慮自架平台或「客製 CMS」。

2. 預算問題:有多少預算做多少事

自架平台就算是套版,預算通常也不會低於10萬,相比之下,WordPress 架站門檻低、花費少。如果你的需求僅止於上述內容,WordPress 是一個經濟實惠的選擇。

不過,如果你打算未來讓網站擁有更多功能,就別為了省錢一直堆積外掛——這麼做只適合暫時用的網站,長遠來看網站會變得肥大。

雖然,也看過某些公司開發的 CMS 功能不如 WordPress。
最保險的做法,是多多比較不同公司提供的後台demo、實際試用再做決定。
不要單看報價,也要評估長期的維護與擴展性。

二、你知道嗎?WordPress 每天都有爬蟲在「敲門」

無時無刻都有爬蟲想登入你的後台

如果你有使用 CDN 或 WAF(網站防火牆)服務,會發現系統每天都擋掉各種針對 WordPress 的爬蟲與攻擊流量。
WordPress 因為市佔率高、預設架構大家都知道,很早就成為自動化爬蟲「掃漏洞」的主要目標。

這些自動化攻擊工具最常嘗試以下幾種方式:

  • 暴力破解後台登入: 不停嘗試常見帳號密碼組合,目標是 /wp-login.php、wp-admin 頁面。
  • 偵測與利用已知外掛、主題漏洞:例如嘗試訪問 /wp-content/plugins/xxx/xxx.php,尋找是否安裝有已知漏洞的外掛。
  • SQL Injection/XSS 注入攻擊:在網址參數或表單中注入惡意語法,企圖繞過安全檢查或控制網站資料庫。
  • 掃描目錄與資訊洩漏: 像是探查 /wp-config.php.samplesetup-config.php 等文件,企圖取得敏感設定或軟體版本資訊。
  • 針對未更新的核心或外掛: 專門掃描舊版程式碼已公開的漏洞,試圖利用這些弱點攻擊。

雖然這些惡意爬蟲也會鎖定一般網站的漏洞(如 Nginx 的 log檔或 .env檔),但實際上,把 WordPress 作為攻擊對象的比例確實非常高,這也是為什麼 WordPress 使用者一定要重視資安防護與更新。

三、駭客未必高明,更多時候是「人為因素」

從上面的路徑來看,會發現網站若正常架設,除非許久不更新,這些路徑幾乎很難被試出來。
但『人』是最容易疏忽的:

  1. 若使用預設登入路徑,帳密又設的超簡單,就有可能被暴力破解
  2. 重複使用跟其他網站相同的帳密,而那些網站發生了資安事件,也有可能被「撞庫」
  3. 從留言欄點了可疑連結,進到危險網站

又或者,在wordpress提供REST API的狀況下,有些敏感資訊可能在你不知道的情況下被揭露。

舉例來說,users其實是相當敏感的API,可以透過這個API猜到可能的帳號及電子信箱,如果再寄封以假亂真的釣魚信件給你,一個不小心可能就雙手奉上密碼了。

就算你不用wordpress,爬蟲一看到能填的表單就會瞎七八亂送;因此,使用者本身具備資安意識是網站維護很重要的一環。

四、資安沒有百分百,能做的防護都別省

不論你是不是用 WordPress 架站,只要網站有價值、有流量,有心人就會想辦法突破防線。防護做得再好,也無法百分之百擋住所有攻擊,但多一分預防、少一分風險。以下是 wordpress 網站建議落實的措施,包含技術防護與日常習慣:

⏹︎ 選擇可信主機+定期自動備份
(技術面+管理面:遇到資安事件能第一時間還原)

⏹︎ 減少不必要外掛/主題,選用有維護的資源
(技術面:降低潛在漏洞)

⏹︎ WordPress 主程式、主題、外掛保持更新
(技術+日常習慣)

⏹︎ 安裝 WAF/CDN 防護
(技術面:阻擋自動化攻擊與爬蟲)

⏹︎ 限制登入嘗試,安裝 Loginizer 或 Wordfence
(技術面:防暴力破解)

⏹︎ 帳號密碼要夠強,不用預設帳號
(管理+人為:避免撞庫)

⏹︎ 更改預設登入路徑
(技術面:減少被自動掃描攻擊)

⏹︎ 啟用 HTTPS(SSL 憑證)
(技術面:保護資料傳輸)

⏹︎ 表單與留言加裝 reCAPTCHA
(技術+管理:阻擋機器人濫用發送社交工程信件)

五、網站安全與維護便利,是一場永無止境的拉鋸戰

在競爭激烈的 WordPress 架站圈,許多行銷設計公司或接案者為了有案源,傾向選擇削價競爭、快速出站。由於手上維護的網站數量已經十分龐大,人力又有限,怕一旦更新外掛或系統就出現問題,因此常「能動就不動」,避免更新以確保網站不會出錯、維護起來省事。

這是一場兩難的選擇:
⏹︎ 更新外掛: 提高安全性,但可能出現 bug 或排版跑版
⏹︎ 不更新外掛: 短期內方便維護,但長遠來看資安風險大幅提升

從乙方的角度來看,在低利潤及高維護成本的狀況下,中間的平衡只能是「網站正常運作就好」,或把部分權限鎖住,避免甲方人為誤觸出現問題。

六、總結

用 WordPress 架站,說穿了就是在「方便、便宜」和「安全」中間找平衡點。其實沒有所謂的萬無一失,重點是持續學習、多關心資安新聞動態,遇到問題時能夠馬上解決,這才是對網站最好的保護。

【MERN】佈署注意事項:記得分離前後端路由

在佈署前,把React.js建立的前端build目錄上傳到主機後,後端API可能會不見,因為路徑被前端覆蓋了。要怎麼解決呢?你需要在Node.js的啟動檔中設定前後端的路徑,將前後端分離。

一、建立前端頁面

1-1. 建立前端頁面之前的所需設定

在MERN專案中,伺服器端(server)與客戶端(client)是分離的,它們都有各自的目錄與package.json檔,第一步需要找到客戶端的package.json,並對 homepage 屬性填入即將佈署的網域,例如:

{
  "name": "mobuyashea",
  "version": "0.1.0",
  "private": true,
  "homepage": "https://mobuyashea.club/",
  "dependencies": {
   //下略

1-2. 生成build資料夾

接著,你需要幫客戶端的內容建立靜態頁面,確定位於client目錄下,於終端機輸入:

npm run build

按下確認鍵後,npm會於client目錄建立一個build資料夾,裡面的內容為前端靜態頁面。

二、MERN佈署時的目錄結構

MERN專案的佈署目錄結構大概如下,外面根目錄放伺服器端的內容,包括啟動檔、伺服器端的package.json、資料表或路由等;build則是客戶端的內容,就是把第一步建立的目錄整包上傳:

/root
|– /build(前端)
|– /models
|– /public
|– /routes
|– server.js (啟動檔)
|– package.json
|– package-lock.json

也可以把伺服器端跟客戶端的目錄完全分開,不過要注意下一步路由的設定,根據路由文件與首頁相對位置的不同,可能會變成“/../client/build”

/root
|– /client/build(前端)
|– /server
|–– server.js (啟動檔)

三、分離MERN專案的前後端路由

打開你的啟動檔(假設文件叫server.js),引入path模組:

const path = require('path');

‘ * ‘ 將所有路由通通歸類於前端頁面,不管訪問哪個路由都返回build目錄下的index.html:

app.get('*', (req, res) => {
  res.sendFile(path.join(__dirname, 'build', 'index.html'));
});
app.get('*', (req, res) => {
  res.sendFile(path.resolve(__dirname, 'build', 'index.html'));
});

用path.join() 簡單的規範路徑,或用path.resolve() 返回絕對路徑,兩者在此範例下返回的是相同的路徑__dirname 是目前文件所處的位置。

四、注意先後順序

撰寫API時,定位前端靜態目錄的程式碼必須位於後端路由之後,後端路由都發配完後才輪到'*'。順序不能優先於其他後端路徑,否則會把其他路徑給覆蓋掉。

【主機管理】讓2個不同域名/網站共用同一個主機

你想要經營第二個網站,但覺得主機的空間還很大,不想再買新主機。那麼,兩個擁有不同域名的網站可以共用一個主機嗎?絕對可以。

以下是你一定要先做的第一步:

第一步、到網域供應商後台設定第二個域名的DNS

到網域供應商的管理後台,設定DNS的A紀錄 以及 CNAME紀錄,才能節省時間,順利進行下一步。

兩個域名共用一主機-更改或新增A RECORD
Record 類型Record 名稱Record 值
A record@填寫主機的IP位址,例如123.199.123.888
A record子網域名稱(選填)填寫主機的IP位址,可跟主網域不同
CNAME recordWWW填寫網域名稱,以本站為例就是mobuyashea.club

修改DNS之後,需要過一段時間才會生效,第二步如果執行失敗,可能是因為DNS設置有誤或尚未生效導致的。

第二步、到主機後台(C-Panel)新增第二個網站的域名

登入主機的CPanel,找到並點選 Domains

想安裝在子網域,點選進入domain頁面

進入網域管理畫面後,點選右上角新增域名(Create A New Domain)按鈕。

新增網域-輸入第二個網域的名稱

Domain 輸入框中,例如 example.com。
確保 Document Root 位於一个新的目錄,例如/home/yourcpenal/example.com

建議不要跟第一個網域共用public_html目錄,如果public_html裡面有第一個網站在運作中,會比較容易混淆。請讓他在File Manager建立最外側一個新的目錄,目錄名稱為第二個網域。

如果第一步的DNS設定有順利完成,新增時應該不會出現錯誤提示。

第三步、把第二個網站的內容上傳到新目錄

把第二個網站的內容打包上傳到上一步建好的新目錄(/home/yourcpenal/example.com),這樣一來,當你輸入第二個網站的網址(example.com),就能看到剛剛上傳的網站。

新站與原本放在public_html目錄的網站有所區隔,實現了不同網域、網站內容放在同一個主機上運作的目標。

【主機管理】如何在C-panel管理介面新增信箱

已經買了主機跟網域,接著想使用自購網域的信箱寄Email,或收發訪客填表訊息嗎?跟著以下步驟,在C-penal後台建立一個專屬的聯絡信箱吧。

進入C-penal主機管理後台,找到Email Accounts,點選進入。

第一次進入,會問你之後要不要直接登入管理畫面(記得是英文,可惜我截不到畫面了),把問題的選項打勾,按下確認送出。

如果英文不好,請善用瀏覽器的英翻中功能,確保能看懂大部分的字

接著就會進到管理畫面,裡面有個系統預設的email帳號(不能刪)。

按右上角的『+Create』按鈕,新增自訂的email使用者帳密,例如:[email protected]

創建完信箱後,你就可以使用這個email來收發網站訪客的填表訊息

Node.js 網站佈署 – 共享主機可以安裝Node.js嗎?

Node.js 是 JavaScript 框架愛好者的福音,它實現了用 JavaScript 撰寫後端程式碼的需求。但要如何將 Node.js 放到主機上運作呢?你可能已經嘗試過靜態網站部署,但還不知道將自己製作的 API 放到主機上的方法。這篇文章將為你詳細介紹相關操作。

1.共享主機可以安裝Node.js

共享主機可以安裝Node.js,但在安裝之前,你需要於檔案管理員(File Manager)建立一個空的文件夾,用於安裝Node App。這個資料夾的名稱會根據網域名稱有所不同,主要有以下兩種狀況:

-狀況1. 安裝於主網域,於根目錄建立與主網域同名的文件夾

找到File Manager按鈕,並點選。

node.js安裝第一步-先找到file manager

進入主機檔案管理畫面,按左上角的『+Folder』 於根目錄新增文件夾,若主網域為domain.com,該文件夾命名為domain.com(關於命名方式,請看下方Tips)。

node.js安裝第二步-進入file manager後,新增folder文件夾
維持App URI和 App Root Directory的一致性是約定俗成的慣例,沒有硬性規定。目錄名稱和App URI可以不同,但可能會導致其他人在查找時混淆。

-狀況2. 安裝於子網域,同步建立子網域的同名文件夾

在cPenal建立子網域,並同步建立子網域的同名文件夾。
找到Domains按鈕,並點選進入網域管理頁。

想安裝在子網域,點選進入domain頁面

點選右上角Create A New Domain按鈕,建立新的子網域,並在欄位上填入子網域名稱,例如:test.domain.com,Document root會自動填入子網域的名稱。

進入domain頁面後,按下新增按鈕
輸入你想使用的子網域名稱,此情況不用手動創建,當子網域建立時,file manager會自動創建根目錄
此情況不用手動創建,當子網域建立時,file manager會自動創建根目錄
你可以在網域管理頁面(Domains)新增其他的主網域,把其他主網域指向此主機的某個目錄文件夾。

2.把網站打包上傳至File Manager

把.env、node modules目錄、.git排除在外,選擇其餘必要檔案並壓縮成zip,上傳到第一步建立好的目錄文件夾,並在裡面解壓縮。
不管你使用什麼框架,裡面至少要有:

  1. node.js啟動文件(名稱可能為server.js、app.js或index.js)
  2. 紀錄npm套件的package.json檔案

Node.js才能依據這份依賴清單(package.json)去安裝npm套件,並透過啟動文件進行啟動。

node.js網站的npm依賴文件
網站的npm依賴文件

3.安裝Node.js


登入主機的cPanal後台,找到Setup Node.js App選項,並點選進入。

找到node.js app按鈕並點選進入

進入Node.js App管理頁面,如果你曾經在這個主機建立過Node.js App,下方會有一串列表顯示目前Node.js App的狀態。

要創建新的Node.js App,請點選右上角的『Create Application』按鈕。

按右上角的創建新App按鈕
  1. 選擇需要Node.js的版本
  2. App mode選Production
  3. App root如果位於根目錄,直接填寫目錄文件夾的名稱(例如:domain.com或test.domain.com)
  4. App URL可點選更換網域,如果設在子目錄下再去填空白的欄位,沒有則略過
  5. 填寫啟動文件名稱(通常是server.js)
  6. 新增環境變數,例如資料庫的URI
  7. 按下右上角Create按鈕
確定填完所有node.js的設定項目後,按下Create創建按鈕
確定填完所有node.js的設定項目後,按下Create創建按鈕

創建完成後,先暫時停止App,執行Run npm install安裝套件,再重新啟動Node App。

先停止運行,再安裝npm套件,安裝完再啟動
在Node.js運作的狀態下,點選安裝npm套件,可能會導致安裝不成功,變更選項時盡量按部就班操作,先關閉node.js,安裝完之後再啟動。