自從上次介紹了限制WordPress後台登入,倒是讓香腸擋了不少想要惡意入侵的駭客,不過這樣的安全仍然是不夠的,必須再搭配其他的防護措施來讓網站整體安全更高一層樓。目前要進行網站安全防護的方式都是透過Apache,利用.htaccess去對網站做設定、限制檔案存取,強化WordPress網站整體安全,不過使用者也別忘了要設定強一點的密碼。
接下來香腸要介紹的主要是透過.htaccess對網站做一個基礎的強化,保護wp-admin目錄、限制wp-includes目錄存取、防垃圾留言、禁止目錄索引、限制wp-config.php存取權限等等,算是很基礎的網站資安防護,不論你網站是否遭受攻擊,其實這些都是必要性的安全防護,有做防護不代表被不會被駭客入侵,而是可以是多一層保障、降低一些危險因子。
這幾天網站身旁很多朋友都遭到駭客的拜訪,當香腸寫文章、裝上後台封鎖外掛後,也發現自己也遭到被駭客嘗試登入的狀況,雖然是沒有被攻破,可是總有點怕怕的。根據log以及一些測試數據發現,這回的竄入應該是在存取wp-login.php,可是香腸都導掉了wp-login.php頁面,但外掛卻一直偵測到登入失敗的訊息,經過推測應該是他直接跑程式在try網站後台。
儘管封鎖了後台的IP存取,但是其他的問題未必以後不會被發現,所以下面我們列了十多項設定可以保護你的WordPress網站安全,避免駭客有更多的機會可以攻破你的網站。如同前面提到,如果你做了以下保護措施,香腸還是不能保證你可以安然度過,因為這樣的一些防護是基礎的,很難知道駭客是否有其他方式可以駭進網站,至少這些都可能維安的因子,趕快來修補安全漏洞吧!
教學目錄
一、限制wp-admin目錄存取IP
這個方法可以限制直接存取wp-admin目錄,用NotePad++新增一個.htaccess檔案,將以下語法加入,並上傳到「wp-admin」目錄下。若FTP查看不到.htaccess,可以參考這篇文章解決問題。
其中的藍色部分請換成你的IP,這段語法的判斷流程簡言之就是先封鎖有所IP,然後開放允許的IP,所以藍色部分請改成你的IP,建議可以申請一個固定IP,會必較好。如果是一個網段,可以輸入「 xx.xx.xx. 」,記得最後有點。
詳細教學參考殺氣的說明。
AuthUserFile /dev/null AuthGroupFile /dev/null AuthName "Wordpress Admin Access Control" AuthType Basic <LIMIT GET> order deny,allow deny from all allow from xx.xx.xx.xx </LIMIT>
二、限制存取wp-includes目錄
「wp-includes」這個目錄是系統的一些核心檔案,存在「/wp-admin/wp-includes」和,「/wp-includes」,通常這個目錄是被使用的,並沒有直接的頁面會連到這個地方,用以下這段語法可以限制存取的權限,請將語法加入到根目錄的.htaccess檔案。
此為官方建議設定。
# Block the include-only files. 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] # BEGIN WordPress
如果沒有加入以上語法會顯示錯誤訊息,如果加了以上語法,會顯示WordPress的預設404頁面,告訴你檔案不存在,這樣是一個比較安全的防護措施。
三、限制wp-login.php登入IP
如果你網站沒有開放註冊,那你可以執行這項動作,限制允許存取wp-login.php這隻檔案的使用者,設定方法和前面的限制wp-admin存取IP方法類似,請將藍色部分改成你允許的IP或是網段。
<Files wp-login.php>
Order deny,allow
Deny from All
Allow from xx.xx.xx.xx
</Files>
四、限制上傳大小
避免駭客透過Dos攻擊,利用傳輸大檔案來衝爆你的流量,所以可以透過限制單檔大小來阻絕這樣的一個狀況發生,將以下語法加入到根目錄的.htaccess檔案即可,預設是10MB設定。
LimitRequestBody 10240000
五、保護wp-config.php設定檔
用過WordPress都知道「wp-config.php」這隻檔案攸關整個系統的營運,少了他連不上資料庫、設定無法套用網站就沒了,所以說,這隻檔案內保存了MySQL的帳號與密碼,為了保護這隻檔案,WorPress官方有個建議作法,就是先將此檔案權限設定為「400」,也就是只允許擁有人權讀取。不過設400可能會讓一些外掛例如wp super cache要寫入設定值發生錯誤(儘管主機啟用了 suPHP),所以請各位斟酌設定。
不過保護wp-config.php重頭戲是設定.htaccess檔案,修改根目錄的.htaccess檔案,加入以下語法,這語法意思是:禁止所有人瀏覽(主機內的程式是可以正常讀取的)。
此為官方建議設定。
<files wp-config.php> order allow,deny deny from all </files>
六、防垃圾留言攻擊
以下這段語法是保護你的留言防止被機器人垃圾流言攻擊,主要是擋沒有referrer的請求,但香腸使用過後發現成效有限,建議再加裝Akismet和quiz保護會更好。若要添加語法,請加入到根目錄的.htaccess檔案,其中的「yourblog.com」請換成您的網站網址。
RewriteEngine On
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{REQUEST_URI} .wp-comments-post\.php*
RewriteCond %{HTTP_REFERER} !.*yourblog.com.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^$
RewriteRule (.*) ^http://%{REMOTE_ADDR}/$ [R=301,L]
七、禁止目錄索引
如果你的虛擬主機沒有開啟禁止目錄索引功能,請您務必加上此語法以保護沒有index檔案的目錄,避免被惡意人士將網站內容全部下載。
更詳細的說明請參考這裡。
Options -Indexes
八、變更資料表前綴
資料表前綴詞其實在一開始安裝的時候就務必做一個修正的動作,避免使用預設wp的名稱,如果你現在想要做變更,可以參考:如何修改WordPress資料表的前綴名稱?
修改請務必小心,否則可能造成網站錯誤,做任何調整前務必先行備份,備份可以參考BackWPup這隻自動資料庫、檔案備份的外掛。
九、檔案權限
網站內該設定的權限務必調整好,例如wp-config.php就不可以設定為777。
官方建議設定是所有目錄設定755,所有檔案設定644。
此為官方建議設定。
十、帳號安全
WordPress系統預設安裝是採用admin帳號,不過後來的版本允許使用者自行選擇網站管理員帳號,以避免惡意人士想要嘗試admin登入網站。如果你本身已經使用admin,請趕快換帳號吧!不然駭客輕易的就可以猜到你帳號,接下來猜出密碼應該很快了。另外記得再加裝Limit Login Attempts強化登入安全,當然您也要設一個不易猜出的密碼。
十一、關閉後台佈景編輯功能
WordPress後台的佈景主題一旦權限開放就可以在後台直接編輯,如果沒有開放則只可瀏覽。主機若有安裝suPHP預設就是可以編輯。如果你覺得這項功能用不到,建議您可以關閉它,畢竟直接暴露在後台可以編輯是一件很危險的事情,除了可能因為駭客入侵亂改,也可能自己改錯造成網站出錯。請將以下語法加入倒wp-config.php適當位置,就可以關閉修改的權限了。
define('DISALLOW_FILE_EDIT', true);
此為官方建議設定。
十二、限制 .htaccess 存取權限
當以上的東西調整完之後,別忘了強化你的.htaccess檔案本身權限。將以下語法加入到.htaccess檔案內已啟用自我保護。語法是禁止所有人直接瀏覽該檔案,但是系統使用讀取是允許的。
<Files .htaccess> order allow,deny deny from all </Files>
最後各位還是要做好個人的帳號密碼管控,另外也別在不明的網路、電腦亂登入網站,這都可能造成帳密外洩,除此之外,再次提醒,使用以上方法只會加強WordPress安全,但無法保證百毒不侵,仍有機會遭受到駭客入侵,通常狀況可能是您帳密外洩、網站外掛、佈景有漏洞、系統有不明的漏洞,還有檔案權限設定不正確等等的狀況,各位還是要多多注意。
Hi~
1.限制wp-admin目錄存取IP
我設定後 其他IP(用手機連4G)連網站都無法瀏覽……
變成只有我設定的固定IP可以訪問可以燈後台
照理說應該其他IP還可以瀏覽網站才對
請問該如何解決
那建議您先取消設置。
其實我另有一個大問題…雖然已在後台關閉了開放註冊,但仍不斷有大量垃圾帳號註冊..已經多達萬多個了。我原本嘗試安裝”Pie Register”外掛,但它卻顯示會發生重大錯誤,所以安裝不了。請問有其他方法阻止嗎?(並且已註冊的萬多個垃圾帳號有沒更快的批量刪除辦法? 刪了1小時才刪了2千多個…)
試試看用 https://wordpress.org/plugins/bulk-delete/
請問香腸大大,我嘗試設定”二、限制存取wp-includes目錄”,但結果卻是整個網頁都擋掉了(前台及後台),應該怎麼辦?
拿掉設定
請問你哦~~
公司之前有做大型的商城,
但因為商城會有資安問題,
我看過很多人說wordpress的資安很弱,
有個資的網站建議不要用wordpress架站,
你有什麼特別的建議嗎??
公司目前商城的系統是用雙層式架構~~
是否如果要用wordpress的話,
看有沒有一些可以需要防範的措施可以應用呢?
不是說WP資安很弱,而是WP的架構比較不適合用於購物類型網站。
若要架設購物車,建議使用與購物車為主體在開發的Opensource
請問做以上修改會不會影像到固定網址的修改?
擺放位置正確,不會影響固定網址
因為我想要修改固定網址都不成功,我在想有沒有可能是這裡的問題。了解謝謝
請問由於忘記了當初MYSQL DATABASE設置的密碼, 就再重新設置一個, 不過一設置網站就出現
“建立資料庫連線時發生錯誤”…然後我找到方法, 據說把新的密碼再放進wp-cofig.php, 但發現之前的 DB_PASSWORD密碼是加密的…應該是一開始SETUP, 系統自動加密, 以防安全問題…請問現在還可以這樣弄加密嗎…謝謝
DB_PASSWORD 加密??? 我沒看過這個加密耶
謝謝您的回覆. 是的, 之前那個密碼是加密過的, 就是把密碼變成一串字符, 裡面好像有一串字母數字符號的, 不過當重新設置過密碼之後, 把這新的密碼放進DB_PASSWORD, “建立資料庫連線時發生錯誤”的問題是解決了, 不過就不能回復密碼有加密的功能
你如果密碼加密(?
那你要想辦法解出正確密碼,畢竟WordPress那邊是讀取DB的不加密帳號與密碼~~
我想你密碼應該不是加密,只是比較複雜(?
偷偷回推一下:
第一個限制wp-admin好像怪怪的
最近不知哪根筋不對,是全站都擋掉,不是只有wp-admin
然後google表示:
Google detected a significant increase in the number of URLs we were blocked from crawling due to authorization permission errors.
最後網站就被google禁止檢索 ==”
我建議您可以用FreeBSD架一部真實的實體主機, 用wordpress保護wordpress這方法太脆弱, 因為醫者難自醫. 實體主機可以有最完整的權限設定, 現在的ADSL可以使用固定IP, 流量100/20M, 自己做主應該很經濟.
靠賺Ads雖然是方法之一, 但會自己架完整的server, 眼光會更精準.
http://chenkun.tw 去hack看看沒關係, 它是很舊版本的wordpress, 而且只用MySQL4.x.
將FreeBSD架在VMware當中, 就又是另一方境界.
能隨遇而安, 就禪定了!
香腸哥,請問上面所說的方法是選擇其中之一去做,還是全部都要做呢? 謝謝!!
當然是全部都做是必較好的~
感謝大大的分享
小弟獲益良多 :D
說真的腸哥
我很常來你網站
但這些語法我一概不通,根本不知道要留言什麼XD
每次只好低聲下氣麻煩我哥
他越來越囂張了
哈哈
最近一直在查wordpress的安全設定,
這是很棒的文章,
雖然很多我有看沒有懂~呵~
不過還是很感謝~~
香腸好棒!
阿母我上電視了 ((揮手
香腸好棒!