当前位置: 首页 > news >正文

密码管理工具实现

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

系统架构设计

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

数据库配置和安装流程

1. 数据库配置

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

微信图片_20241029151130.png

<?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执行删除操作,仅允许删除非管理员用户。

    微信图片_20241029151229.png

密码管理

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

微信图片_20241029151410.png

添加密码

用户通过表单提交密码条目,包括平台名称、地址、账号和密码,数据存储在 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: 这是一个简易的密码管理器,帮助你安全地存储和管理你的各种在线账号的登录信息。 使用此工具,你可以轻松添加、编辑和删除账号信息,确保所有重要的密码都有条不紊地管理。

相关文章:

密码管理工具实现

该文档详细描述了实现一个简单的密码管理工具的过程&#xff0c;工具基于PHP和MySQL构建&#xff0c;支持用户注册、密码存储、管理以及角色权限控制等核心功能。 系统架构设计 技术栈&#xff1a;PHP&#xff08;后端逻辑&#xff09;、MySQL&#xff08;数据存储&#xff09…...

构造函数和new操作符 - 2024最新版前端秋招面试短期突击面试题【100道】

构造函数和new操作符 - 2024最新版前端秋招面试短期突击面试题【100道】 &#x1f3d7;️ 在JavaScript中&#xff0c;构造函数和new操作符是创建对象的重要方式。深入理解它们的基本概念和用法&#xff0c;可以帮助你更有效地使用JavaScript进行开发。以下是关于构造函数和ne…...

6.Linux按键驱动-阻塞与非阻塞

默认打开文件时候是阻塞的 当设置打开方式为非阻塞时&#xff0c;无数据时会返回。 当设置打开方式为阻塞时&#xff0c;无数据的时候会等待1.设置打开方式为非阻塞 立即返回&#xff0c;无法读出&#xff0c;返回-1 2.设置为阻塞 核心在于驱动程序中的.read函数的支持 …...

Mac打开环境变量配置文件,source ~/.zshrc无法打开问题解决

本文将会介绍&#xff0c;Mac如何打开zshrc环境变量配置文件。 在搭建开发环境的时候&#xff0c;通常我们需要配置环境变量&#xff0c;例如&#xff1a;ANDROID_HOME、nvm等。 具体的做法是把配置环境变量的命令加入到 shell 的配置文件中。如果你的 shell 是 zsh&#xff…...

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-23

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-23 目录 文章目录 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-23目录1. Advancements in Visual Language Models for Remote Sensing: Datasets, Capabilities, and Enhancement Techniques摘…...

【C#】搭建环境之CSharp+OpenCV

在我们使用C#编程中&#xff0c;对图片处理时会用到OpenCV库&#xff0c;以及其他视觉厂商提供的封装库&#xff0c;这里因为OpenCV是开源库&#xff0c;所以在VS资源里可以直接安装使用&#xff0c;这里简单说明一下搭建的步骤及实现效果&#xff0c;留存。 1. 项目创建 1.1…...

100种算法【Python版】第25篇——Bidirectional Search算法

本文目录 1 算法原理2 路径计算的算法步骤3 python代码4 算法应用1 算法原理 Bidirectional Search(双向搜索)算法是为了解决图中最短路径问题而提出的一种搜索策略,旨在提高搜索效率。该算法的核心思想是同时从起点和终点进行搜索,直到两个搜索相遇。这种方法有效地减少了…...

WebSocket与Socket

一、定义与用途 Socket Socket&#xff08;套接字&#xff09;是一个抽象层&#xff0c;用于在网络上执行进程间的通信。它为应用程序提供了发送和接收数据的机制&#xff0c;通过IP和端口号来标识网络中唯一的位置。Socket可以使用TCP进行面向连接的可靠通信&#xff0c;也可以…...

Python 3 维护有序列表 bisect

在Python 3中&#xff0c;bisect模块提供了用于维护有序列表的函数&#xff0c;主要用于在有序序列中进行二分查找以及插入操作&#xff0c;以下是其常见用法的介绍&#xff1a; 1. 导入模块 首先需要导入bisect模块&#xff1a; import bisect2. 主要函数及用法 bisect.bi…...

vue版本太低无法执行vue ui命令

连接 ui和create目前都只支持3.0以后得版本才能使用 https://blog.csdn.net/m0_67318913/article/details/136775252?utm_mediumdistribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-0-136775252-blog-121204604.235v43pc_blog_bottom_relevance…...

数据结构 之 二叉树的遍历------先根遍历(五)

提示&#xff1a;本篇章主要讲解数据结构中树的相关知识。 文章目录 二叉树的遍历为什么要提出这么多遍历方法&#xff1f;先根遍历二叉树&#xff08;TLR&#xff09;先根遍历二叉树的递归算法&#xff08;重点&#xff09;先根遍历二叉树的非递归算法(了解&#xff0c;但是得…...

Xss_less靶场攻略(1-18)

xss-lab-less1 ur特殊字符转义 存在url中 转义符为 %2B& 转义符为 %26空格 转义符为 或 %20/ 转义符为 %2F? 转义符为 %3F% 转义符为 %25#转义符为 %23 转义符为 %3Dimg 标签懒加载 在XSS攻击中&#xff0c;img标签的src属性是一个常见的攻击向量&#xff0c;因为它可以…...

【AI语音克隆整合包及教程】声临其境,让想象成为现实——第二代GPT-SoVITS引领语音克隆新时代!

随着人工智能技术的飞速发展&#xff0c;曾经只能在科幻小说中出现的场景逐渐走进了我们的日常生活。其中&#xff0c;语音克隆技术以其独特魅力&#xff0c;成为了人们关注的焦点。GPT-SoVITS作为一款前沿的语音克隆工具&#xff0c;由RVC变声器创始人“花儿不哭”与AI音色转换…...

echarts属性之dataZoom

dataZoom-slider 滑动条型数据区域缩放组件&#xff08;dataZoomInside&#xff09; 滑动条型数据区域缩放组件提供了数据缩略图显示&#xff0c;缩放&#xff0c;刷选&#xff0c;拖拽&#xff0c;点击快速定位等数据筛选的功能。下图显示了该组件可交互部分 所有属性 data…...

SQLite 语法

SQLite 语法 SQLite 是一种轻量级的数据库管理系统&#xff0c;它遵循 SQL&#xff08;结构化查询语言&#xff09;标准。SQLite 的语法相对简单&#xff0c;易于学习和使用。本文将详细介绍 SQLite 的基本语法&#xff0c;包括数据定义语言&#xff08;DDL&#xff09;、数据…...

逗号运算符应用举例

在main.cpp里输入程序如下&#xff1a; #include <iostream> //使能cin(),cout(); #include <iomanip> //使能setbase(),setfill(),setw(),setprecision(),setiosflags()和resetiosflags(); //setbase( char x )是设置输出数字的基数,如输出进制数则用set…...

Android 玩机知识储备

基础知识 安卓刷机&#xff1a;https://post.smzdm.com/p/724098/安装分区&#xff08;视频&#xff09;: https://www.bilibili.com/video/BV1BY4y1H7Mc/安卓分区&#xff08;文章&#xff09;: https://www.cnblogs.com/unixcs/p/16398969.html开机过程&#xff1a;https://…...

MyBatis 学习记录(六)之逆向工程

MyBatis 学习记录&#xff08;六&#xff09; MyBatis的逆向工程1、创建逆向工程添加依赖和插件创建逆向工程的配置文件执行MBG插件的generate目标最终生成的效果 2、QBC查询 MyBatis的逆向工程 **正向工程&#xff1a;**先创建Java实体类&#xff0c;由框架负责根据实体类生成…...

深度了解flink(七) JobManager(1) 组件启动流程分析

前言 JobManager是Flink的核心进程&#xff0c;主要负责Flink集群的启动和初始化&#xff0c;包含多个重要的组件(JboMaster&#xff0c;Dispatcher&#xff0c;WebEndpoint等)&#xff0c;本篇文章会基于源码分析JobManagr的启动流程&#xff0c;对其各个组件进行介绍&#x…...

PostgreSQL 约束

PostgreSQL 约束 介绍 PostgreSQL 是一种功能强大的开源对象关系数据库系统&#xff0c;它提供了多种约束来确保数据的完整性和一致性。约束是数据库规则&#xff0c;用于限制表中数据的类型和操作。在 PostgreSQL 中&#xff0c;约束可以分为几种类型&#xff0c;包括主键约…...

无限级数求和与Java实现优化教程

本教程详细讨论了如何准确计算形状 S -(2x)^2/2&#xff01; (2x)^4/4&#xff01; - (2x)^6/6&#xff01; ... 指定范围内的无限级数 [0.1, 1.5] 内部和。文章首先分析了这个级数和 cos(2x) - 1 数学等价性&#xff0c;然后对Java代码中常见的错误进行了深入分析&#xff…...

Word制表位全攻略:从菜鸟到高手,5分钟搞定专业文档排版

Word制表位全攻略&#xff1a;从菜鸟到高手&#xff0c;5分钟搞定专业文档排版 你是否曾经为了对齐文档中的文字而疯狂敲击空格键&#xff1f;或是花费大量时间调整表格边框却依然无法让数字完美对齐&#xff1f;这些困扰其实只需要掌握一个Word中的隐藏神器——制表位&#x…...

ChatGPT API调用实战:从基础接入到生产环境优化指南

ChatGPT API调用实战&#xff1a;从基础接入到生产环境优化指南 作为一名开发者&#xff0c;在将ChatGPT这类强大的AI能力集成到自己应用中的过程中&#xff0c;我踩过不少坑。从最初的简单请求&#xff0c;到后来面对高并发、长对话、成本控制等生产级挑战&#xff0c;整个过…...

从半加器到四位加法器:在Intel Quartus里玩转模块化设计与层次化视图

从半加器到四位加法器&#xff1a;Intel Quartus中的模块化设计实战 引言 在数字电路设计的浩瀚宇宙中&#xff0c;加法器就像是最基础的原子结构&#xff0c;简单却蕴含着无限可能。作为一名FPGA开发者&#xff0c;我常常思考如何让设计既高效又优雅。记得第一次在Quartus中完…...

解放你的音乐库:NCMconverter音频格式转换全攻略

解放你的音乐库&#xff1a;NCMconverter音频格式转换全攻略 【免费下载链接】NCMconverter NCMconverter将ncm文件转换为mp3或者flac文件 项目地址: https://gitcode.com/gh_mirrors/nc/NCMconverter 当你下载了喜爱的音乐却发现是无法播放的NCM格式时&#xff0c;当你…...

为什么你的BUCK电路不稳定?峰值电流模式Fm增益的5个关键影响因素

为什么你的BUCK电路不稳定&#xff1f;峰值电流模式Fm增益的5个关键影响因素 在电源设计领域&#xff0c;BUCK电路的稳定性问题一直是工程师们头疼的难题。尤其是采用峰值电流模式控制的BUCK转换器&#xff0c;其调制器增益Fm的合理设置直接关系到整个系统的动态响应和稳定性。…...

51单片机按键控制实战:从消抖到状态切换的完整代码解析

51单片机按键控制实战&#xff1a;从消抖到状态切换的完整代码解析 在嵌入式系统开发中&#xff0c;按键控制是最基础也最关键的交互方式之一。无论是简单的家电控制面板&#xff0c;还是复杂的工业设备操作界面&#xff0c;按键作为人机交互的桥梁&#xff0c;其稳定性和响应速…...

内容解锁工具:突破付费墙限制的开源解决方案

内容解锁工具&#xff1a;突破付费墙限制的开源解决方案 【免费下载链接】bypass-paywalls-chrome-clean 项目地址: https://gitcode.com/GitHub_Trending/by/bypass-paywalls-chrome-clean 在信息爆炸的数字时代&#xff0c;优质内容常被付费墙阻隔&#xff0c;形成信…...

单阶段检测的王者:YOLO核心技术解析与多场景应用实战指南

导读&#xff1a;在计算机视觉的浩瀚星空中&#xff0c;YOLO (You Only Look Once) 无疑是最耀眼的那颗星。自2015年横空出世以来&#xff0c;它凭借“单阶段检测”的独特哲学&#xff0c;将速度与精度完美统一&#xff0c;彻底终结了Two-Stage算法在实时领域的统治地位。站在2…...

Stable Diffusion像素艺术工作流:Pixel Fashion Atelier预设Prompt指令集详解

Stable Diffusion像素艺术工作流&#xff1a;Pixel Fashion Atelier预设Prompt指令集详解 1. 像素艺术创作新体验 Pixel Fashion Atelier为设计师和艺术创作者带来了一种全新的像素艺术创作方式。这个基于Stable Diffusion与Anything-v5的工作站&#xff0c;将复古日系RPG的视…...