php实现动态口令认证的示例代码
谷歌身份验证器Google Authenticator是谷歌推出的一款动态口令工具,解决大家各平台账户遭到恶意攻击的问题,一般在相关的服务平台登陆中除了用正常用户名和密码外,需要再输入一次谷歌认证器生成的动态口令才能验证成功,相当于输入二次密码,以达到账户的高安全性。
例如交易所、金融平台、以及一些钱包等项目等等,都会使用谷歌身份验证器Google Authenticator来做二次认证,开启谷歌身份验证之后,登录账户,除了输入用户名和密码,还需要输入谷歌验证器上的动态密码。谷歌验证器上的动态密码,也称为一次性密码,密码按照时间或使用次数不断动态变化(默认 30 秒变更一次)
代码参考:https://github.com/PHPGangsta/GoogleAuthenticator
关键代码:
createSecret();
// 自定义安全密钥
$secret = "62H6TMAXQTZBVTRB";
// 手机端扫描二维码获取动态口令
$qrCodeUrl = $ga->getQRCodeGoogleUrl('username', $secret);
echo "二维码地址: ".$qrCodeUrl."nn";
// 输出动态口令
$oneCode = $ga->getCode($secret);
echo "本次登录的动态口令:'$oneCode'n";
// 动态口令认证
$checkResult = $ga->verifyCode($secret, $password,2); // 2 = 2*30sec clock tolerance
if ($checkResult) {
$_SESSION['username'] = $username;
echo "登录成功!
";
header("Refresh: 5; url=main.php");
exit;
} else {
echo "登录失败!
";
header("Refresh: 3; url=login.html");
exit;
}
?>
使用方法:
手机端安装 Microsoft Authenticator
下载地址:https://www.microsoft.com/en-us/security/mobile-authenticator-app
将以上代码生成的二维码地址在浏览器中访问
手机端扫描二维码获取动态验证码
代码示例:
login.html
系统运维管理平台
Login
login.php
系统运维管理平台
createSecret();
# 自定义安全密钥
$secret = "62H6TMAXQTZBVTRB";
// $qrCodeUrl = $ga->getQRCodeGoogleUrl('admin', $secret);
// echo "二维码: ".$qrCodeUrl."nn";
// 检查用户是否已经登录
if (isset($_SESSION['username'])) {
// 用户已登录,显示用户信息或其他操作
header("Refresh: 3; url=main.php");
} else {
if(!isset($_SESSION['num'])){//isset() — 检测num变量是否设置。
$_SESSION['num'] = 0;
}
// 密码输入错误3次,将不允许登录!
if($_SESSION['num']<3){
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$username = $_POST['username'];
$password = $_POST['password'];
//此处应该从数据库中查询是否存在系统用户,再进行口令验证
if($username){
$oneCode = $ga->getCode($secret);
echo "本次登录的动态口令:'$oneCode'n";
$checkResult = $ga->verifyCode($secret, $password,2); // 2 = 2*30sec clock tolerance
if ($checkResult) {
$_SESSION['username'] = $username;
echo "登录成功!
";
header("Refresh: 5; url=main.php");
exit;
} else {
$_SESSION['num']++;
echo "登录失败!
";
header("Refresh: 3; url=login.html");
exit;
}
}else{
echo "登录失败!
";
header("Refresh: 3; url=login.html");
exit;
}
} else {
header("Location: login.html");
exit;
}
}else{
echo "密码输入错误已超过3次,系统已不允许登录!
";
header("Refresh: 3; url=login.html");
exit;
}
}
?>
main.php
系统运维管理平台
".$_SESSION['username']."您已登录!";
echo "退出登录
";
} else{
header("Refresh: 3; url=login.html");
}
?>
logout.php
系统运维管理平台
login.css
html{
width: 100%;
height: 100%;
overflow: hidden;
font-style: sans-serif;
}
body{
width: 100%;
height: 100%;
font-family: 'Open Sans',sans-serif;
margin: 0;
background-color: #4A374A;
}
#login{
position: absolute;
top: 50%;
left:50%;
margin: -150px 0 0 -150px;
width: 300px;
height: 300px;
}
#login h1,h2{
color: #fff;
/* text-shadow:0 0 10px; */
letter-spacing: 1px;
text-align: center;
}
h1,h2{
font-size: 2em;
margin: 0.67em 0;
}
input{
width: 278px;
height: 18px;
margin-bottom: 10px;
outline: none;
padding: 10px;
font-size: 13px;
color: #fff;
/* text-shadow:1px 1px 1px; */
border-top: 1px solid #312E3D;
border-left: 1px solid #312E3D;
border-right: 1px solid #312E3D;
border-bottom: 1px solid #56536A;
border-radius: 4px;
background-color: #2D2D3F;
}
.but{
width: 300px;
min-height: 20px;
display: block;
background-color: #4a77d4;
border: 1px solid #3762bc;
color: #fff;
padding: 9px 14px;
font-size: 15px;
line-height: normal;
border-radius: 5px;
margin: 0;
}
以上就是php实现动态口令认证的示例代码的详细内容,更多关于php动态口令认证的资料请关注科站长其它相关文章!
上一篇:使用PHPStudy搭建Cloudreve网盘服务的流程步骤
栏 目:PHP编程
本文标题:php实现动态口令认证的示例代码
本文地址:https://www.fushidao.cc/wangluobiancheng/3343.html
您可能感兴趣的文章
- 07-25PHP调用FFmpeg实现视频切片
- 07-25PHP WindSearch实现站内搜索功能
- 07-25PHP建立MySQL与MySQLi持久化连接(长连接)区别
- 02-10windows服务器iis+php获得错误信息的配置方法
- 02-09通过PHP接入DeepSeek API的两种方法
- 02-07PHP调用DeepSeek API的完整指南
- 02-06PHP foreach引用变量导致的问题及其解决方案
- 02-02PHP使用puppeteer抓取JS渲染后的页面内容
- 01-17PHP SM4加密的实现
- 01-17PHP实现用户认证与权限管理的实现


阅读排行
推荐教程
- 07-25PHP建立MySQL与MySQLi持久化连接(长连接)区别
- 07-25PHP WindSearch实现站内搜索功能
- 07-25PHP调用FFmpeg实现视频切片
- 11-23PHP 7安装使用体验之性能大提升,兼容性强,扩展支
- 11-22PHP自定义函数判断是否为Get、Post及Ajax提交的方法
- 11-23隐藏PHP版本与PHP基本安全设置
- 11-23PHP+MYSQL 读写分离简单实战
- 11-23php中 == 和 === 的区别和应用说明
- 11-22详解PHP防止直接访问.php 文件的实现方法
- 11-22PHP编程求最大公约数与最小公倍数的方法示例
申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。
如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。
联系QQ:66551466 | 邮箱:66551466@qq.com
Copyright © 2018-2025 科站长 版权所有鄂ICP备2024089280号




