Htaccess 和 WP 的親密關係
如何設定 htaccess 檔案,來強化 WordPress 網站的安全。
什麼是 .htaccess 檔 ?
這個檔案的名稱是由 hypertext access 而來,能為大多數的伺服器環境使用。
Htaccess
是一個 Web 伺服器的次要設定檔,官方認為 .htaccess主要還是給無法編輯 Site
Config 的情況下使用,以一個資料夾為單位改變 Apache 設定的檔案 (Override
Config),簡單來說就是讓你可以控制 Web Server
該路徑下的檔案及資料夾,以及所有子目錄的讀取權限,以及可以針對一個資料夾改寫網址。
Htaccess
的功能, 和 Apache Httpd.conf 設定檔案是一樣的,當然他的語法也相仿,
本文所要討論的內容是,強化網站安全的
Htaccess 設定技巧,因此、不會詳述規則 & 條件的寫法。
關於正規表達式和語法,假如、你想更了解,詳情請參訪
Apache 官方網站 >
https://httpd.apache.org/docs/current/mod/directives.html
,正規表達式
強化 WordPress 的網站安全
在 WordPress 的根目錄,你將會看到 .htaccess 這個檔案,官方 (預設) 建議把檔案權限設定為 644
# BEGIN WordPress
# 在含有 BEGIN WordPress 及 END WordPress
標記的這兩行間的指示詞內容為動態產生,
# 且應僅有 WordPress
篩選器能進行修改。對這兩行間任何指示詞內容的變更,
#
都會遭到系統覆寫。
<IfModule mod_rewrite.c>
RewriteEngine
On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase
/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME}
!-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php
[L]
</IfModule>
# END WordPress
.htaccess 是 WordPress 裡很有個性的檔案,只要其中任何一個字符出錯,檔案就會出現錯誤。
當錯誤發生時,它通常會影響到整個網站的運作,甚至會使 WordPress 整個崩潰。
在開始前,最好先備份一下當前使用的 .htaccess 檔案,如果你無法還原備份,那麼將伺服器上的 .htaccess 刪除,然後再建立一個空白的 .htaccess 檔案並將它上傳,這將能協助你的網站回復正常連線運作。
以下分享一些比較重要,用於 .htaccess 可以強化你網站安全的設定程式碼片段
.htaccess 既然擁有你整個網站的控制權,第一個當然要先保護好自已,禁止被存取囉!
<files ~ "^.*\.([Hh][Tt][Aa])">
order allow,deny
deny from
all
satisfy all
</files>
2. 保護資料夾
wp-content 資料夾也是 WordPress 相當重要的一部分,在這個資料夾裡包含了你的佈景主題、外掛、上傳的媒體檔案(圖片、影片)及快取檔案。
將以下的代碼,寫在一份 .htaccess 內,放在 /wp-content/.htaccess,只允許 XML、CSS、JPG、JPEG、PNG、GIF、WEBP 和 JavaScript 被上傳到媒體資料夾,其餘的檔案類型將被拒絕。
Order deny,allow
Deny from all
<Files ~
".(xml|css|jpeg|png|gif|js|webp)$">
Allow from all
</Files>
3.禁止瀏覽目錄
讓未經授權的使用者瀏覽目錄下的檔案或資料夾是相當危險的一件事情。
如要禁止訪問你網站的目錄,只要在你的 .htaccess 加入以下程式碼即可:
# 禁止瀏覽目錄
Options All -Indexes
4.保護 wp-Config.php
wp-config.php 這個檔案裡包含資料庫的登入資訊,以及其他的系統設定,因此、禁止任何人訪問。
<files wp-config.php>
order allow,deny
deny from all
</files>
5. 保護檔案
某些檔案是絕不能讓使用者存取的,你可以加入以下程式碼,來阻擋使用者存取這些 Include-Only 檔案。
# Block the include-only files.
<IfModule mod_rewrite.c>
RewriteEngine
On
RewriteBase /
RewriteRule ^wp-admin/includes/ - [F,L]
RewriteRule
!^wp-includes/ - [S=3]
RewriteRule ^wp-includes/[^/]+\.php$ - [F,L]
RewriteRule
^wp-includes/js/tinymce/langs/.+\.php - [F,L]
RewriteRule
^wp-includes/theme-compat/ - [F,L]
</IfModule>
6. 限制某 IP 進入
# Limit logins and admin by IP
<Limit GET POST PUT>
order
deny,allow
deny from all
allow from
10.20.30.1
</Limit>
可以在 allow from 後面再增加其他 IP,不同的 IP 間使用半形逗號來區隔,例如:
allow from 10.20.30.1 , 20.20.20.1, 20.20.20.2, 20.20.20.3
7. 封鎖限制某 IP 不能進入存取
<Limit GET POST>
order allow,deny
deny from 12.34.56.254
deny
from 65.43.21.123
allow from all
</Limit>
8. 禁止外站連結圖片
直接連結可能對你的網站帶來負面影響,包括使你的網站變慢,也會讓你的頻寬費用增加。
你可以禁止除了你的網站外的網站直接連結圖片,將以下程式碼加入即可。
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond
%{HTTP_REFERER} !^http(s)?://(www\.)?yourwebsite.com [NC]
RewriteCond
%{HTTP_REFERER} !^http(s)?://(www\.)?yourotherwebsite.com [NC]
RewriteRule
\.(jpg|jpeg|png|gif|webp)$
https://i.imgur.com/xxxx.png
[NC,R,L]
※ 在最後一行所設定的圖片路徑, 是當其他人試圖從其他網址瀏覽你的圖片時,他們將會看到的禁止圖片,這圖片 https://i.imgur.com/xxxx.png 變更為你想要顯示的圖片。
9. 重新導向
301 重新導向,讓你可以通知搜尋引擎該鏈結已經重新移到新的路徑。
它可以被用來重新導向一個網址、資料夾,甚至是一整個網站。
因此,它常被用於網址發生變化時,例如變更網域名稱、變更固定網址結構,或是變更頁面名稱(例如將頁面名稱從 my-webs 變成 my-new-webs)。
Redirect 301 /oldpage.html https://www.yourwebsite.com/index.html
Redirect
301 /oldfolder/page1.html /oldfolder2/page2.html
Redirect 301 /
https://www.mynewwebsite.com/