自架WordPress不安全容易被攻擊?這句話是對也是錯!
真的不安全會有30%以上的市佔率?其實就跟Windows作業系統一樣樹大招風罷了!
現在全世界有 30% 以上的網站使用WordPress架站,所以大多數想要自行架站的人很容易就會就會搜尋到 WordPress 介紹的文章。但是多半去詢問有經驗的【網站開發者】就會得到 WordPress "可能"不安全的一個回覆。
但這是真的嗎?
以結論來講,這是真的,但是也是假的。
這取決於你怎麼使用WordPress站台
首先先要了解的是,提供你諮詢服務的朋友【網站開發者】可能無法通過WordPress 主要維護公司 Automattic 的面試。Automattic 基本工程師的年薪Google 搜尋的結果大概是美金 94,000,約台幣 280 萬年薪,可以用Automattic + salary 去搜尋到這個結果。當然 Automattic 不等於WordPress.org,但是 Automattic 公司目前營運的是 WordPress.com,由WordPress 創辦人所創的公司。
因此這邊可以知道,如果是全新的 WordPress 網站,有一直維持在最新的前幾個版本,是有一定程度的可靠。至少比一般等級的工程師從 0 開始架站來得可靠。
(但是現在網站開發者多半使用現有框架來架站,框架也都是世界頂尖高手在維護,這一段比較後面會提到。)
如果不服氣的話,可以嘗試看看 WordPress 的原始碼,或是單個套件的原始碼,例如 Gutenberg 區塊編輯器(使用 PHP 與 ReactJS 作為開發)。一般開發者光看裡面部分內容就有很多可以學習的地方。
但是 WordPress 的安全性常常上科技新聞是確定的事實,這到底是怎麼回事?
其實這主要是 WordPress 的擴充性造成的,也就是 Plugin 外掛與 Theme 佈景主題。
有開發過 WordPress 外掛或主題的人應該很容易就會發現,其實外掛與佈景主題的運行權限是沒有設限的,也就是當外掛被執行的時候,他擁有網站所擁有的權限。
程式運行是依靠作業系統,作業系統有權限管理、使用者管理等功能,就像你現在使用手機、電腦無論 Windows、MacOS、Android 或 iOS 開機都會有一個輸入密碼登入使用者的動作。如果沒有也只是因為系統有預設登入帳號而已。當你開機登入進到桌面,點擊兩下應用程式(比方說上網 Chrome),那 Chrome 在運行的時候就是記錄在你的使用者底下,別的使用者一般不能干擾你。
作業系統裡面除了你的使用者外,還有其他的使用者,這些使用者並不是人為操作用,而是作業系統或是程式預設產生,用來區隔權限。就像有時候你安裝檔案,他就會跟你要求「系統管理員」權限,這意思是這個程式需要動用到比較深一點的作業系統功能,這時候如果你的使用者有「系統管理員」權限,就可以點擊Yes/是,短暫的轉換為「系統管理員」,讓安裝繼續進行下去。「系統管理員」是一個特殊的使用者,他擁有所有的權限。
通常需要「系統管理員」權限的可能是要去使用硬體、防火牆、系統資料夾等搞砸可能系統開不了機的區域,或是可能被安裝後門程式的區域。所以通常需要看一下。不過也不是所有區域都是那麼危險,所以每個區域其實可以用群組的方式去設定說哪些使用者可以打開,哪些不行。我們常見的「系統管理員」權限要求其實是方便但危險的舉動,比較正確的是要開那扇門就給那扇門的鑰匙即可。但通常這樣做電腦公司會被客訴到爆,怎麼安裝都安裝不好(安裝一個程式可能有幾百個相依性)。所以多半是公司層級的服務才會設定比較詳細。
回到 WordPress,一般網站運行需要對外的連線監聽、程式運行的權限、資料夾存取的權限、資料庫存取的權限。這些權限也不是 WordPress 才要,你用任何的架站框架幾乎都需要一樣的東西。所以這段不是 WordPress 比較危險的問題。
相關課程:Linux雲端伺服器,用AWS暸解Apache與Nginx
問題出在說,WordPress 的使用者多半不了解程式權限運作,就像很多人桌機筆電網站逛一逛就中勒索病毒一樣,WordPress的【外掛】與【佈景主題】安裝進去後就等於是網站的一部分,所以新安裝的 PHP 程式碼也等於擁有網站運行的權限。這時候如果網站運行的權限沒設定好,就像為了架站設定方便而給網站【系統管理員】權限,那基本上當你安裝裝到有問題的外掛樣式,那就出現了系統層面的安全性問題。
另外一個常見的問題是如果你給 WordPress 的資料庫使用者帳號權限過強(比方說 root ),那就會有資料庫安全性問題,安裝進去的攻擊程式甚至可以控制 SQL 資料庫。即使你權限都設定正確,但是攻擊的方式是在瀏覽網站者端發生( client 端),那則會有另外的問題(網頁自動跳轉到廣告頁面或自動點擊廣告)。
不過這是 WordPress 外掛主題機制的問題?其實不盡然,因為如果你用 Ruby on Rails 也有 Gem 的機制,PHP Laravel 的 Composer 套件管理, Python django 的 pip 也一樣, 或是 Nodejs npm....等,只要有引入外部程式網站就會有一樣的問題。各大套件管理系統多半都走最低的審核機制,像通過WordPress.org 下載的樣式外掛都有基本的安全檢查,雖然可能會有遺漏的,但是使用者多的熱門外掛樣式基本上都是相對安全的。
但是為何安全新聞總是 WordPress?
這就要回到最前面的開頭,WordPress 的市佔率達到全世界30%。
如果你想要攻擊網站,你會去研究很多人用的軟體框架,還是獨特的網站?
花一樣的時間,當然是研究【受眾多】的啊!
但是 WordPress 主程式其實不算好打,安全回報與更新比較即時,所以多半會以外掛的形式去攻擊,或是去收購外掛當作木馬,讓你自己去安裝他,一但安裝後所有的防護形同虛設,因為攻擊程式甚至可以修改或內部繞過防護程式。
再來還有一些漏洞是開發者疏忽所產生的,例如 XSS 攻擊,SQL injection,資料庫開放對外 port 造成的資料庫攻擊等。這些漏洞是所有程式語言框架都會發生的。但是一般面向開發者的框架這段都要求開發者自己處理,而 WordPress 的使用者則是安裝免費/付費程式,所以 WordPress 的問題比較會算在WordPress 頭上,而其他框架則會被算在該開發者疏忽上。
例如
1. 我的 WordPress 站台安裝了一個購買的樣式安裝後就被入侵了,WordPress 真的很爛很不安全。
...這應該是你亂裝程式的問題吧,應該要去找賣你樣式或製作樣式的人,為何他沒有寫好。
2. 某大購物網站發生嚴重資安洩漏問題,使用者帳號、密碼、電話號碼、訂單全泄露。這家公司真爛,網站品質把關不良。
...這時候有人關心是這個網站是用哪個框架的嗎?基本上這樣的問題不會也不應該被算在框架頭上。
(有拉,業界內的工程師還是會關心一下,看看自己會不會也出一樣的糗)
所以基本上 WordPress 之所以常出現資安問題的邏輯其實跟Windows電腦容易中毒差不多意思。
1. 使用者多,針對 WordPress 站台的弱點掃描工具也多。
2. 使用者不會技術的比例非常高
3. 常隨意下載安裝來路不明或製作不良的佈景主題、外掛
4. 利用佈景主題、大量外掛疊床架屋的方式滿足商業功能。程式越多越容易有疏忽漏洞,也容易相衝突
5. 因為安裝的外掛太多所以升級容易發生衝突,導致不敢升級,無法填補新發現的安全漏洞
6. 為自己留一個可以直接在網站上修改開發的後門( WordPress 預設開啟,但這非常危險)
要讓 WordPress 比較安全的方式其實就是反過來
1. 不要亂裝佈景主題與外掛,安裝外掛前請警慎評估與記得備份
安裝再卸載很多時候是沒用的,因為如果外掛啟用的同時程式就至少有跑過一次的機會,他在這一次就可以做完所有的部署。可以修改其他 PHP 檔案,修改系統設定、植入 JavaScript 程式,修改資料庫內容。
2. 可以簡單完成的就自己修改不要用安裝外掛完成
像是 HTTPS 與基本 SEO 其實外掛能幫你的有限,進度條的網站對於HTTPS與 SEO 完全沒有用神奇的寫法,就 Google 建議的 HTML meta 和 Cloudflare 而已,還是讓你搜尋的到這篇文章或是其他文章導流過來。所以很多【必裝】的外掛其實不必要,為了其中一個功能而安裝了其他10倍用不到的功能也只是拖慢速度與增加系統漏洞而已。
相關課程:HTML, CSS, JavaScript, jQuery 網頁從零開始
3. 自己動手寫請記得基本安全規範
有些弱點是共通的,比方說 SQL injection,XSS 攻擊等,並不是說自己寫就一定會比較安全。但是這是需要經驗的,哪個開發者沒出過包呢?出包後很痛,所以才會記得下次不再犯,就進步了。
開發自己的主題樣式、外掛:
程式客製WooCommerce,WordPress購物系統全解析
4. 關閉從網站修改程式的這一條路,養成良好本地端先開發習慣
要 hot fix 也至少要從 console ssh 連過去,不要直接在後台修改。不然WordPress 後台密碼被暴力破解後基本上就任人宰割了,甚至連自動備份機制帳號密碼都會被取走。private key 之類的可能也不保,最後火還燒到 Github, CDN, VPS 去。PHP 程式碼也不要塞在資料庫裡面,這種eval類型的動態字串程式執行是除非你知道自己在做什麼不然極度不推的方式。
延伸閱讀:
[PHP][Mac] 覺得開發環境設定很麻煩嗎,用MAMP安裝就對了!
[PHP][Windows] 覺得開發環境設定很麻煩嗎,用MAMP安裝就對了!
順帶一提,如果真的無法改變使用習慣,或是對自身的設定沒自信的話,可以在整個網站前面架設防火牆,這個動作就像是篩子過濾一樣,流量先流到篩子,雜質會被過濾掉,正常的才進得去。網路上也滿多服務商在做的,這邊就先不多說。不過如果設定不好,流量不是從篩子過去的,那還是有可能會有問題。( DNS 設定錯誤、資料庫對外連線裸奔之類)
最後再提供幾個我們自身評估外掛安全等級的方式:
比較安全的外掛選項:
1. 功能簡單很容易懂的小型套件
功能越複雜,外掛之間越容易相衝突,畢竟大多不是同一個公司或作者出品的。功能小,我們要看完他的程式碼也不用太久,順便還可以學習。我們自己對網站程式掌握度越高,當然風險會越小。
2. 知名公司或是存在已久且持續維護的知名套件
使用者多雖然容易成為攻擊目標,但是大型公司通常很快就有資源可以處理,並且其實因為很多人使用,也代表很多第三方專家審視過。 出問題也很快在社群就會反映出來被通知到。
可能要想一下的選項:
1. 我們只想要他部分功能的外掛
功能越多的外掛,程式當然也越多。有時候並不是功能關掉就完全不對其他外掛或樣式造成影響。甚至會對網站造成效率上的問題。當然,很多時候我們就是想要一個快速的解決方案,這也是使用 WordPress 的一大誘因。不過因為惰性的關係,最好每隔一段時間就整理一下外掛列表。尤其是很多外掛可能停止維護了,會對日後升級 WordPress 與 PHP 版本造成困擾,越晚解決會越複雜。同時為了避免整理外掛的時候網站掛掉,所以先在本地端建立開發環境並且測試是必須的,同時線上版本也要確定備份完成再開始上線施工。
2. 使用者多,但是作者沒有維護的外掛
很多時候我們最好不要使用作者沒有維護的外掛,尤其是使用者又很多的那種,很多的案例都是大型外掛作者心血來潮寫了好用的外掛,結果最後發現沒辦法盈利又影響到生活或是工作。這時候就很可能直接遺棄(不一定會下架)或是賣給其他公司接手。接手外掛的商業價值則要看外掛的性質,但外掛性質沒有什麼盈利條件的時候,很可能惡意公司就是買來置入後門的。但是如果這個外掛功能很簡單,你自己也檢視過了或是大概了解他的程式邏輯。那也可能是因為其實也沒什麼好維護的所以就不改版了。
3. 獨立開發者的外掛
這基本上就是看你信不信任他,最有名的外掛幾乎都是付費外掛。畢竟有營利才能活得長久,大家都是要吃飯的。不過並不是每個作者都是高手。上架WordPress 官網讓人下載外掛與樣式需要通過最基本的資安檢測。但是放在自己網站上賣則不用。很多公司都是先放免費精簡版可以直接下載,並且提供付費版本在自身官網上。這種只要你信任他,我們覺得也沒什麼不好。畢竟也不是官網上下載的就絕對安全,因為基本上官方是檢查第一次,但是後續並沒有每個版本都細部檢查。所以像 ACF pro / Elementor pro 等滿好用且風評很好的外掛也是值得信賴的。
最好不要用
1. 非作者授權管道的外掛
基本上就是盜版,作者也不維護盜版,畢竟程式免錢「服務」要錢是很常見的盈利手法,服務就是工時,要人工作就要付錢是天經地義的事。另外下載的版本有沒有被加料是很難說。本來對你的網站很有幫助的外掛,也可以能因為你只是為了省下幾百塊台幣就讓你花了幾個月甚至幾年的整個網站心血毀了。切記勿貪小失大啊!
如果有可能的話,可以嘗試
1. 自己撰寫的外掛與樣式
自己撰寫的外掛掌握度通常最高,雖然不能排除複製貼上程式碼其實也不知道自己在做什麼。但是大家都是從不會到會,沒開始練習是不可能會的。一開始可以先自行修改些樣式外觀等跟資安沒有關係的部分,後來再加一些自己的小功能,甚至是常識完成自己的外掛。學習別人的外掛的概念也是很鼓勵的,畢竟WordPress 的授權 GPL 基本上就是因為知識的傳遞好意而建立的。只要融會貫通,寫出自己的版本也是很不錯的。
組合課程:
從零開始挑戰接案,前端基礎 + WordPress + WooCommerce
最後來個結論,WordPress 的安全性不會是最好的,但全世界也足夠多的人在使用驗證他的安全與穩定性。對網站掌握度越高,不需要的安裝的越少,良好的使用設定,基本上就不會比其他的框架來的危險多少。
最後,如果你喜歡我們的文章,別忘了到我們的FB粉絲團按讚喔!!