精品軟體與實用教程
建置WordPress網站之前,請先配置 Nginx安全規則
Nginx安全規則 是在搭建WordPress在網站之前,最先需要配置的,目前WordPress 是最受歡迎的建站程序,它擁有超過30%的網絡市場份額,這也導致了WordPress 經常會成為安全威脅的目標。 Nginx安全規則顯得十分重要,因此,對於我們這些WordPress 網站所有者來說,最好設定一些Nginx安全規則來加強網站的安全性。
WordPress 可以運行在Apache 或 Nginx 環境中,今天我們將分享一些增強WordPress安全性的Nginx規則。
禁止下載以XXX 字尾的文件
設定網站內禁止下載的檔案副檔名,避免資料庫等敏感檔案被打包下載。
location ~ \.(zip|rar|sql|bak|gz|7z)$ { return 444; }
URL敏感字元跳轉
URL訪問連結中包含關鍵字一律跳到網站首頁,或指向到404頁面。
#url裡含有test直接跳到網站首頁if ($request_uri ~* test=) { return 301 https://uzbox.com; } #url中包含下列關鍵字,跳到首頁if ($request_uri ~* "(\.gz)|(")|(\.tar)|(admin)|(\.zip)|(\.sql)|(\.asp)|(\.rar)|(function)|($_GET)|(eval)|(\?php)|(config)|(\')|(box Suzak"") |
防止惡意爬蟲
屏蔽垃圾蜘蛛爬蟲的nginx配置,你可以將垃圾爬蟲的名稱加入到下面屏蔽的規則中。
以下是一些爬蟲的名稱,僅供參考。
qihoobot|Censys|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo! Slurp|Yahoo! Slurp China|YoudaoBot|Sosoarch|Sogou spider| Bot|FeedDemon|JikeSpider|Indy Library|Alexa Toolbar|AskTbFXTV|AhrefsBot|CrawlDaddy|CoolpadWebkit|Java|Feedly|UniversalFeedParser|ApacheBench|Microsoft URL Control|Swiftbot|ZmEu* Bot|YYSpider|DigExt|YisouSpider|Scrapy|HttpClient|MJ12bot|heritrix|EasouSpider|LinkpadBot|Ezooms
if ($http_user_agent ~* (SemrushBot|python|MJ12bot|AhrefsBot|AhrefsBot|hubspot|opensiteexplorer|leiki|webmeup)) { return 404; }
禁止非瀏覽器造訪網站
#禁止非瀏覽器存取if ($http_user_agent ~ ^$) { return 404; }
隱藏Nginx和PHP版本
最好不要對外公開Nginx以及PHP版本,如果特定的Ningx或PHP版本暴露出漏洞,攻擊者又發現你的伺服器上的存在對應的漏洞版本,那可能就很危險了。以下規則可以隱藏Nginx和PHP版本:
#隱藏nginx 版本. server_tokens off; #隱藏PHP 版本fastcgi_hide_header X-Powered-By; proxy_hide_header X-Powered-By;
安全標頭
安全標頭( header )透過指示瀏覽器行為提供額外的安全層。例如,X-Frame-Options,可以防止你的網站被嵌入iframe框架中進行載入。而Strict-Transport-Security會讓瀏覽器採用HTTPS方式載入站點。
add_header X-Frame-Options SAMEORIGIN; add_header Strict-Transport-Security "max-age=31536000"; add_header X-Content-Type-Options nosniff; add_header X-XSS-Protection "1; mode=block";
阻止存取子目錄
如果你的網站在子目錄上運行,例如/blog,應該將 /blog以外的子目錄限制存取。
location ~ ^/(?!(blog)/?) { deny all; access_log off; log_not_found off; }
限制存取XMLRPC
WordPress中的XMLRPC端點(根目錄下的xmlrpc.php檔案)用於允許外部應用程式與WordPress資料互動。例如,它可以允許新增、建立或刪除文章。但是,XMLRPC也是常見的攻擊媒介,攻擊者可以在未經授權的情況下執行這些操作。所以最好允許從您信任的授權IP請求XMLRPC,如下所示:
location ~* /xmlrpc.php$ { allow 172.0.1.1; deny all; }
新增上述內容後,應該在瀏覽器中存取xmlrpc.php 時會看到403錯誤回應代碼。
限制請求類型
大多數情況下,您的網站可能只會執行兩種類型的請求:
- GET – 從你的網站檢索數據
- POST – 將資料提交到你的網站
所以,只允許我們的網站執行這兩種請求類型,也是增強安全性的做法。
if ($request_method !~ ^(GET|POST)$ ) { return 444; }
禁止直接存取PHP文件
在神不知不覺的情況下,駭客可能會將PHP檔案上傳到你的伺服器中,然後透過存取該惡意檔案執行某些操作,即可在你的網站上建立後門。所有我們應該禁止直接存取任何php文件:
location ~* /(?:uploads|files|wp-content|wp-includes|akismet)/.*.php$ { deny all; access_log off; log_not_found off; }
禁止存取某些敏感文件
和PHP文件相似,以點開頭的文件,例如 .htaccess、.user.ini以及.git可能包含敏感資訊。為了更安全,最好禁用對這些文件的直接訪問。
location ~ /\.(svn|git)/* { deny all; access_log off; log_not_found off; } location ~ /\.ht { deny all; access_log off; log_not_found off; } location ~ /\.useruser.;
減少垃圾評論
垃圾留言可能不會破壞你的網站,但它會使你的資料庫中寫入這些垃圾內容,從而作為廣告推廣。要減少垃圾評論內容,您可以將以下規則新增至Nginx配置以及像Akismet這樣的垃圾評論防護插件。
set $comment_flagged 0; set $comment_request_method 0; set $comment_request_uri 0; set $comment_referrer 1; if ($request_method ~POST "/wp-comments-post\.php$"){ set $comment_request_method 1; } if ($http_referer !~ "^https?://(([^/]+\.)?site\.com|jetpack\.wordpress\.com/jet-Penmentcom" 0; } set $comment_flagged "${comment_request_method}${comment_request_uri}${comment_referrer}"; if ($comment_flagged = "111") { return 403; }
限制請求
WordPress登入頁面wp-login.php是暴力攻擊的常見端點。攻擊者會嘗試透過大量提交使用者名稱和密碼組合進行登入嘗試,可能無法破解你的密碼,但是對伺服器資源佔用非常大,可能會導致網站無法存取。
為此,我們可以應用一個規則來限制頁面每秒可以處理的請求數。這裡我們將限制設定為每秒2個請求,超過次數的請求將被阻止。
limit_req_zone $binary_remote_addr zone=WPRATELIMIT:10m rate=2r/s; location ~ \wp-login.php$ { limit_req zone=WPRATELIMIT; }
禁用目錄列表
最後一旦也非常重要,你應該停用目錄列表,以便攻擊者無法知道目錄中的內容。
autoindex off;
總結
網站安全已經是SEO最佳化中非常重要的一環,一旦網站被駭客入侵,就可能導致網站打不開、訪問速度變慢、被掛黑鍊等問題,而這些問題一出現就有可能被搜尋引擎拉入黑名單,掌握最基礎的網站安全防範知識是很有必要的。
最近刷搜尋的太猖獗了