將以下程式碼存為 reset_pass.php 放入 ECShop 根目錄,瀏覽器訪問即可執行。
<?php
define('IN_ECS', true);
require(dirname(__FILE__) . '/includes/init.php');
$admin_user = 'xiaoyao'; // 目標管理員帳號
$new_pass = 'x111111'; // 新密碼
// 取得該帳號的 ec_salt
$sql = "SELECT `ec_salt` FROM " . $ecs->table('admin_user') . " WHERE user_name = '$admin_user'";
$ec_salt = $db->getOne($sql);
// ECShop 密碼加密邏輯:md5(md5(密碼) . ec_salt)
$new_hash = md5(md5($new_pass) . $ec_salt);
$sql = "UPDATE " . $ecs->table('admin_user') . " SET password = '$new_hash' WHERE user_name = '$admin_user'";
mysql_query($sql);
echo "密碼修改成功!新密碼是: $new_pass";
?>
存為 admin_tool.php,支援 GET 參數操作:
?act=add&u=帳號&p=密碼 新增超級管理員?act=drop&u=帳號 刪除管理員<?php
define('IN_ECS', true);
require(dirname(__FILE__) . '/includes/init.php');
$admin_name = trim($_REQUEST['u'] ?? '');
if (empty($_REQUEST['act'])) {
// 預設顯示提示
exit('Usage: ?act=add&u=xxx&p=yyy OR ?act=drop&u=xxx');
}
if ($_REQUEST['act'] === 'add') {
$admin_pass = trim($_REQUEST['p'] ?? '');
if (empty($admin_name) || empty($admin_pass)) exit('帳號密碼不可為空');
$hash = md5($admin_pass); // 注意:此處未加鹽,僅適用舊版或特定情境
$sql = "INSERT INTO " . $ecs->table('admin_user') .
" (user_id, user_name, email, password, action_list) " .
"VALUES (NULL, '$admin_name', 'admin@admin.com', '$hash', 'all')";
$db->query($sql);
exit("管理員已新增,用戶名: $admin_name, 密碼: $admin_pass");
}
if ($_REQUEST['act'] === 'drop') {
if (empty($admin_name)) exit('請指定要刪除的帳號');
$sql = "DELETE FROM " . $ecs->table('admin_user') . " WHERE user_name = '$admin_name'";
$db->query($sql);
exit("管理員 $admin_name 已刪除");
}
?>
if ($_SERVER['REMOTE_ADDR'] !== '你的IP') exit;)。ECShop 密碼儲存格式:password = md5(md5(明文密碼) . ec_salt)。ec_salt 為每位管理員隨機生成的鹽值,儲存在 admin_user 表。重置時必須讀取該鹽值重新計算雜湊,否則舊鹽值與新密碼不匹配導致無法登入。