進度條

自架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】WordPress.com 與 WordPress.org? 這兩個之間有什麼差異?

 

 

 

 

因此這邊可以知道,如果是全新的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攻擊等,並不是說自己寫就一定會比較安全。但是這是需要經驗的,哪個開發者沒出過包呢?出包後很痛,所以才會記得下次不再犯,就進步了。

 

開發自己的主題樣式、外掛:WordPress - 從頭教起的網站架設

 

 

4. 關閉從網站修改程式的這一條路,養成良好本地端先開發習慣

要hot fix也至少要從console ssh 連過去,不要直接在後台修改。不然WordPress後台密碼被暴力破解後基本上就任人宰割了,甚至連自動備份機制帳號密碼都會被取走。private key 之類的可能也不保,最後火還燒到Github, CDN, VPS去。PHP程式碼也不要塞在資料庫裡面,這種eval類型的動態字串程式執行是除非你知道自己在做什麼不然極度不推的方式。

 

延伸閱讀:

[PHP][Mac]  覺得開發環境設定很麻煩嗎,用MAMP安裝就對了!

[PHP][Windows] 覺得開發環境設定很麻煩嗎,用MAMP安裝就對了!

 

 

 

順帶一提,如果真的無法改變使用習慣,或是對自身的設定沒自信的話,可以在整個網站前面架設防火牆,這個動作就像是篩子過濾一樣,流量先流到篩子,雜質會被過濾掉,正常的才進得去。網路上也滿多服務商在做的,這邊就先不多說。不過如果設定不好,流量不是從篩子過去的,那還是有可能會有問題。(DNS設定錯誤、資料庫對外連線裸奔之類) 

 

 

 

 

最後來個結論,WordPress的安全性不會是最好的,但全世界也足夠多的人在使用驗證他的安全與穩定性。對網站掌握度越高,不需要的安裝的越少,良好的使用設定,基本上就不會比其他的框架來的危險多少。

 

 


最後,如果你喜歡我們的文章,別忘了到我們的FB粉絲團按讚喔!!

Small logo

進度條編輯群

進度條編輯團隊