0 0 0


社区基本框架源码-带后台/用户注册源码(2)

极光云资源社区
26天前 56 举报

 

该代码具有以下特点

1.输入验证:确保用户名和密码不为空,并且长度符合最小要求。

2.防止SQL注入:使用预处理语句和参数绑定。

3.防止CSRF攻击:通过生成一个随机的CSRF令牌,并在表单提交时进行验证。


注意:

确保您已经在数据库中创建了users表,并且服务器配置正确以运行PHP脚本。在生产环境中,您还应该实施额外的安全措施,例如使用HTTPS来保护用户数据、限制登录尝试次数以防止暴力破解攻击,以及使用更复杂的用户输入验证和清理策略


正文:

用户注册表单(register.php)

<?php
session_start();
// 数据库连接代码省略

// 防止CSRF攻击
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));

// 处理注册表单提交
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    if (!isset($_POST['csrf_token']) ||$_POST['csrf_token'] !== $_SESSION['csrf_token']) {
        die('CSRF token validation failed');
    }

    $username = trim($_POST['username']);
    $password =$_POST['password'];

    // 简单的输入验证
    if (empty($username) || empty($password)) {
        $error = "用户名和密码不能为空!";
    } elseif (strlen($username) < 3) {
        $error = "用户名至少需要3个字符。";
    } elseif (strlen($password) < 6) {
        $error = "密码至少需要6个字符。";
    } else {
        // 密码加密
        $hashed_password = password_hash($password, PASSWORD_DEFAULT);

        // 防止SQL注入
        $stmt =$conn->prepare("INSERT INTO users (username, password) VALUES (?, ?)");
        $stmt->bind_param("ss",$username, $hashed_password);

        if ($stmt->execute()) {
            // 注册成功,重定向到登录页面
            header("Location: login.php");
            exit;
        } else {
            $error = "注册失败,请稍后再试。";
        }
        $stmt->close();
    }
}

?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>注册</title>
</head>
<body>
    <h1>注册</h1>
    <?php if (!empty($error)): ?>
        <p style="color: red;"><?php echo $error; ?></p>
    <?php endif; ?>
    <form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post">
        <input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token']; ?>">
        <label for="username">用户名:</label>
        <input type="text" name="username" id="username" required>
        <label for="password">密码:</label>
        <input type="password" name="password" id="password" required>
        <input type="submit" value="注册">
    </form>
    <p>已有账号?<a href="login.php">登录</a></p>
</body>
</html>
最新回复 (0)

    暂无评论

请先登录后发表评论!

返回
请先登录后发表评论!