香蕉成人伊视频在线观看|学生小视频国产区|yy女主播啪啪啪视频|麻豆传播媒体APP大全免费版官网|瑜伽牲交AV|国产欧美日韩在线天堂区|白浆精品国产91
Discuz! 官方交流社區
標題:
discuz由3.4升級到3.5 注冊總是提示用戶名包含敏感字符
[打印本頁]
作者:
eyuyi
時間:
2025-10-2 22:01
標題:
discuz由3.4升級到3.5 注冊總是提示用戶名包含敏感字符
如題,將論壇從3.4升級到3.5utf8版本后,現在注冊填入任何用戶名都提示 用戶名包含敏感字符。uc通信正常
作者:
天外飄仙
時間:
2025-10-3 07:17
這個 只能具體檢查一下看看了;
能接受有償處理的話 可以加我 QQ
作者:
鴻茂傳媒
時間:
2025-10-3 12:19
如果這個情況,只能根據提示用戶名包含敏感字符的單獨的修改了。
作者:
eyuyi
時間:
2025-10-5 16:46
經過對頁面分析,應該是uc_client和uc_server下model的user模塊中關于用戶名判定check_username的代碼有點兼容問題。
源代碼如下:
function check_username($username) {
$charset = strtolower(UC_CHARSET);
if ($charset === 'utf-8') {
$guestexp = '\xE3\x80\x80|\xE6\xB8\xB8\xE5\xAE\xA2|\xE9\x81\x8A\xE5\xAE\xA2';
} elseif ($charset === 'gbk') {
$guestexp = '\xA1\xA1|\xD3\xCE\xBF\xCD';
} elseif ($charset === 'big5') {
$guestexp = '\xA1\x40|\xB9\x43\xAB\xC8';
} else {
return FALSE;
}
$guestexp .= '|^Guest';
$len = $this->dstrlen($username);
if($len > 15 || $len < 3 || preg_match("/\s+|^c:\\con\\con|[%,\*"\s\<\>\&\(\)']|$guestexp/is", $username)) {
return FALSE;
} else {
return TRUE;
}
}
復制代碼
應該是對游客(簡寫繁寫)、guest、以及特殊字符進行判斷,看是否有敏感的。既然代碼兼容問題,考慮utf8一個漢字占3個字符,給做了修改
function check_username($username) {
// 1. 長度檢查
$len = $this->dstrlen($username);
if($len > 21 || $len < 3) {
return FALSE; // 長度不符合要求
}
// 2. 游客關鍵詞檢查(直接字符串匹配,更可靠)
$charset = strtolower(UC_CHARSET);
$isGuest = false;
// 檢查簡繁體"游客"
if (strpos($username, '游客') !== false || strpos($username, '遊客') !== false) {
$isGuest = true;
}
// 檢查全角空格(不同編碼)
if ($charset === 'utf-8' && strpos($username, ' ') !== false) { // UTF-8全角空格
$isGuest = true;
} elseif ($charset === 'gbk' && strpos($username, chr(0xA1).chr(0xA1)) !== false) { // GBK全角空格
$isGuest = true;
} elseif ($charset === 'big5' && strpos($username, chr(0xA1).chr(0x40)) !== false) { // Big5全角空格
$isGuest = true;
}
// 檢查Guest開頭(不區分大小寫)
if (stripos($username, 'Guest') === 0) {
$isGuest = true;
}
if ($isGuest) {
return FALSE; // 包含游客相關內容
}
// 3. 特殊字符檢查
$specialChars = ['%', ',', '*', '"', '<', '>', '&', '(', ')', "'", ' ', "\t", "\r", "\n"];
foreach ($specialChars as $char) {
if (strpos($username, $char) !== false) {
return FALSE; // 包含特殊字符
}
}
// 4. 檢查系統特殊名稱
if (strtolower($username) === 'c:\\\\con\\\\con') {
return FALSE;
}
// 所有檢查通過
return TRUE;
}
復制代碼
測試通過。
當然,因為對長度進行了擴充,所以數據庫中member相應的兩個表中,要對username的字段長度將15變成21
歡迎光臨 Discuz! 官方交流社區 (http://m.yu-jie.cn/)
Powered by Discuz! X5.0