最近 WordPress 安全問題被小編我所關注着,我們如何做才能最大程度上保護我們的 WordPress 程序不被黑客所攻擊?可能很多技術大牛都習以為常了,但是畢竟還是有很多菜鳥不知道的,本帖為一篇 WordPress 安全防護的掃盲貼吧,幫助大家儘可能的提升 WordPress 程序的安全性! !
這裏面小編整理了幾個方面:
wo-login 文件
WordPress 自身系統來説,最直接的危害就是 wp-login.php 這個後台路徑已經不在是什麼秘密了,最好的解決方法無非也就是如何把這個後台路徑給屏蔽或替換一個更隱蔽的地址,這裏小編就説些最簡單,小白也能夠看懂的方法:
一、首先找到 WordPress 根目錄下的 wp-login.php 文件,用代碼編寫軟件打開,編輯裏面代碼,搜索 wp_shake_js 找到
- if ( $shake_error_codes && $wp_error->get_error_code() && in_array( $wp_error->get_error_code(), $shake_error_codes ) )
- add_action( 'login_head', 'wp_shake_js', 12 );
在這段?> 的下一行加入代碼
- <?php
- if($_GET["aa"]!="bb"){
- header('Location: http:
- }
- ?>
其中 aa 、 bb 替換為自己的內容,然後 WordPress 後台的地址就變成了 http://www.2zzt.com/ wp-login.php?aa=bb 結構了,這就成了您 WordPress 後台的唯一路徑,其他路徑均跳轉到首頁了!當然這個代碼也可以放在主題的文件裏,這樣每次 WordPress 更新就不需要再修改一次了, 在主題文件下找到 functions.php,將下面代碼加入即可得到同樣的效果!
- add_action('login_enqueue_scripts','login_protection');
- function login_protection(){
- if($_GET['aa'] != 'bb')header('Location: http:
- }
但是話説回來,我們仔細研究下 WordPress 的登陸文件會發現,其實 WordPress 的登陸是採用 post 的方式來提交登陸參數的,所以説,即使我們做了後台地址的隱藏,但是通過 post 提交還是可以登陸到 WordPress 的後台,那麼這樣我們該如何做呢?
解決方法只有把 WordPress 轉移到子目錄下,操作方式是
a 、 WordPress 後台-設置-常規下 WordPress 地址 (url) 換成 http://www.2zzt.com/aaa(aaa 為我們自己設置的,是沒有人知道的)
b 、在我們的網站根目錄下創建一個 aaa 文件夾 (aaa 為上面所説的名稱),然後將根目錄下的所有文件 (除了 index.php 、 robots.txt 以及.htaccess 外) 的所有文件轉移到這個 aaa 文件夾下, 那麼我們現在的登陸後台就變成了 http://www.2zzt.com/aaa/wp-login.php,而 aaa 是沒有人知道的地址。。。
WordPress 搬到子目錄後還要將根目錄下 index.php 文件內容
- require('./wp-blog-header.php');
修改為:
- require('./aaa/wp-blog-header.php');
小編不得不提示下,這裏的 aaa 是你們自己設置的子目錄的名稱,要活學活用哈!
這樣一來,後台地址隱藏了,且無法通過 post 來提交登陸信息了。。。這是黑客也無從下手的節奏啊!
後台帳號 admin
為了更加的安全,建議大家或者説一定不要將 admin 還作為網站管理帳號登陸,這給暴力破解帶來了方便。同時,通過?author=$id 也可以很簡單的爆出我們的管理帳號,例如:222.com/?author=*(*號為 1-9999 數字) 即可輕而易舉的爆出我們的管理帳號,有了帳號再加上市面上的密碼字典,那破解也只是時間問題了,解決方法是在 functions.php 文件裏添加一下一下代碼:
- add_filter( 'request', 'v7v3_author_link_request' );
- function v7v3_author_link_request( $query_vars ) {
- if ( array_key_exists( 'author_name', $query_vars ) ) {
- global $wpdb;
- $author_id=$query_vars['author_name'];
- if ( $author_id ) {
- $query_vars['author'] = $author_id;
- unset( $query_vars['author_name'] );
- }
- }
- return $query_vars;
- }
- add_filter( 'author_link', 'v7v3_author_link', 10, 2 );
- function v7v3_author_link( $link, $author_id) {
- global $wp_rewrite;
- $author_id = (int) $author_id;
- $link = $wp_rewrite->get_author_permastruct();
- if ( emptyempty($link) ) {
- $file = home_url( '/' );
- $link = $file . '?author=' . $author_id;
- } else {
- $link = str_replace('%author%', $author_id, $link);
- $link = home_url( user_trailingslashit( $link ) );
- }
- return $link;
- }
這樣重寫後即可改變作者頁面的鏈接方式了。
wp-admin 目錄
這個問題延伸出一個更為深點的問題,那就是我們如何把 wp-admin 目錄也保護起來呢?小編給的方法雖然有點麻煩,但是絕對很安全,那就是在 wp-admin 目錄下新建個.htaccess 讓只有你一個 IP 能夠訪問,這個方法麻煩就麻煩在如果你的網是動態 IP,那麼就要進.htaccess 修改一次 IP,才可訪問,但是這方法也絕對夠安全了。.htaccess 的內容為:
- order deny, allow
- allow from 888.888.888.8888 #Your IP Address
- deny from all
換為自己的 IP 即可,那麼 wp-admin 目錄只有你一人可以訪問了!説到這,後台目錄路徑的問題安全了!
WordPress 頭部信息
隱藏頭部不必要出現的信息,例如 WordPress 版本號等等,暴力攻擊者掌握了我們的 WordPress 版本號後就可以根據目前已知漏洞進行攻擊了,解決的方法是在我們的主題文件夾的 functions.php 內添加下面信息,以方便隱藏了 WordPress 不必要出現的信息,也給網站優化方面帶來好處!
- remove_action('wp_head','wp_generator');
- remove_action('wp_head','rsd_link');
- remove_action('wp_head','wlwmanifest_link');
- remove_action('wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0 );
- remove_action('wp_head', 'wp_shortlink_wp_head', 10, 0 );
- remove_action('wp_head', 'rel_canonical' );
絕對路徑泄漏修復
WordPress 系統自身來説,有 4 個文件會暴漏出網站所在服務器下的絕對路徑,這個信息如果被惡意利用,那後果也是很嚴重的!為了不被別人發現我們的網站絕對路徑,我們需要對以下四個文件進行操作,分別是:
- 1 、/wp-includes/registration-functions.php
- 2 、/wp-includes/user.php
- 3 、/wp-admin/admin-functions.php
- 4 、/wp-admin/upgrade-functions.php
解決方法就很簡單了,分別打開這幾個文件,然後在文件的頭部的<?php 下一行添加
即可屏蔽報錯,其實還有一個地方會報錯,那麼就是我們 WordPress 主題的目錄文件下的 index.php 裏面,最好也加上這個代碼!!!
當然我們如果用的是服務器,而不是虛擬主機的話,也最好到服務器下的 php.ini 文件裏關閉 php 報錯,一般 php.ini 文件的路徑在/usr/local/php/etc 下,修改 php.ini 文件內 display_errors = off 即可屏蔽整個服務器的 php 報錯!
説到這,我們的 WordPress 應該已經十分的強悍了,至少常見問題都已經解決,山外有山,人外有人這也是沒有辦法的,最後小編建議大家如果是在用服務器 VPS 的情況下,儘量少開端口,一般開個 80 和 22 端口即可!端口越多,漏洞越多,安全性就受到打折!