
每個 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 主機適用):
<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 加上:
RewriteCond %{REQUEST_URI} wp-login.php
RewriteRule .* http://你的網址/ [R,L]這會讓所有人(包括你自己)都打不開登入頁,登出、忘記密碼、重設密碼的連結也全部失效,只適合網站另外有前台登入功能的特殊情況。現在建議改用上面的 IP 限制,擋住別人的同時,自己還能正常登入。
禁止瀏覽資料夾內容:Options -Indexes 仍然有用
同一篇文章的另一個技巧,現在還是有用。有些主機在資料夾裡沒有首頁檔時,會直接列出裡面所有的檔案。WordPress 在 wp-content、plugins、themes 這幾個資料夾放了空白的 index.php 防止這件事,但上傳圖片的 uploads 等資料夾沒有。
在網站根目錄的 .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:就算轉址成功,登入頁的程式也還會繼續執行。
其他該做的基本功
- 保持更新:很多入侵不是從登入頁進來,而是利用過期外掛的漏洞。更新的設定方式請看WordPress 自動更新怎麼設定?。
- 定期備份,而且備份要存一份在主機以外的地方。
- 全站使用 HTTPS,登入時的密碼才會加密傳送,做法請看.htaccess 強制 HTTPS 寫法。
- 隱藏版本號可以當作基本整理,但效果有限,說明請看WordPress 隱藏版本號的正確寫法。
延伸閱讀
- .htaccess 用法大全:轉址、HTTPS、安全防護、壓縮與快取常用設定(WordPress 適用)
- WordPress 自動更新怎麼設定?控制核心、外掛、佈景主題更新,別完全停用
- WordPress functions.php 實用程式碼整理:10 個常用又安全的小技巧
網站安全是持續的維護工作,不是裝一個外掛就一勞永逸。正威網路行銷是基隆在地、有 25 年網站設計經驗的基隆網頁設計工作室,也提供網站維護託管,歡迎來聊聊。







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