首頁 > WordPress, 程式設計, 網頁設計 > 我的部落格被駭客了 – wordpress 後台登入修補

我的部落格被駭客了 – wordpress 後台登入修補

2009年4月30日  瀏覽次數 : 6,903

前幾天公布了 WP 後台登入的安全性問題 ( 甘道夫,我的 WordPress 被攻破了 [ WP 駭客記 ] )後,甘道夫一直都沒有出現來拯救城堡,不過等了半天,來了個清道夫,今天我們來動手修改 WP ,讓他的登入系統更安全吧。

圖 : CORA - 設定超過錯誤三次就禁止在登入

WP 的後台登入,如果被人家猜中了帳號,並且用簡單的密碼,那不就一下子就被人搞出來了,可是如果密碼強度太強又會造成自己記憶上的困難,還記得以前在園區某公司擔任小小 MIS ,MIS 頭頭交代,下個月起公司的登入密碼一率更改為複雜密碼性原則 ( 大小寫英文 + 數字符號 ),當然老闆有交代,誰敢不從呢,下個月馬上更改了複雜密碼性原則,並且強制要求員工更換,更妙的來了,雖然一定很強的密碼才可以登入,員工們乾脆用一張便利貼,寫上自己的密碼,就這樣貼在螢幕上,當然好一點的還會把它藏進自己的主機裡。( 這不是笑話 )

或許高度複雜密碼是很好安全,但是,卻不是很好用,但是我們在使用提款機的時候,也常常聽到說我的卡被吃了,因為忘記密碼超過三次,因此,我們是不是也應該幫 WP 也加上這個功能呢 ?

首先稍微解釋一下,首先我將來源頁面不是網站本身的使用者都踢除,第二點就是如果登入錯誤就記錄登入者的 IP 地址,如果超過三次錯誤,就無法再進入,當然也不會再解開,♣梅問題‧教學網【Minwt】♣ 問到我為什麼不寫個驗證碼登入阿,或是說寫一個 20 分鐘後會再解開的,不過我個人認為,部落格是個人使用,後台登入大概也只有一兩個人會用,既然連一兩個人常常在用都會打錯密碼,我也覺得沒救了。而且既然這個 IP 都錯了三次,以高安全性考量,就不要再讓他測了吧,還等 20 分鐘幹嘛哩。

這邊提供兩種方式,第一種是給不會看 PHP 的人用的,第二種是可以自己動手加程式碼,因為這種會影響到帳號密碼的程式或許有人不相信我,還是想看看到底寫了哪些東西,該不會一上傳帳號密碼就跑到我手上了吧,因此也有對這種心機重的人,喔不,是想學習程式碼的人,自己手動加入程式碼。

方法一 : 上傳即可使用

請將這個壓縮檔下載 [ 檔案下載 ]

並且上傳到 WP 的主目錄, wp-login.php 這頁請覆蓋他

上傳後開啟瀏覽器執行 http://yourdomain/corausir-table.php

來建立資料庫結構,完成後會出現 [ 新增成功 ] 字樣。

如此便完成了,之後你必須要建立一個前台的登入頁面,因為 wp-login.php 已經禁止其他地方連結

包含你如果是輸入 wp-admin/ 資料夾的專業也都會出現錯誤如下

image

 

方法二 : 自行修改 wp-login.php

STEP 1 : 找出 default 所在位置 並且在下面插入程式碼

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//確認來源
if(substr_count($_SERVER["HTTP_REFERER"],site_url()) > 0 ){
	//確認來源頁面是屬於部落格本身
	$user_ip = $_SERVER['REMOTE_ADDR'];
	//把使用者的 IP 查詢資料庫 取得登入錯誤次數
	$db = new mysqli ( DB_HOST, DB_USER, DB_PASSWORD, DB_NAME );
	$db->query ( "SET NAMES 'utf8'" );
	$query = "select *
            from login_check
            where login_ip = '$user_ip'";
    $result = $db->query ( $query );
    if(mysqli_num_rows($result) != 0){
	    $row = mysqli_fetch_assoc($result);
	    if($row["login_times"] > 2){
	    	//錯誤三次以上,轉向錯誤頁面
	    	wp_safe_redirect("error.php?error=2");
	    }
    }
    $db->close();
}else{
	//從非部落格頁面送出要求,轉向錯誤頁面
	wp_safe_redirect("error.php?error=1");
}

STEP 2 : if ( isset($_POST['log']) ) 並且在他的 下下行 插入程式碼

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//如果錯誤碼不是空的 就把 IP 記錄到資料庫中
	if($errors->get_error_code() != ''){
		$user_ip = $_SERVER['REMOTE_ADDR'];
		//把使用者的 IP 查詢資料庫 取得登入錯誤次數
		$db = new mysqli ( DB_HOST, DB_USER, DB_PASSWORD, DB_NAME );
		$db->query ( "SET NAMES 'utf8'" );
		$query = "select *
	            from login_check
	            where login_ip = '$user_ip'";
	    $result = $db->query ( $query );
 
	    if(mysqli_num_rows($result) == 0){
	    	//表示沒有登入錯誤過 - 新增錯誤 IP
	    	$query = "insert into login_check
             	(login_ip,login_times)
                values
                ('$user_ip',1)";
		    $result = $db->query ( $query );
	    }else{
	    	//表示已經錯誤過 1 次以上,所以把它再更新 +1
	    	$query = "UPDATE login_check SET login_times = login_times + 1
				WHERE login_ip = '$user_ip'";
	    	$result = $db->query ( $query );
	    }
	    $db->close();
	}

STEP 3 : 建立資料庫結構 table.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
 
require( dirname(__FILE__) . '/wp-load.php' );
 
 
	?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" <?php language_attributes(); ?>>
<head>
	<title><?php bloginfo('name'); ?> &rsaquo; <?php echo $title; ?></title>
	<meta http-equiv="Content-Type" content="<?php bloginfo('html_type'); ?>; charset=<?php bloginfo('charset'); ?>" />
</head>
<body>
<?php
	//新增資料庫 TABLE
	$db = new mysqli ( DB_HOST, DB_USER, DB_PASSWORD, DB_NAME );
	$db->query ( "SET NAMES 'utf8'" );
	$query = "CREATE TABLE IF NOT EXISTS `login_check` (
  `login_ip` varchar(15) character set utf8 collate utf8_unicode_ci NOT NULL,
  `login_times` int(11) NOT NULL,
  PRIMARY KEY  (`login_ip`)
) ";
    $result = $db->query ( $query );
    $db->close();
echo site_url();
?>
	新增成功
</body>
</html>

STEP 4 : 建立 ERROR 轉向頁面 error.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>無標題文件</title>
</head>
 
<body>
<center>
<br />
<br />
<a href="http://blog.corausir.org/">
<img src="http://files.corausir.org/images/error&lt;?php echo $_GET['error']; ?&gt;.jpg" width="600" height="310" />
</a>
</center>
</body>
</html>

 

如果你覺得這個方法很累,你也可以使用外掛來達成這個目的,因為我喜歡把人踢掉後還給他看一下公司的網站,因此我就還是用我自己的這個方法囉 ^^

如果你要外掛,請參考

高登工作室 : 幫WordPress後台築城牆

敗家誌 : Limit Login Attempts 1.3.1 [ 中文化檔 ]

 

PS : 老實說,本來這篇文章要再 PO 之前的文章 24 小時內要發佈的,但是一忙起來就沒有 PO ,結果被高登老爺 " 截 " 足先登了…,不過用了高老爺的網站作範例,再次感到 12 萬分的歉意,也一同向其他列名網站致歉。

Random Posts

Loading…

:: 把這篇好文推到書籤網站與更多人分享吧 ::
  • funp
  • Hemidemi
  • YahooKimo
  • Google
  • udn
  • Haohao
  • Live

目前並無相關文章

Ausir WordPress, 程式設計, 網頁設計 , , ,

  1. 2009年4月30日22:39 | #1

    呵呵! 用WP就是有這個好處, 有很多東西可以玩!
    大家互相交流是一件好事, 你說的事我不會在意的!

  2. 2009年5月1日01:07 | #2

    感謝高前輩不計較 ^_^

  3. 2009年5月2日21:45 | #3

    不錯的教學呢

  4. 2009年5月4日09:18 | #4

    還有個把wp-admin與login.php隱藏與改名的方法
    可以參考下面『時間不等於金錢』的文章
    http://andy.diimii.com/2009/01/wordpress安全保護-變更wp-loginphp/
    如此一來可以大大增加安全性
    外人不但進不來,且還熊熊找不到”門”在哪裡

  5. 2009年5月4日09:19 | #5

    改天再來研究研究~~
    最近好忙呀~

  6. 2009年5月6日20:42 | #6

    分享是進步的原動力,讚啦!

  7. 2009年5月7日12:33 | #7

    拆組達人 :
    還有個把wp-admin與login.php隱藏與改名的方法
    可以參考下面『時間不等於金錢』的文章
    http://andy.diimii.com/2009/01/wordpress安全保護-變更wp-loginphp/
    如此一來可以大大增加安全性
    外人不但進不來,且還熊熊找不到”門”在哪裡

    變更WP核心不是個好方法,用PLUG方式或是function.php方式調用才有結構化程式設計精神。XD

  8. 2009年5月7日14:07 | #8

    @Arno Ruan

    我也覺得用外掛的精神蠻好
    但是…

    大家都一樣~@@
    這樣子~比較危險

    開放原始碼就是這樣子~@@

  9. Jekyll
    2009年6月20日00:02 | #9

    有個 plugin 叫做 Stealth Login, 可以參考看看.

  10. 2009年6月20日10:33 | #10

    @Jekyll

    用外掛來修改也是一種不錯的作法
    不過我頭都洗了~~

    就先這樣子吧 ^_^

  11. 2009年10月14日17:06 | #11

    呵呵骇客无处不在

  12. 梦梦吧
    2009年10月15日16:29 | #12

    天津市三鼎包装机械有限公司主要生产颗粒包装机,粉剂包装机,酱体包装机等多功能包装机。 天津市三鼎包装机械有限公司主要产品有自动颗粒包装机、自动酱体包装机、自动袋泡茶包装机、自动液体包装机、自动粉剂包装机、自动片剂包装机、多功能包装机、链传式包装机、三边封包装机.访问地址:http://www.sdbzj.com

  13. 2010年2月14日00:41 | #13

    我是来自中国大陆,希望和你们台湾骇客认识;
    可以给我发你们的联系方式或博客地址!

  14. 2010年2月23日15:03 | #14

    @孤独者黑客

    我們不是黑客啦 ^_^
    只是稍微玩看看而已

  15. 2010年7月8日18:59 | #15

    Ausir :@孤独者黑客
    我們不是黑客啦 ^_^只是稍微玩看看而已

    那怎么才能和你们取的联系到呢?
    本人百度:http://hi.baidu.com/long294133340

  1. 2009年5月8日05:31 | #1