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

phpBB-TW Knowledge Base
收集網友們在竹貓所發表的教學主題或文章,以利分享!
(僅供瀏覽,由版主群維護)
回覆文章
頭像
心靈捕手
默默耕耘的老師
默默耕耘的老師
文章: 8510
註冊時間: 2004-04-30 01:54
來自: Taiwan

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

文章 心靈捕手 »

前言

一般而言, 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
施比受有福,祝福您好運! ^_^
歡迎光臨★★心靈捕手★★ :: 討論區
https://wang5555.dnsfor.me/phpBB3/
回覆文章

回到「教學文件庫」