密码管理工具实现

该文档详细描述了实现一个简单的密码管理工具的过程,工具基于PHP和MySQL构建,支持用户注册、密码存储、管理以及角色权限控制等核心功能。

系统架构设计

  1. 技术栈:PHP(后端逻辑)、MySQL(数据存储)、Bootstrap(前端样式)
  2. 数据存储 :用户表(users)和密码表(passwords)存储用户的基本信息和其管理的密码信息,包含外键关联实现级联删除。
  3. 权限控制 :通过session会话管理用户角色,确保不同角色的访问权限。

数据库配置和安装流程

1. 数据库配置

为了便于初次安装用户配置数据库信息,工具提供了安装页面(install.php)来接收并初始化数据库参数和管理员账户。

<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $db_host = $_POST['db_host'];
    $db_user = $_POST['db_user'];
    $db_pass = $_POST['db_pass'];
    $db_name = $_POST['db_name'];

    // 连接数据库并创建数据库
    $conn = new mysqli($db_host, $db_user, $db_pass);
    if ($conn->connect_error) {
        die("连接失败: " . $conn->connect_error);
    }
    $conn->query("CREATE DATABASE IF NOT EXISTS $db_name");
    $conn->select_db($db_name);

    // 创建用户和密码表
    $sql_users = "CREATE TABLE IF NOT EXISTS users (
        id INT AUTO_INCREMENT PRIMARY KEY,
        username VARCHAR(50) NOT NULL,
        password VARCHAR(255) NOT NULL,
        role ENUM('admin', 'user') DEFAULT 'user'
    )";

    $sql_passwords = "CREATE TABLE IF NOT EXISTS passwords (
        id INT AUTO_INCREMENT PRIMARY KEY,
        user_id INT,
        platform_name VARCHAR(100),
        platform_address VARCHAR(255),
        account VARCHAR(100),
        password VARCHAR(255),
        FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
    )";
    
    $conn->query($sql_users);
    $conn->query($sql_passwords);
    
    // 创建管理员账户
    $admin_username = $_POST['admin_username'];
    $admin_password = password_hash($_POST['admin_password'], PASSWORD_BCRYPT);
    $conn->query("INSERT INTO users (username, password, role) VALUES ('$admin_username', '$admin_password', 'admin')");
    
    // 将数据库配置写入文件
    $config_content = "<?php\n"
        . "\$db_host = '$db_host';\n"
        . "\$db_user = '$db_user';\n"
        . "\$db_pass = '$db_pass';\n"
        . "\$db_name = '$db_name';\n"
        . "\$conn = new mysqli(\$db_host, \$db_user, \$db_pass, \$db_name);\n"
        . "if (\$conn->connect_error) {\n"
        . "    die(\"连接失败: \" . \$conn->connect_error);\n"
        . "}\n";
    
    file_put_contents('config.php', $config_content);
    
    echo "<div class='alert alert-success'>安装成功!</div>";
}
?>

install.php 文件中,定义了数据库连接及初始化代码,接受表单输入并写入配置文件 config.php,用于后续的数据库访问。

用户身份验证与会话管理

用户登录和权限管理通过session实现。登录页面login.php验证用户身份并开启会话,将用户ID和角色写入会话变量,以便后续操作中使用。

用户登录 (login.php)

<?php
session_start();
include 'db.php';

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $username = $_POST['username'];
    $password = $_POST['password'];

    $result = $conn->query("SELECT * FROM users WHERE username='$username'");
    if ($result->num_rows > 0) {
        $user = $result->fetch_assoc();
        if (password_verify($password, $user['password'])) {
            $_SESSION['user_id'] = $user['id'];
            $_SESSION['role'] = $user['role'];
            header('Location: dashboard.php');
            exit;
        }
    }
    echo "<div class='alert alert-danger'>用户名或密码错误!</div>";
}
?>

登录验证流程:

  1. 获取用户输入的用户名和密码。
  2. 使用SELECT语句查询用户信息,并验证密码(password_verify)。
  3. 验证成功后,写入会话($_SESSION['user_id']$_SESSION['role'])并跳转至主页面。

管理员页面和用户管理

管理员页面(admin.php)提供用户的增删改功能,管理员角色控制通过会话变量实现。此页面仅限role='admin'的用户访问。

用户管理 (admin.php)

<?php
session_start();
include 'db.php';

if (!isset($_SESSION['user_id']) || $_SESSION['role'] !== 'admin') {
    header('Location: login.php');
    exit;
}

// 添加用户
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['action']) && $_POST['action'] == 'add') {
    $username = $_POST['username'];
    $password = password_hash($_POST['password'], PASSWORD_BCRYPT);
    $role = $_POST['role'];
    $conn->query("INSERT INTO users (username, password, role) VALUES ('$username', '$password', '$role')");
}

// 删除用户
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['action']) && $_POST['action'] == 'delete') {
    $userId = intval($_POST['user_id']);
    $result = $conn->query("SELECT role FROM users WHERE id=$userId");
    $user = $result->fetch_assoc();
    if ($user && $user['role'] !== 'admin') {
        $conn->query("DELETE FROM users WHERE id=$userId");
    }
}
?>

管理员页面支持:

  1. 添加用户:从表单获取用户名、密码、角色信息,进行哈希加密存储。

  2. 删除用户 :基于用户ID执行删除操作,仅允许删除非管理员用户。

密码管理

主页面(dashboard.php)实现用户的密码管理功能,包括密码的添加、删除、修改和搜索等操作。每个密码条目包含平台名称、平台地址、账号和密码。

添加密码

用户通过表单提交密码条目,包括平台名称、地址、账号和密码,数据存储在 passwords 表中。

if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['add_password'])) {
    $platform_name = $_POST['platform_name'];
    $platform_address = $_POST['platform_address'];
    $account = $_POST['account'];
    $password = $_POST['password'];
    $conn->query("INSERT INTO passwords (user_id, platform_name, platform_address, account, password) VALUES ('$user_id', '$platform_name', '$platform_address', '$account', '$password')");
}

删除密码

if (isset($_GET['delete_id'])) {
    $delete_id = $_GET['delete_id'];
    $conn->query("DELETE FROM passwords WHERE id='$delete_id' AND user_id='$user_id'");
    header("Location: dashboard.php");
    exit;
}

编辑密码

if (isset($_POST['edit_password'])) {
    $id = $_POST['id'];
    $platform_name = $_POST['platform_name'];
    $platform_address = $_POST['platform_address'];
    $account = $_POST['account'];
    $password = $_POST['password'];
    $conn->query("UPDATE passwords SET platform_name='$platform_name', platform_address='$platform_address', account='$account', password='$password' WHERE id='$id' AND user_id='$user_id'");
    header("Location: dashboard.php");
    exit;
}

通过模态框提供编辑密码功能,用户可以修改已有条目数据并提交更改。

安全性措施

  1. 密码加密 :使用password_hashpassword_verify函数确保用户密码安全存储和验证。
  2. SQL注入防范:用户输入通过适当的数据类型转换,避免直接拼接字符串进行查询,提升安全性。
  3. 权限控制:基于会话的角色验证,确保管理员操作权限,阻止普通用户访问管理页面。

结论

通过上述模块的构建,实现了一个功能完备的密码管理工具。系统设计中充分考虑了数据安全和用户权限控制,满足基础的密码管理需求。

项目地址:GitHub - C4rpeDime/Passwordstorage: 这是一个简易的密码管理器,帮助你安全地存储和管理你的各种在线账号的登录信息。 使用此工具,你可以轻松添加、编辑和删除账号信息,确保所有重要的密码都有条不紊地管理。

相关推荐
luck_00736 分钟前
PhpSpreadsheet 导出excel 找不到setCellValueByColumnAndRow
php
生椰拿铁You1 小时前
解决Apache/2.4.39 (Win64) PHP/7.2.18 Server at localhost Port 80问题
php
索然无味io6 小时前
跨站请求伪造之基本介绍
前端·笔记·学习·web安全·网络安全·php
伟大无须多言7 小时前
企业资源规划系统(ERP)服务器上线项目实施指南
开发语言·php
网络安全(king)7 小时前
网络安全设备
网络·web安全·php
蜗牛hb11 小时前
VMware Workstation虚拟机网络模式
开发语言·学习·php
手可摘星河12 小时前
php中 cli和cgi的区别
开发语言·php
EasyDSS13 小时前
国标GB28181-2022平台EasyGBS:安防监控中P2P的穿透方法
网络协议·php·音视频·p2p
liuyunshengsir14 小时前
Squid代理服务器的安装使用
开发语言·php
007php0071 天前
Go语言zero项目部署后启动失败问题分析与解决
java·服务器·网络·python·golang·php·ai编程