個人近期做了一個WordPress站點,目前處於內測階段,雖然公網還沒部署起來,但是先在這學習整理一下安全防護的問題。
第一:及時更新WordPress
由於33%的互聯網都在使用WordPress站點,免不了被不懷好意的人盯上,所以官方對安全性非常看重,有專業團隊監控並修復各種安全漏洞,可能會頻繁的更新補丁,所以我們一定要及時的安裝更新官方發布的穩定版本。這是官方設置的第一道防線。
第二:站點部署在可靠的主機上
不要貪圖便宜使用不知名公司的主機,要防火牆沒防火前,一堆漏洞,沒什么專業的人維護。還有不要使用免費的主機,本身服務器維護成本不低,還給你免費使用,想想都不對勁兒。如果被DDOS攻擊,靠譜的主機方解決起來有實力。還可以使用CDN加速(付費),來隱藏真實IP。
第三:數據自動備份--主機鏡像備份
養成不管做什么,都要有備份的好習慣,即便被黑了,核心數據還在,根就在,怕啥;最壞的事故就是網站徹底做雞了,還沒備份,那心里的噶應感覺真是簡直了。
推薦的還有服務器端快照備份和景象備份
數據備份插件推薦: UpdraftPlus 200多萬的安裝 當前更新時間2019年3月 (備份插件恢復的話不是100%)
有個簡單的方法就是 在你的主機服務器上使用快照備份或者鏡像備份。
第四:垃圾評論過濾
網站經常會收到一堆垃圾評論,你看就不正經,你看着像廣告,但其實可能是XSS(跨站腳本攻擊),危害性不可小看
你可以使用 插件: Akismet,千百萬人使用,保護自己的站點免受垃圾評論的困擾
第五:身份轉換
當網站被人擼了后,應該不會閑的去告訴你,所以沒事的時候可以使用技術手段定時檢查一下網站的安全漏洞啥的。有不少專業工具可以掃描,Kali Linux就可以攻擊WordPress,轉換下身份可以自己攻擊自己玩玩,又能增長知識還能提前發現安全隱患。
掃描插件推薦: WordFence 當前更新於2019年3月
第六:插件安全性
網站的漏洞可能來源於插件,所以插件盡量少裝,能用代碼替換用代碼替換,再者安裝插件的話從WordPress官方的插件中心下載,避免來源不明的插件。
第七:管理員帳號安全性要高
怎么個高法?用戶名和密碼多種字符串聯使用,比如:用戶名D2e+@6~p;8[I 密碼 k8/*W&^/j6>b.0
那些黑客會利用腳本自動化訪問輸入用戶名密碼來暴力破解。如果你的網站裝有流量分析或者請求監控的話你可以看看,可以看到請求者的IP和他想訪問的地址,從中篩選出"嫌疑犯",當然如果你的站點訪問挺多的,這確實不好篩選,如果你有什么好的方法,留言一起學習。
還可以限制登錄次數,插件推薦 Login LockDown 當前更新於2016年9月
第八: 更改登錄入口
在你登錄的時候,你可以看到瀏覽器地址欄那有個地址(wp-admin),如果你沒做修改的話,那是WP默認的后台地址,所以修改掉你的登錄入口,可以有效防止被人發現你的后台地址。
第九:使用Https協議
如果你的電腦有什么代理軟件或者監聽軟件,普通的傳輸方式可能是明文的,惡意者很容易竊取你的信息。改成https放心多了
服務器商官網都有修改https教程,如果你是WordPress站點的話,可以搜索WordPress配置SSL。
第十:關閉.php文件訪問權限
WP是用php開發的,在訪問你的站點的時候有可能某個鏈接是.php的,一旦被發現php源文件有漏洞的話,他可能就會做一些滲透。
在.htaccess文件里添加針對敏感目錄的規則,禁止直接訪問.php文件
<Directory "/var/www/wp-content/uploads/"> <Files *.php> Order Allow, Deny Deny from all </Files> </Directory>
第十一:數據庫
在安裝WP的過程中有個數據庫環節,其中有數據庫表前綴wp_,這是默認的,如果你使用這個,可能會被撞到使用SQL注入的形式攻擊你。有備份的話還好,沒備份就呵呵了。
第十二:找准目標群體
個人站點是針對國內的,所以國外的一些ip就可以直接拒絕掉了 ,而且大部分進行CC攻擊的多數來源是國外,只允許國內用戶訪問省事多了。
拒絕非中文用戶訪問:這需要修改 /usr/local/nginx/conf/duimin.com.conf,正常的非中文訪問的全部404錯誤頁面。
if ( $http_accept_language ~* ^[^zh]) { return 404; #非中文用戶訪問網站返回404 }
第十三:主機服務器設防
靠譜的主機服務商都包含主機安全,Web防火牆,DDos防護,安全組策略(端口開放限制)等功能。
第十四:代碼防止CC刷新和DDos
主要方法有:
禁止網站代理訪問
盡量將網站做成靜態頁面
限制連接數量
修改最大超時時間等
將以下代碼復制粘貼到functions.php文件中。
//防止CC攻擊 session_start(); //開啟session $timestamp = time(); $ll_nowtime = $timestamp ; //判斷session是否存在 如果存在從session取值,如果不存在進行初始化賦值 if ($_SESSION){ $ll_lasttime = $_SESSION['ll_lasttime']; $ll_times = $_SESSION['ll_times'] + 1; $_SESSION['ll_times'] = $ll_times; }else{ $ll_lasttime = $ll_nowtime; $ll_times = 1; $_SESSION['ll_times'] = $ll_times; $_SESSION['ll_lasttime'] = $ll_lasttime; } //現在時間-開始登錄時間 來進行判斷 如果登錄頻繁 跳轉 否則對session進行賦值 if(($ll_nowtime - $ll_lasttime) < 3){ if ($ll_times>=5){ header("location:http://127.0.0.1");//可以換成其他鏈接,比如站內的404錯誤顯示頁面(千萬不要用動態頁面) exit; } }else{ $ll_times = 0; $_SESSION['ll_lasttime'] = $ll_nowtime; $_SESSION['ll_times'] = $ll_times; }
上面的location:http://127.0.0.1可以修改為用戶多次刷新后你需要顯示給用戶的網址。這個網址建議放在三方服務商上。