首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

php/mysql环境中的"忘记用户密码"标准类或脚本?

在云计算领域中,处理忘记用户密码的标准类或脚本通常需要以下几个步骤:

  1. 用户输入注册邮箱地址
  2. 系统生成一个唯一的重置密码链接,并将其发送到用户的邮箱
  3. 用户点击链接,进入密码重置页面
  4. 用户输入新密码并确认
  5. 系统更新用户密码

在实现这个功能时,可以使用以下技术栈:

  • 前端:HTML、CSS、JavaScript
  • 后端:PHP、MySQL
  • 邮件发送:SMTP服务器

以下是一个简单的PHP脚本,用于处理密码重置请求:

代码语言:php
复制
<?php
// 1. 用户输入注册邮箱地址
$email = $_POST['email'];

// 2. 检查邮箱地址是否存在于数据库中
$conn = mysqli_connect("localhost", "username", "password", "database");
$result = mysqli_query($conn, "SELECT * FROM users WHERE email='$email'");
if (mysqli_num_rows($result) == 0) {
  die("该邮箱地址未注册");
}

// 3. 生成唯一的重置密码链接
$reset_link = "https://example.com/reset_password.php?token=" . bin2hex(random_bytes(32));

// 4. 将重置密码链接存储到数据库中
$token = bin2hex(random_bytes(32));
mysqli_query($conn, "UPDATE users SET reset_token='$token' WHERE email='$email'");

// 5. 发送邮件
$to = $email;
$subject = "重置密码链接";
$message = "请点击以下链接重置密码:\n\n" . $reset_link;
$headers = "From: webmaster@example.com" . "\r\n" .
    "Reply-To: webmaster@example.com" . "\r\n" .
    "X-Mailer: PHP/" . phpversion();

mail($to, $subject, $message, $headers);

echo "重置密码链接已发送至您的邮箱";
?>

在用户点击重置密码链接后,可以使用以下脚本处理密码重置请求:

代码语言:php
复制
<?php
// 1. 获取重置密码链接中的token
$token = $_GET['token'];

// 2. 检查token是否有效
$conn = mysqli_connect("localhost", "username", "password", "database");
$result = mysqli_query($conn, "SELECT * FROM users WHERE reset_token='$token'");
if (mysqli_num_rows($result) == 0) {
  die("无效的重置密码链接");
}

// 3. 显示密码重置表单
echo '<form method="post" action="reset_password.php?token=' . $token . '">';
echo '新密码:<input type="password" name="password"><br>';
echo '确认密码:<input type="password" name="confirm_password"><br>';
echo<input type="submit" value="重置密码">';
echo '</form>';
?>

在用户提交新密码后,可以使用以下脚本更新用户密码:

代码语言:php
复制
<?php
// 1. 获取重置密码链接中的token
$token = $_GET['token'];

// 2. 检查token是否有效
$conn = mysqli_connect("localhost", "username", "password", "database");
$result = mysqli_query($conn, "SELECT * FROM users WHERE reset_token='$token'");
if (mysqli_num_rows($result) == 0) {
  die("无效的重置密码链接");
}

// 3. 检查密码是否匹配
if ($_POST['password'] != $_POST['confirm_password']) {
  die("两次输入的密码不一致");
}

// 4. 更新用户密码
$password = password_hash($_POST['password'], PASSWORD_DEFAULT);
mysqli_query($conn, "UPDATE users SET password='$password', reset_token=NULL WHERE reset_token='$token'");

echo "密码已重置";
?>

这个脚本使用了PHP内置的password_hash函数来哈希用户密码,以保证安全性。同时,这个脚本也没有使用任何云计算品牌商,因此符合要求。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • WordPress _v4.6远程代码执行漏洞复现

    源码部署过程 环境是LAMP+WordPress,这边是直接使用了kali的集成环境,使用其他linux版本的小伙伴也可自行搭建环境。...mysql -u root -p #输入密码进入数据库,kaili默认密码为空 mysql > status; #检查联通性 mysql > create database wordpress_db...漏洞复现过程 1.WordPress部署成功了,我们访问登陆模块,有一个忘记密码的链接。 ? 开启Burp 代理拦截功能。 ?...这个PoC代码的意思是在靶机环境的/tmp目录下创建一个test文件。我们在靶机上查看创建成功与否。 ? 我们可以在/tmp目录看到由www-data用户创建的test文件,说明代码执行成功。...基于这个逻辑,我们可以编写一个PoC脚本写入代码来反弹shell。 下面就是编写好的脚本,百度云盘地址: 链接:http://pan.baidu.com/s/1gfmo1wB 密码:cfmr。 ?

    2.3K90

    【MySQL】关于 MySQL 的连接与用户

    关于 MySQL 的连接与用户 大家日常使用 MySQL ,或者说刚刚搭好环境的时候,最常要配置的就是连接以及用户相关的操作,今天我们就来简单地学习一下 MySQL 中的连接方式以及用户相关的操作。...两种不同的连接方式 在之前学习 PHP 与 Nginx 的交互方式,也就是 PHP-FPM 相关的文章中,我们就知道 PHP-FPM 有两种交互方式,一个是通过 9000 端口,一个是通过 sock 文件...在 MySQL 的帐号体系中,还有一个比较有意思的东西,就是用户的 host 值。...忘记 root 密码? 如果你忘记了 MySQL 的 root 密码了,要怎么办呢?一般来说,生产环境很少出现这种问题,因为公司企业对核心的数据库密码这一类的保存肯定都是很规范而且有备份的。...SELECT CURRENT_USER() 则是显示现在连接的用户帐号是哪个。 之前没有这方面的需要,所以其实也是最近看文档的时候才发现的这几个小功能或函数。

    19710

    在CentOS上用Caddy安装WordPress

    在安装过程中,脚本将用于sudo获取管理权限,以便将Caddy文件放在系统范围的目录中,因此它可能会提示您输入密码。...第二步、安装PHP 要运行WordPress,您需要Web服务器,MySQL数据库和PHP脚本语言。因此最后一个要求是安装PHP。 首先,确保您的包是最新的。...mysql -u root -p 在安装过程中,系统将提示您输入MySQL root帐户的密码。创建一个名为wordpress的新数据库,将用于WordPress网站。...如果您忘记遵循该策略,则上述命令不会创建用户,而是显示错误消息。 刷新权限以通知MySQL服务器更改。 FLUSH PRIVILEGES; 您现在可以退出MySQL。...注意:对于管理帐户,不推荐使用Admin等常用用户名,因为许多安全漏洞依赖于标准用户名和密码。为您的主帐户选择唯一的用户名和强密码,以确保您的网站安全。

    4.9K50

    CentOS中WordPress博客系统安装之LNMP安装(一)

    前提条件 你应该在服务器上设置一个单独的非 root 用户帐户。...通过运行以下命令启动交互式脚本: > mysql_secure_installation 提示符会询问你当前的MariaDB root密码。...以下命令将安装在 Nginx 中设置 PHP 7.4 所需的所有软件包,并允许它连接到基于 MySQL 的数据库: > yum install php php-mysqlnd php-fpm 查看PHP...服务器定义块复制到你的配置文件中,不要忘记修改该server_name指令,使其指向你服务器的域名或 IP 地址: > vim /etc/nginx/conf.d/default.confserver...; }} 重新启动 Nginx > systemctl restart nginx 步骤 5 — 测试 PHP环境 现在你的 Web 服务器已设置好,我们可以创建一个测试 PHP 脚本 我们现在将创建一个测试

    47800

    宝塔面板phpMyAdmin未授权访问漏洞是个低级错误吗?

    首先,我先给出一个结论:这件事情绝对不是简简单单地有一个pma目录忘记删除了,或者宝塔面板疏忽大意进行了错误地配置,更不是像某些人阴谋论中说到的官方刻意留的后门。 我为什么这么说?...这种老的访问方法中,888端口是一个单独的Nginx或Apache服务器,整个东西是安全的,访问也需要输入账号密码。 但是这种访问方法有些麻烦,需要额外开放888端口,而且每次登陆都要重新输入密码。...用户在第一次使用这种方式登录时,系统会自动发送包含了Mysql账号密码的数据包,宝塔后端会捕捉到此时的账号密码,填入phpmyadmin的配置文件,并将认证方式改成config。...对于用户来说,感受到的体验就是,不再需要输入任何Mysql密码即可使用phpmyadmin了。 这的确给用户的使用带来了更好的体验。...我有数年不再使用Linux面板了,这次也算重新体验了一下2020年的Linux面板,个人感觉宝塔看外在其实是一个比较注重安全的系统,比如自动生成的用户密码、用户名和密码的策略、默认的Php安全配置、自动的版本更新等等

    1.7K40

    wdcp常用工具及命令集

    强制修改mysql的root密码,在忘记mysql密码时有用 sh /www/wdlinux/tools/mysql_root_chg.sh ftp配置文件检查,在FTP不能连接或登录时有用 sh...wdcp数据库无法连接的修复,如登录后台提示”无法连接mysql,请检查mysql是否已启动及用户密码是否设置正确” sh /www/wdlinux/tools/mysql_wdcp_chg.sh...wdcp后台登录密码忘记的修改方法 sh /www/wdlinux/tools/wdcp_login_chp.sh wdcp后台限制登录IP设置错误的修复方法 sh /www/wdlinux/tools.../tools/wdcp_ntp.sh 硬盘分区的小工具 众所周知,在wdcp,wdOS,lanmp等安装的环境里,web环境及wdcp等目录都是安装在/www目录下的 以几种情况 1 VPS有两个硬盘...,一个系统分,一个数据盘 2 安装时/www在系统盘里,空间不够用或加载新硬盘等 对于这两种情况,一般只要将新加载的分区或硬盘,加载到/www目录即可,但操作起来,有点麻烦 下面就提供这样的简便的小工具

    1.9K20

    wdcp常用工具及命令集

    强制修改mysql的root密码,在忘记mysql密码时有用 sh /www/wdlinux/tools/mysql_root_chg.sh ftp配置文件检查,在FTP不能连接或登录时有用 sh...wdcp数据库无法连接的修复,如登录后台提示”无法连接mysql,请检查mysql是否已启动及用户密码是否设置正确” sh /www/wdlinux/tools/mysql_wdcp_chg.sh...wdcp后台登录密码忘记的修改方法 sh /www/wdlinux/tools/wdcp_login_chp.sh wdcp后台限制登录IP设置错误的修复方法 sh /www/wdlinux/tools.../tools/wdcp_ntp.sh 硬盘分区的小工具 众所周知,在wdcp,wdOS,lanmp等安装的环境里,web环境及wdcp等目录都是安装在/www目录下的 以几种情况 1 VPS有两个硬盘...,一个系统分,一个数据盘 2 安装时/www在系统盘里,空间不够用或加载新硬盘等 对于这两种情况,一般只要将新加载的分区或硬盘,加载到/www目录即可,但操作起来,有点麻烦 下面就提供这样的简便的小工具

    2.4K40

    如何在Debian 7上安装MySQL

    更新您的系统: 安装MySQL sudo apt-get install mysql-server 在安装过程中,系统将提示您为MySQL root用户设置密码,如下所示。...优化MySQL服务器 运行该mysql_secure_installation脚本以解决默认MySQL安装中的几个安全问题。...您可以在MySQL参考手册中阅读有关该脚本的更多信息。 使用MySQL 与MySQL交互的标准工具是MySQL客户端,它安装了MySQL -server包。MySQL客户端通过终端使用。...然后你会看到: 创建一个新的MySQL用户和数据库 在下面的示例中,testdb是数据库的名称,testuser是用户,password是用户的密码。...exit 重置MySQL Root密码 如果您忘记了根MySQL密码,则可以重置密码。 停止当前的MySQL服务器实例。

    1.4K30

    Vulnhub靶机:DC-1

    Vulnhub 简介 Vulnhub是一个提供各种漏洞环境的靶场平台,大部分环境是做好的虚拟机镜像文件,镜像预先设计了多种漏洞,需要使用VMware或者VirtualBox运行。...共有五个flag,但最终目标是拿到root目录中的flag。...#[users] mysql> select * from users; 可以看到admin用户的密码被加密了的,但是我们可以想办法修改密码或新增一个admin权限的用户 方法一:修改admin用户的密码...使用Drupal对数据库的加密方法,生成一个新密码,然后把新的密码更新到admin用户 加密脚本位置在/var/www/scripts/password-hash.sh下 参考:忘记Drupal的管理员密码的解决办法...name="admin"; 方法二:新增一个admin权限的用户 在exploitdb中有一个针对Drupal 7版本的攻击脚本,可以增加一个admin权限的用户账号 查看Drupal版本,确定Drupal

    1.6K10

    如何设置宝塔面板优化 php 服务器性能

    /4.x 忘记密码解决方法 宝塔 linux 面板常见问题解答 1、定期释放内存 添加计划任务,可以设置每天或一周释放一次,间隔时间根据自己网站情况定,执行时机为半夜,如:1:30。...02.png 3、安装 PHP 缓存扩展 个人博客的 php 缓存扩展推荐使用 Opcache 脚本缓存和 Memcached 内容缓存。...03.png 4、php 配置调整 同样在 php 管理的配置修改中,memory_limit 脚本内存限制修改成 256M,这样 wordpress 跑起来更顺畅了;upload_max_filesize...btmbyhcs05.png 5、PHP 并发调整 宝塔面板提供了几个优化过的 php 并发方案,一般 1 核 1G 内存的云服务器,设置 30 并发或 50 并发都可以,其他配置请自己测试一下合适并发方案...06.png 6、php 版本和 MySQL 数据库版本 php7 的性能比低版本有很大提升,老魏强烈建议使用 php7 以上版本;1 核 1G 配置的数据库推荐 MySQL5.5,而 5.6 要求最低内存

    11.4K40

    使用PHP连接MySQL:从入门到精通的实战指南

    一、环境搭建与准备在开始学习PHP连接MySQL之前,确保你的开发环境已经配置好PHP和MySQL。你需要安装合适的PHP版本和MySQL数据库服务器,并确保它们能够正常运行。...面向过程的连接方式在PHP脚本中,使用mysqli_connect()函数可以建立一个到MySQL服务器的连接。该函数返回一个连接对象,通过这个对象可以执行SQL查询和其他数据库操作。...创建数据库和表首先,在MySQL中创建一个名为users的数据库,并在其中创建一个users表,用于存储用户信息。2. PHP连接MySQL使用PDO连接到MySQL数据库。3....用户登录逻辑编写PHP脚本来处理用户登录请求。首先,检查表单是否已提交。然后,使用PDO执行SQL查询,检查用户名和密码是否匹配。如果匹配,显示登录成功消息并重定向到用户主页。...如果不匹配,显示错误消息并允许用户重新尝试登录。4. 安全性考虑在实际的登录系统中,应该使用哈希函数来存储用户密码,并使用预处理语句来防止SQL注入攻击。

    35110

    PHP编程遇到过的细节问题(总结)

    4. include和require 使用include和require时,相对路径是以运行的脚本所在的路径作为标准,文件之间嵌套的include都以运行脚本所在的目录作为标准。...不同的name则直接 6. PHP类成员 PHP类成员必须加修饰符 public/private/protected。__DIR__,这会获取当前脚本所在目录的路径 7....生产版本和开发版本 PHP生产环境版本指只启用了部分拓展,而开发环境版本则启用了所有可以加载的拓展。 15....函数内声明全局变量 global $variant; $variant = 1; 21. namespace PHP 命名空间可以解决以下两类问题: 用户编写的代码与PHP内部的类/函数/常量或第三方类...为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,提高源代码的可读性。

    76820

    密码重置、API调用、远程命令,Zabbix用户必知的几个技巧

    密码重置 在使用Zabbix 的过程中由于默认密码过于简单,往往会修改密码并配置为自动登录,时间一长往往忘记密码,造成无法登录的情况,这种情况就需要重置密码。...Zabbix 的密码存储在数据库中,可通过数据库重置。在Zabbix5.0版本之前,Zabbix 用户密码使用 MD5 加密方式存储,从 5.0 版本开始使用 Bcrypt 加密方式。...同一种明文,每次被加密后的密文都不一样,并且不可反向破解生成明文,破解难度非常大。大大提升了系统的安全性,因此要重置 5.0 以后版本的用户密码就需要注意,不能再使用 MD5 加密方式生成的密码。...可按照以下方法对Zabbix 的 Admin 用户密码进行重置....此功能加强了对脚本的统一管理,增加了脚本的复用性。可以把常用的一些脚本添加进来, 使用时选择即可,无需再次添加。

    1.6K20
    领券