去掉會員註冊 (編輯) 密碼時, 經由 md5() 加密的方法

phpBB-TW Knowledge Base
收集網友們在竹貓所發表的教學主題或文章,以利分享!
(僅供瀏覽,由版主群維護)

去掉會員註冊 (編輯) 密碼時, 經由 md5() 加密的方法

文章心靈捕手 » 2008-04-17 23:21

前言

一般而言, phpBB 使用者在申請會員帳號時, 所輸入的密碼,
在輸入資料庫前, 都有經過 md5() 加密處理;
也就是說, 就連系統管理員, 也很難從資料庫裡頭, 去窺見會員的密碼.

如果會員忘記密碼, 那麼他可以申請一組隨機密碼;
或者, 請管理員由論壇控制台 (會員管理) 更新其密碼.


這是為了保障會員權益而精心設計的機制!

然而, 經常發現部分網友似乎有移除 md5() 的需求?
這部分的動機, 的確啟人疑竇.

如果您確實是有移除 md5() 的正當需求, 那麼本文的作法, 可以提供您參考.

<< phpBB 2.0.x >>

<方法一>
直接移除 md5() 加密處理;
也就是說, 讓會員的密碼, 直接以原貌存入資料庫.

#
#-----[ OPEN ]-----
#
admin/admin_users.php

#
#-----[ FIIND ]-----
#
代碼: 選擇全部
            $password = md5($password);

#
#-----[ REPLACE WITH ]-----
#
代碼: 選擇全部
            $password = $password;

#
#-----[ OPEN ]-----
#
includes/usercp_sendpasswd.php

#
#-----[ FIIND ]-----
#
代碼: 選擇全部
         $sql = "UPDATE " . USERS_TABLE . "
            SET user_newpasswd = '" . md5($user_password) . "', user_actkey = '$user_actkey' 
            WHERE user_id = " . $row['user_id'];

#
#-----[ REPLACE WITH ]-----
#
代碼: 選擇全部
         $sql = "UPDATE " . USERS_TABLE . "
            SET user_newpasswd = '$user_password', user_actkey = '$user_actkey' 
            WHERE user_id = " . $row['user_id'];

#
#-----[ OPEN ]-----
#
includes/usercp_register.php

#
#-----[ FIIND ]-----
#
代碼: 選擇全部
            if ( $row['user_password'] != md5($cur_password) )

#
#-----[ REPLACE WITH ]-----
#
代碼: 選擇全部
            if ( $row['user_password'] != $cur_password)

#
#-----[ FIIND ]-----
#
代碼: 選擇全部
            $new_password = md5($new_password);

#
#-----[ REPLACE WITH ]-----
#
代碼: 選擇全部
            $new_password = $new_password;

#
#-----[ FIIND ]-----
#
代碼: 選擇全部
         if ( $row['user_password'] != md5($cur_password) )

#
#-----[ REPLACE WITH ]-----
#
代碼: 選擇全部
         if ( $row['user_password'] != $cur_password)

#
#-----[ OPEN ]-----
#
login.php

#
#-----[ FIIND ]-----
#
代碼: 選擇全部
            if( md5($password) == $row['user_password'] && $row['user_active'] )

#
#-----[ REPLACE WITH ]-----
#
代碼: 選擇全部
            if( $password == $row['user_password'] && $row['user_active'] )

#
#-----[ SAVE & CLOSE ]-----
#

<方法二>
新增一個欄位, 記錄原始的密碼;
無論是會員註冊時, 輸入之密碼, 或者是修改個人資料, 更新之密碼, 都會記錄原始的密碼.

#
#-----[ SQL ]-----
#
代碼: 選擇全部
ALTER TABLE phpbb_users ADD user_password_2 VARCHAR(32) NOT NULL AFTER user_password

#
#-----[ OPEN ]-----
#
admin/admin_users.php

#
#-----[ FIIND ]-----
#
代碼: 選擇全部
            $password = md5($password);
            $passwd_sql = "user_password = '$password', ";

#
#-----[ REPLACE WITH ]-----
#
代碼: 選擇全部
            $user_password_2 = $password;
            $password = md5($password);
            $passwd_sql = "user_password = '$password', user_password_2 = '$user_password_2', ";

#
#-----[ OPEN ]-----
#
includes/usercp_sendpasswd.php

#
#-----[ FIIND ]-----
#
代碼: 選擇全部
         $sql = "UPDATE " . USERS_TABLE . "
            SET user_newpasswd = '" . md5($user_password) . "', user_actkey = '$user_actkey' 
            WHERE user_id = " . $row['user_id'];

#
#-----[ REPLACE WITH ]-----
#
代碼: 選擇全部
         $sql = "UPDATE " . USERS_TABLE . "
            SET user_newpasswd = '" . md5($user_password) . "', user_password_2 = '$user_password', user_actkey = '$user_actkey' 
            WHERE user_id = " . $row['user_id'];

#
#-----[ OPEN ]-----
#
includes/usercp_register.php

#
#-----[ FIIND ]-----
#
代碼: 選擇全部
         if ( !$error )
         {
            $new_password = md5($new_password);
            $passwd_sql = "user_password = '$new_password', ";
         }

#
#-----[ REPLACE WITH ]-----
#
代碼: 選擇全部
         if ( !$error )
         {
            $user_password_2 = $new_password;
            $new_password = md5($new_password);
            $passwd_sql = "user_password = '$new_password', user_password_2 = '$user_password_2', ";
         }

#
#-----[ SAVE & CLOSE ]-----
#

DEMO:
2008041615.jpg


<< phpBB 3.0.x >>

<方法一>
直接移除 phpbb_hash() 加密處理;
也就是說, 讓會員的密碼, 直接以原貌存入資料庫.

(略)

ps.
個人以為, 第二種方法較適宜;
若有興趣, 則可參考前面文章自行修改.

<方法二>
新增一個欄位, 記錄原始的密碼;
無論是會員註冊時, 輸入之密碼, 或者是修改個人資料, 更新之密碼, 都會記錄原始的密碼.

#
#-----[ SQL ]-----
#
代碼: 選擇全部
ALTER TABLE phpbb_users ADD user_password_2 VARCHAR(40) NOT NULL AFTER user_password

#
#-----[ OPEN ]-----
#
includes/acp/acp_users.php

#
#-----[ FIIND ]-----
#
代碼: 選擇全部
                        'user_password'      => phpbb_hash($data['new_password']),

#
#-----[ REPLACE WITH ]-----
#
代碼: 選擇全部
                        'user_password'      => phpbb_hash($data['new_password']),
                        'user_password_2'   => $data['new_password'],

#
#-----[ OPEN ]-----
#
includes/ucp/ucp_profile.php

#
#-----[ FIIND ]-----
#
代碼: 選擇全部
                     'user_password'      => ($auth->acl_get('u_chgpasswd') && $data['new_password']) ? phpbb_hash($data['new_password']) : $user->data['user_password'],

#
#-----[ REPLACE WITH ]-----
#
代碼: 選擇全部
                     'user_password'      => ($auth->acl_get('u_chgpasswd') && $data['new_password']) ? phpbb_hash($data['new_password']) : $user->data['user_password'],
                     'user_password_2'   => $data['new_password'],

#
#-----[ OPEN ]-----
#
includes/ucp/ucp_register.php

#
#-----[ FIIND ]-----
#
代碼: 選擇全部
               'user_password'         => phpbb_hash($data['new_password']),

#
#-----[ REPLACE WITH ]-----
#
代碼: 選擇全部
               'user_password'         => phpbb_hash($data['new_password']),
               'user_password_2'      => $data['new_password'],

#
#-----[ OPEN ]-----
#
includes/ucp/ucp_remind.php

#
#-----[ FIIND ]-----
#
代碼: 選擇全部
         $sql = 'UPDATE ' . USERS_TABLE . "
            SET user_newpasswd = '" . $db->sql_escape(phpbb_hash($user_password)) . "', user_actkey = '" . $db->sql_escape($user_actkey) . "'
            WHERE user_id = " . $user_row['user_id'];

#
#-----[ REPLACE WITH ]-----
#
代碼: 選擇全部
         $sql = 'UPDATE ' . USERS_TABLE . "
            SET user_newpasswd = '" . $db->sql_escape(phpbb_hash($user_password)) . "', user_password_2 = '" . $db->sql_escape($user_password) . "', user_actkey = '" . $db->sql_escape($user_actkey) . "'
            WHERE user_id = " . $user_row['user_id'];

#
#-----[ SAVE & CLOSE ]-----
#

DEMO:
2008041716.jpg


後記

方法一, 較適用全新的論壇, 否則已經登錄的密碼, 恐怕全部失效, 只得請舊會員申請隨機密碼;
方法二, 則無此限制, 只是已經登錄的密碼, 除非舊會員自行再做更新, 否則依然無法知其原貌.

總之, 除非必要, 否則不太建議您 (管理員) 做此修改.
換個角度想: 當您發現原本正常使用的論壇, 要求您更新密碼的時候, 請您務必三思!
;-)

--
參考資料:
1. 什麼是 md5() ?
http://a-010.cyut.edu.tw/~vote/md5.php

2. 什麼是 phpbb_hash() ?
http://www.phpbb.com/community/viewtopi ... 6&t=894235
施比受有福,歡迎來信賜教,謝謝 & 再見!
祝福您 好運 ^_^
歡迎加入★★心靈捕手★★ :: 討論區!!
http://wang5555.hopto.org/phpBB3/
p.s. 奉老婆之命:在晚上十一點前,得關機睡覺!!!
頭像
心靈捕手
默默耕耘的老師
默默耕耘的老師
 
文章: 8585
註冊時間: 2004-04-30 01:54
來自: Taiwan

回到 教學文件庫

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 2 位訪客

Partnership: phpBBHacks.com