0%

正威網路行銷工作室,專注於基隆、台北與全台客製化網頁設計,提供專業 RWD 響應式、SEO 搜尋引擎優化、品牌形象設計與網站維護託管服務。

搜尋文章
聯絡資訊
地址基隆市仁二路 220 號 5 樓
追蹤我們

WordPress 登入安全怎麼做?兩步驟驗證、限制登入次數與修改登入網址

woocommerce改變欄位名稱

每個 WordPress 網站的登入頁都在同一個位置:你的網址/wp-login.php(輸入 /wp-admin/ 也會被帶過去)。正因為大家都知道,網路上隨時有大量機器人自動找到這個網址,用常見的帳號密碼一組一組嘗試登入。

這篇原本教的是「用程式碼修改登入網址」,另一篇舊文章教的是「用 .htaccess 禁止任何人進入後台」,兩篇現在整合在一起。這兩招都有更好的做法,下面依照效果由大到小重新整理。

第一步:強密碼,而且不要用 admin 當帳號

機器人最先試的,就是 admin、網站名稱這類帳號,搭配 123456、password 這類弱密碼。

  • 密碼:用 WordPress 在「個人資料」頁產生的隨機密碼,或至少十幾個字元、不跟其他網站共用的密碼。搭配瀏覽器內建或其他密碼管理工具,就不用自己記。
  • 帳號:WordPress 不能直接修改使用者名稱。如果還在用 admin,可以新增一個新的管理員帳號,用新帳號登入後刪除舊的 admin,刪除時選擇把它的內容轉給新帳號,文章就不會不見。
  • 不用的帳號:離職員工、合作過的外包帳號,用不到就刪除或降低權限。

第二步:開啟兩步驟驗證(最有效)

兩步驟驗證(2FA)是登入時除了密碼,還要輸入手機驗證 App(例如 Google Authenticator)產生的 6 位數驗證碼。就算密碼外洩,對方沒有你的手機也登不進來。

WordPress 核心目前沒有內建這個功能,要靠外掛:

  • Two Factor:WordPress 社群維護的外掛,功能單純。
  • Wordfence Login Security、Solid Security(舊名 iThemes Security)等安全性外掛,也都有兩步驟驗證。

設定完成後,記得把外掛提供的備用驗證碼存起來,手機遺失或換手機時才進得去。

第三步:限制登入嘗試次數

WordPress 預設不管輸錯幾次密碼,都可以一直重試。限制登入嘗試的外掛,會在同一個 IP 連續輸錯幾次後暫時封鎖它,機器人就沒辦法無限制地猜。

  • Limit Login Attempts Reloaded:專門做這件事的外掛。
  • Wordfence、Solid Security 等安全性外掛也內建這個功能,已經裝了就不用重複安裝。
  • 也可以在登入頁加上驗證碼(例如 Cloudflare Turnstile、Google reCAPTCHA 的相關外掛),擋掉大部分的自動登入程式。

另外,機器人也常透過 XML-RPC(xmlrpc.php)猜密碼。沒有用到的話可以關閉,做法請看WordPress functions.php 實用程式碼整理的第 8 點。

第四步:安全性外掛或防火牆

安全性外掛除了上面的功能,通常還有防火牆、惡意程式掃描、登入記錄等。挑一個裝就好,同時裝好幾個容易互相衝突、拖慢網站。

網站前面有 Cloudflare 的話,也可以用它的防火牆規則,針對 /wp-login.php 加上額外的驗證挑戰。

第五步:只有自己會登入的網站,限制 IP

如果網站只有你自己或固定幾個人會登入,最徹底的做法是只讓特定 IP 打開登入頁。在網站根目錄的 .htaccess 加上(Apache、LiteSpeed 主機適用):

Apache (.htaccess)
<Files "wp-login.php">
  Require ip 203.0.113.10
</Files>

把 203.0.113.10 換成你的 IP(用 Google 搜尋「我的 IP」就查得到)。有多個 IP,就多寫幾行 Require ip。

要注意:

  • 家裡或公司的網路 IP 會變動的話,哪天自己也會被擋在外面,到時要用 FTP 把這段拿掉。
  • 有開放會員登入的網站不能用,會員也會一起被擋。
  • 想限制整個 wp-admin 資料夾,或改用帳號密碼保護,請看.htaccess 用法大全的「後台只允許特定 IP 登入」與「用帳號密碼保護資料夾」。

舊版「把 wp-login.php 導回首頁」的寫法

原本另一篇文章教的是在 .htaccess 加上:

Apache (.htaccess)
RewriteCond %{REQUEST_URI} wp-login.php
RewriteRule .* http://你的網址/ [R,L]

這會讓所有人(包括你自己)都打不開登入頁,登出、忘記密碼、重設密碼的連結也全部失效,只適合網站另外有前台登入功能的特殊情況。現在建議改用上面的 IP 限制,擋住別人的同時,自己還能正常登入。

禁止瀏覽資料夾內容:Options -Indexes 仍然有用

同一篇文章的另一個技巧,現在還是有用。有些主機在資料夾裡沒有首頁檔時,會直接列出裡面所有的檔案。WordPress 在 wp-content、plugins、themes 這幾個資料夾放了空白的 index.php 防止這件事,但上傳圖片的 uploads 等資料夾沒有。

在網站根目錄的 .htaccess 加上這一行,就不會列出檔案清單:

Apache (.htaccess)
Options -Indexes

舊文章把它標成 PHP 程式碼,其實這是 .htaccess 的設定,不是放在 functions.php。很多主機預設已經關閉列出檔案的功能;如果加了之後網站出現 500 錯誤,代表主機不允許在 .htaccess 改這個設定,把這行刪掉就會恢復。

修改登入網址:有用,但只是減少騷擾

回到這篇原本的主題。把 wp-login.php 換成別人猜不到的網址,機器人找不到登入頁,登入失敗的記錄會少很多,主機負擔也會降低。

但它不能取代上面的防護:

  • 登入網址還是可能透過其他方式被找到。
  • 密碼太弱或已經外洩的話,換了網址也擋不住。

所以把它當成「減少機器人騷擾」的加分項目,強密碼和兩步驟驗證才是主要的防線。

用外掛修改,不要自己寫程式碼

想修改登入網址,建議用成熟的外掛,例如 WPS Hide Login(只做這件事、很輕量),或安全性外掛裡的「隱藏後台」功能。

設定前後要注意:

  • 新的登入網址一定要記下來,加入書籤或存進密碼管理工具。
  • 有些快取、會員外掛可能跟它衝突,改完之後用無痕視窗測試登入、登出、忘記密碼是否都正常。
  • 忘記網址或被擋在外面時,用 FTP 把該外掛在 wp-content/plugins/ 裡的資料夾改名,外掛就會停用,登入頁恢復成原本的 wp-login.php。

舊版程式碼為什麼不要再用

這篇 2015 年的版本,是在 functions.php 加一段程式碼:登入頁網址必須帶上 ?xx=zz 這種自訂參數才打得開,否則就轉到首頁。這段程式碼現在有幾個問題:

  • PHP 8 會出現警告:網址沒有帶參數時,程式讀取不存在的 $_GET['xx'],會出現「Undefined array key」警告。
  • 在部分主機上根本不會轉址:它掛在 login_enqueue_scripts,這時登入頁已經開始輸出內容,用 header() 轉址可能失敗,出現「headers already sent」錯誤。
  • 連正常流程都被擋掉:密碼輸入錯誤後重新顯示的登入頁、「忘記密碼」頁、信裡的重設密碼連結,網址都沒有帶這個參數,全部會被轉回首頁。
  • 轉址後沒有 exit:就算轉址成功,登入頁的程式也還會繼續執行。

其他該做的基本功

延伸閱讀

網站安全是持續的維護工作,不是裝一個外掛就一勞永逸。正威網路行銷是基隆在地、有 25 年網站設計經驗的基隆網頁設計工作室,也提供網站維護託管,歡迎來聊聊。

分享這篇文章

返回文章列表更多「Wordpress代碼教學」文章

發表留言

還沒有人留言,歡迎第一個分享你的想法或問題。留言經審核後才會顯示,Email 不會公開。

讓我們一起打造
您的專屬網站!