You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

账户验证逻辑异常:错误Token仍触发成功提示的原因排查

问题原因及修复方案

错误根源

你的判断逻辑存在问题:mysqli_query()函数只要SQL语句语法合法就会返回true,哪怕这条UPDATE语句没有匹配到任何用户(也就是token错误的场景)。所以即便token无效,$query依然为true,直接进入了成功分支,根本不会执行else里的逻辑。

修复步骤

  1. 替换判断依据:不要直接判断$query的真假,改用mysqli_affected_rows($conn)检查实际被更新的行数。这个函数会返回SQL语句影响的行数,token正确时返回≥1的数值,错误时返回0。
  2. 修复SQL注入漏洞:原代码直接把用户传入的$token拼接进SQL语句,存在严重的注入风险,必须改用预处理语句处理。

修复后的完整代码

session_start();

include 'partials/_dbconnect.php';
if(isset($_GET['token'])){
    $token = $_GET['token'];
  
    // 使用预处理语句防范SQL注入
    $updatequery = "UPDATE `users` SET `status` = 'active' WHERE `users`.`token` = ?";
    $stmt = mysqli_prepare($conn, $updatequery);
    mysqli_stmt_bind_param($stmt, "s", $token);
    mysqli_stmt_execute($stmt);
    
    // 通过受影响行数判断验证是否成功
    if(mysqli_affected_rows($conn) > 0){
        echo '<script>alert("Your account is verified successfully. Please login now. !")</script>'; 
        echo '<script> window.location.href = "/login.php"</script>';
    } else {
        echo '<script>alert("This link is not valid. Account verification failed !")</script>'; 
        echo '<script> window.location.href = "/index.php"</script>';
    }
    mysqli_stmt_close($stmt);
} 
?>

内容的提问来源于stack exchange,提问作者pushpraj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 08:40:29