1 頁 (共 1 頁)

[問題]會員註冊問題(特別的國字不能註冊!?)[已解決]

發表於 : 2006-02-06 17:05
blair520
●架設主機作業系統:Windows Xp
●上網方式:ADSL
●phpBB2 版本:竹貓星球phpBB-2.0.19 UTF-8
●phpBB2 連結網址: http://blair80081.php2h.com/phpBB2/
●已安裝外掛:無\r

我有一位會員要註冊
他想要用的ID是 沙漠北極熊
結果他註冊時系統卻告訴他
【很抱歉!! 會員名稱內不得包含非法字元, 例如: ''】
之後我幫他註冊也是一樣出現↑
請問竹貓的好心腸的大大們幫幫小弟我>"<
到底問題出在哪裡呢?>"<非常的感謝您

發表於 : 2006-02-06 21:48
心靈捕手
系統訊息的意思是說 '沙漠裡不應該有北極熊' .

--
抱歉! 以上是在說冷笑話. :mrgreen:

--
我猜想:
應該是受到 utf-8 編碼的影響, 產生了系統不允許的字元.

以下的修改, 提供您參考:
#
#-----[ OPEN ]-----
#
includes/functions_validate.php

#
#-----[ FIND ]-----
#

代碼: 選擇全部

	// Don't allow " and ALT-255 in username.
	if (strstr($username, '"') || strstr($username, '"') || strstr($username, chr(160)))
	{
		return array('error' => true, 'error_msg' => $lang['Username_invalid']);
	}
#
#-----[ REPLACE WITH ]-----
#

代碼: 選擇全部

	/*// Don't allow " and ALT-255 in username.
	if (strstr($username, '"') || strstr($username, '"') || strstr($username, chr(160)))
	{
		return array('error' => true, 'error_msg' => $lang['Username_invalid']);
	}*/
#
#-----[ SAVE & CLOSE ]-----
#
#EoM
ps.
尚不明白, 如此做, 有無安全上的缺失, 請小心為之.

發表於 : 2006-02-06 21:54
blair520
心靈捕手 寫:系統訊息的意思是說 '沙漠裡不應該有北極熊' .

--
抱歉! 以上是在說冷笑話. :mrgreen:

--
我猜想:
應該是受到 utf-8 編碼的影響, 產生了系統不允許的字元.

以下的修改, 提供您參考:
#
#-----[ OPEN ]-----
#
includes/functions_validate.php

#
#-----[ FIND ]-----
#

代碼: 選擇全部

	// Don't allow " and ALT-255 in username.
	if (strstr($username, '"') || strstr($username, '"') || strstr($username, chr(160)))
	{
		return array('error' => true, 'error_msg' => $lang['Username_invalid']);
	}
#
#-----[ REPLACE WITH ]-----
#

代碼: 選擇全部

	/*// Don't allow " and ALT-255 in username.
	if (strstr($username, '"') || strstr($username, '"') || strstr($username, chr(160)))
	{
		return array('error' => true, 'error_msg' => $lang['Username_invalid']);
	}*/
#
#-----[ SAVE & CLOSE ]-----
#
#EoM
ps.
尚不明白, 如此做, 有無安全上的缺失, 請小心為之.
感恩大大的回答~勞煩您了~真不好意思 :-D

大大我有找到可是那邊多了一個東西ㄝ...

發表於 : 2006-02-06 22:03
blair520
大大我有找到你寫的代碼可是那邊多了一個東西ㄝ...
心靈捕手 寫:系統訊息的意思是說 '沙漠裡不應該有北極熊' .

--
抱歉! 以上是在說冷笑話. :mrgreen:

--
我猜想:
應該是受到 utf-8 編碼的影響, 產生了系統不允許的字元.

以下的修改, 提供您參考:
#
#-----[ OPEN ]-----
#
includes/functions_validate.php

#
#-----[ FIND ]-----
#

代碼: 選擇全部

	// Don't allow " and ALT-255 in username.
	if (strstr($username, '"') || strstr($username, '"') || strstr($username, chr(160)))
	{
		return array('error' => true, 'error_msg' => $lang['Username_invalid']);
	}
#
#-----[ REPLACE WITH ]-----
#

代碼: 選擇全部

	/*// Don't allow " and ALT-255 in username.
	if (strstr($username, '"') || strstr($username, '"') || strstr($username, chr(160)))
	{
		return array('error' => true, 'error_msg' => $lang['Username_invalid']);
	}*/
#
#-----[ SAVE & CLOSE ]-----
#
#EoM
ps.
尚不明白, 如此做, 有無安全上的缺失, 請小心為之.

代碼: 選擇全部

['Username_invalid']);
後面多了一個
是\r

代碼: 選擇全部

return array('error' => false, 'error_msg' => '');
請問這個有要緊嗎?還是在後面跟您說的一樣加上*/呢?

><

發表於 : 2006-02-06 22:05
blair520
由於我前天才開始學做論壇
所以我問題會很多很多><"
還請大大們多多指教><

發表於 : 2006-02-06 22:10
心靈捕手
不必!

以下是原始函式語法完整擷取:

代碼: 選擇全部

function validate_username($username)
{
	global $db, $lang, $userdata;

	// Remove doubled up spaces
	$username = preg_replace('#\s+#', ' ', trim($username)); 
	$username = phpbb_clean_username($username);

	$sql = "SELECT username 
		FROM " . USERS_TABLE . "
		WHERE LOWER(username) = '" . strtolower($username) . "'";
	if ($result = $db->sql_query($sql))
	{
		while ($row = $db->sql_fetchrow($result))
		{
			if (($userdata['session_logged_in'] && $row['username'] != $userdata['username']) || !$userdata['session_logged_in'])
			{
				$db->sql_freeresult($result);
				return array('error' => true, 'error_msg' => $lang['Username_taken']);
			}
		}
	}
	$db->sql_freeresult($result);

	$sql = "SELECT group_name
		FROM " . GROUPS_TABLE . " 
		WHERE LOWER(group_name) = '" . strtolower($username) . "'";
	if ($result = $db->sql_query($sql))
	{
		if ($row = $db->sql_fetchrow($result))
		{
			$db->sql_freeresult($result);
			return array('error' => true, 'error_msg' => $lang['Username_taken']);
		}
	}
	$db->sql_freeresult($result);

	$sql = "SELECT disallow_username
		FROM " . DISALLOW_TABLE;
	if ($result = $db->sql_query($sql))
	{
		if ($row = $db->sql_fetchrow($result))
		{
			do
			{
				if (preg_match("#\b(" . str_replace("\*", ".*?", preg_quote($row['disallow_username'], '#')) . ")\b#i", $username))
				{
					$db->sql_freeresult($result);
					return array('error' => true, 'error_msg' => $lang['Username_disallowed']);
				}
			}
			while($row = $db->sql_fetchrow($result));
		}
	}
	$db->sql_freeresult($result);

	$sql = "SELECT word 
		FROM  " . WORDS_TABLE;
	if ($result = $db->sql_query($sql))
	{
		if ($row = $db->sql_fetchrow($result))
		{
			do
			{
				if (preg_match("#\b(" . str_replace("\*", ".*?", preg_quote($row['word'], '#')) . ")\b#i", $username))
				{
					$db->sql_freeresult($result);
					return array('error' => true, 'error_msg' => $lang['Username_disallowed']);
				}
			}
			while ($row = $db->sql_fetchrow($result));
		}
	}
	$db->sql_freeresult($result);

	// Don't allow " and ALT-255 in username.
	if (strstr($username, '"') || strstr($username, '"') || strstr($username, chr(160)))
	{
		return array('error' => true, 'error_msg' => $lang['Username_invalid']);
	}

	return array('error' => false, 'error_msg' => '');
}
您所指的部份, 應該是在 '}' 之後吧!?

啊~對不起><"

發表於 : 2006-02-06 22:15
blair520
眼睛脫窗了><"我把*/

加到\r

代碼: 選擇全部

return array('error' => false, 'error_msg' => '');
}
後面去了=..=+

><"

發表於 : 2006-02-06 22:21
blair520
blair520 寫:眼睛脫窗了><"我把*/

加到\r

代碼: 選擇全部

return array('error' => false, 'error_msg' => '');
}
後面去了=..=+
加到後面去的錯誤是\r
會員管理->管理選項
會找不到網頁 :-D
非常感謝大大的教導~小弟會努力把論壇做好 :-D

小弟的濫論壇有時候會找不到網頁~
真的不知道為什麼會這樣子捏~空間的關係嗎? :-(

發表於 : 2006-08-27 16:58
jeswang.tw
這段 mark 掉之後,如果有人用 Alt-255 輸入註冊,會發生什麼事? :?:

發表於 : 2007-02-05 14:04
阿維
心靈捕手 寫:系統訊息的意思是說 '沙漠裡不應該有北極熊' .

--
抱歉! 以上是在說冷笑話. :mrgreen:

--
我猜想:
應該是受到 utf-8 編碼的影響, 產生了系統不允許的字元.

以下的修改, 提供您參考:
#
#-----[ OPEN ]-----
#
includes/functions_validate.php

#
#-----[ FIND ]-----
#

代碼: 選擇全部

	// Don't allow " and ALT-255 in username.
	if (strstr($username, '"') || strstr($username, '"') || strstr($username, chr(160)))
	{
		return array('error' => true, 'error_msg' => $lang['Username_invalid']);
	}
#
#-----[ REPLACE WITH ]-----
#

代碼: 選擇全部

	/*// Don't allow " and ALT-255 in username.
	if (strstr($username, '"') || strstr($username, '"') || strstr($username, chr(160)))
	{
		return array('error' => true, 'error_msg' => $lang['Username_invalid']);
	}*/
#
#-----[ SAVE & CLOSE ]-----
#
#EoM
ps.
尚不明白, 如此做, 有無安全上的缺失, 請小心為之.
這個修正好像跟 Custom mass PM 1.4.7 其中一個的步驟有衝突

代碼: 選擇全部

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

# 
#-----[ FIND ]------------------------------------------------ 
# 
// Don't allow 
if (strstr(

# 
#-----[ IN-LINE FIND ]---------------------------------------- 
# 
, chr(160))

# 
#-----[ IN-LINE AFTER, ADD ]---------------------------------- 
# 
 || strstr($username, ';')
剛好是在註解的範圍內,請問該如何解決呢?

發表於 : 2007-02-05 15:36
心靈捕手
JORDAN 寫:
心靈捕手 寫:系統訊息的意思是說 '沙漠裡不應該有北極熊' .

--
抱歉! 以上是在說冷笑話. :mrgreen:

--
我猜想:
應該是受到 utf-8 編碼的影響, 產生了系統不允許的字元.

以下的修改, 提供您參考:
#
#-----[ OPEN ]-----
#
includes/functions_validate.php

#
#-----[ FIND ]-----
#

代碼: 選擇全部

	// Don't allow " and ALT-255 in username.
	if (strstr($username, '"') || strstr($username, '"') || strstr($username, chr(160)))
	{
		return array('error' => true, 'error_msg' => $lang['Username_invalid']);
	}
#
#-----[ REPLACE WITH ]-----
#

代碼: 選擇全部

	/*// Don't allow " and ALT-255 in username.
	if (strstr($username, '"') || strstr($username, '"') || strstr($username, chr(160)))
	{
		return array('error' => true, 'error_msg' => $lang['Username_invalid']);
	}*/
#
#-----[ SAVE & CLOSE ]-----
#
#EoM
ps.
尚不明白, 如此做, 有無安全上的缺失, 請小心為之.
這個修正好像跟 Custom mass PM 1.4.7 其中一個的步驟有衝突

代碼: 選擇全部

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

# 
#-----[ FIND ]------------------------------------------------ 
# 
// Don't allow 
if (strstr(

# 
#-----[ IN-LINE FIND ]---------------------------------------- 
# 
, chr(160))

# 
#-----[ IN-LINE AFTER, ADD ]---------------------------------- 
# 
 || strstr($username, ';')
剛好是在註解的範圍內,請問該如何解決呢?
這個修正, 不會影響 'Custom mass PM 1.4.7' 的功能.

建議您:
忽略它 (安裝 'Custom mass PM 1.4.7' 時, 省掉這個修改).

發表於 : 2007-03-13 21:40
Fujirou
我最近也遇到這個問題

後來是用mb_strstr()取代strstr()
在mb_strstr()之前要多加一行mb_internal_encoding("UTF-8");

沒辦法註冊的問題就沒有出現了
不過還沒有仔細測試過,不知道會不會產生其他問題

發表於 : 2007-03-15 02:30
hsientsung
Fujirou 寫:我最近也遇到這個問題

後來是用mb_strstr()取代strstr()
在mb_strstr()之前要多加一行mb_internal_encoding("UTF-8");

沒辦法註冊的問題就沒有出現了
不過還沒有仔細測試過,不知道會不會產生其他問題

想請問依照您這樣子的修改方式,您目前還有出現任何問題嗎?
或者之後還有出現任何問題嗎?

發表於 : 2007-03-18 02:23
Fujirou
hsientsung 寫:
Fujirou 寫:我最近也遇到這個問題

後來是用mb_strstr()取代strstr()
在mb_strstr()之前要多加一行mb_internal_encoding("UTF-8");

沒辦法註冊的問題就沒有出現了
不過還沒有仔細測試過,不知道會不會產生其他問題

想請問依照您這樣子的修改方式,您目前還有出現任何問題嗎?
或者之後還有出現任何問題嗎?
改了之後,大約四、五個人註冊,目前還沒有聽到有問題回報。

發表於 : 2007-08-31 01:15
Hans Tsai
分享一下我處理這個問題的結果
基本上是正常的
幾個會碰到問題的字

熊 堡 砂 等等...
經修改後都可正常使用
我處理的方法

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

#
#-----[ FIND ]-----
#

代碼: 選擇全部

// Don't allow " and ALT-255 in username.
#
#-----[ After Add ]-----
#

代碼: 選擇全部

mb_internal_encoding("UTF-8"); 
#
#-----[ FIND ]-----
#

代碼: 選擇全部

if (strstr($username, '"') || strstr($username, '"') || strstr($username, chr(160))) 
#
#-----[ REPLACE WITH ]-----
#

代碼: 選擇全部

if (mb_strstr($username, '"') || mb_strstr($username, '"') || mb_strstr($username, chr(160)))
#
#-----[ SAVE & CLOSE ]-----
#
#EoM
目前已經用了7天
註冊近百人
都沒發生過問題
8-)