设为首页收藏本站
天天打卡

 找回密码
 立即注册
搜索
查看: 119|回复: 11

php实现动态口令认证的示例代码

[复制链接]

3

主题

54

回帖

175

积分

注册会员

积分
175
发表于 2024-4-20 08:22:19 | 显示全部楼层 |阅读模式
谷歌身份验证器Google Authenticator是谷歌推出的一款动态口令工具,解决大家各平台账户遭到恶意攻击的问题,一般在相关的服务平台登陆中除了用正常用户名和密码外,需要再输入一次谷歌认证器生成的动态口令才能验证成功,相当于输入二次密码,以达到账户的高安全性。
例如交易所、金融平台、以及一些钱包等项目等等,都会使用谷歌身份验证器Google Authenticator来做二次认证,开启谷歌身份验证之后,登录账户,除了输入用户名和密码,还需要输入谷歌验证器上的动态密码。谷歌验证器上的动态密码,也称为一次性密码,密码按照时间或使用次数不断动态变化(默认 30 秒变更一次)
代码参考:https://github.com/PHPGangsta/GoogleAuthenticator
关键代码:
  1. <?php
  2. // https://github.com/PHPGangsta/GoogleAuthenticator
  3. error_reporting(0);// 关闭错误报告
  4. session_start(); // 启动session  
  5. require_once 'PHPGangsta/GoogleAuthenticator.php';
  6. $ga = new PHPGangsta_GoogleAuthenticator();
  7. // $secret = $ga->createSecret();
  8. // 自定义安全密钥
  9. $secret = "62H6TMAXQTZBVTRB";
  10. // 手机端扫描二维码获取动态口令
  11. $qrCodeUrl = $ga->getQRCodeGoogleUrl('username', $secret);
  12. echo "二维码地址: ".$qrCodeUrl."\n\n";
  13. // 输出动态口令
  14. $oneCode = $ga->getCode($secret);
  15. echo "本次登录的动态口令:'$oneCode'\n";
  16. // 动态口令认证
  17. $checkResult = $ga->verifyCode($secret, $password,2);    // 2 = 2*30sec clock tolerance
  18. if ($checkResult) {
  19.     $_SESSION['username'] = $username;
  20.     echo "<h1>登录成功!</h1>";
  21.     header("Refresh: 5; url=main.php");
  22.     exit;
  23. } else {
  24.     echo "<h1>登录失败!</h1>";
  25.     header("Refresh: 3; url=login.html");
  26.     exit;
  27. }
  28. ?>
复制代码
使用方法:
手机端安装 Microsoft Authenticator
下载地址:https://www.microsoft.com/en-us/security/mobile-authenticator-app
将以上代码生成的二维码地址在浏览器中访问
手机端扫描二维码获取动态验证码
代码示例:
login.html
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <title>系统运维管理平台</title>
  6.     <link rel="stylesheet" type="text/css" href="login.css" rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow" />
  7. </head>
  8. <body>
  9.     <div id="login">
  10.         <h1>Login</h1>
  11.         <form method="post" action="login.php">
  12.             <input type="text" required="required" placeholder="用户名" name="username"></input>
  13.             <input type="password" required="required" placeholder="密码" name="password"></input>
  14.             <button class="but" type="submit">登录</button>
  15.         </form>
  16.     </div>
  17. </body>
  18. </html>
复制代码
login.php
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <title>系统运维管理平台</title>
  6.     <link rel="stylesheet" type="text/css" href="login.css" rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow" />
  7. </head>
  8. <body>
  9. <div id="login">
  10. <?php
  11. // https://github.com/PHPGangsta/GoogleAuthenticator
  12. error_reporting(0);// 关闭错误报告
  13. session_start(); // 启动session  
  14. require_once 'PHPGangsta/GoogleAuthenticator.php';
  15. $ga = new PHPGangsta_GoogleAuthenticator();
  16. // $secret = $ga->createSecret();
  17. # 自定义安全密钥
  18. $secret = "62H6TMAXQTZBVTRB";
  19. // $qrCodeUrl = $ga->getQRCodeGoogleUrl('admin', $secret);
  20. // echo "二维码: ".$qrCodeUrl."\n\n";

  21. // 检查用户是否已经登录  
  22. if (isset($_SESSION['username'])) {  
  23.     // 用户已登录,显示用户信息或其他操作  
  24.     header("Refresh: 3; url=main.php");
  25. } else {  
  26.     if(!isset($_SESSION['num'])){//isset() — 检测num变量是否设置。
  27.         $_SESSION['num'] = 0;
  28.     }
  29.     // 密码输入错误3次,将不允许登录!
  30.     if($_SESSION['num']<3){
  31.         if ($_SERVER['REQUEST_METHOD'] === 'POST') {
  32.             $username = $_POST['username'];  
  33.             $password = $_POST['password'];  
  34.             //此处应该从数据库中查询是否存在系统用户,再进行口令验证
  35.             if($username){
  36.                 $oneCode = $ga->getCode($secret);
  37.                 echo "本次登录的动态口令:'$oneCode'\n";
  38.                 $checkResult = $ga->verifyCode($secret, $password,2);    // 2 = 2*30sec clock tolerance
  39.                 if ($checkResult) {
  40.                     $_SESSION['username'] = $username;
  41.                     echo "<h1>登录成功!</h1>";
  42.                     header("Refresh: 5; url=main.php");
  43.                     exit;
  44.                 } else {
  45.                     $_SESSION['num']++;
  46.                     echo "<h1>登录失败!</h1>";
  47.                     header("Refresh: 3; url=login.html");
  48.                     exit;
  49.                 }
  50.             }else{
  51.                 echo "<h1>登录失败!</h1>";
  52.                 header("Refresh: 3; url=login.html");
  53.                 exit;
  54.             }
  55.         } else {  
  56.             header("Location: login.html");
  57.             exit;
  58.         }
  59.     }else{
  60.         echo "<h1>密码输入错误已超过3次,系统已不允许登录!</h1>";
  61.         header("Refresh: 3; url=login.html");
  62.         exit;
  63.     }
  64. }
  65. ?>
  66. </div>
  67. </body>
  68. </html>
复制代码
main.php
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <title>系统运维管理平台</title>
  6.     <link rel="stylesheet" type="text/css" href="login.css" rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow" />
  7. </head>
  8. <body>
  9.     <div id="login">
  10.     <?php
  11.     session_start(); // 启动session
  12.     if (isset($_SESSION['username'])) {  
  13.         echo "<h2>".$_SESSION['username']."您已登录!</h2>";
  14.         echo "<h2><a href='logout.php'>退出登录</a></h2>";
  15.     } else{
  16.         header("Refresh: 3; url=login.html");
  17.     }
  18.     ?>
  19. </body>
  20. </html>
复制代码
logout.php
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <title>系统运维管理平台</title>
  6.     <link rel="stylesheet" type="text/css" href="login.css" rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow" />
  7. </head>
  8. <body>
  9.     <div id="login">
  10.     <?php
  11.         session_start();
  12.         if(isset($_SESSION['username']))
  13.         {
  14.             session_destroy();
  15.         }
  16.         header("Refresh: 3; url=login.html");
  17.     ?>
  18. </body>
  19. </html>
复制代码
login.css
  1. html{   
  2.     width: 100%;   
  3.     height: 100%;   
  4.     overflow: hidden;   
  5.     font-style: sans-serif;   
  6. }   
  7. body{   
  8.     width: 100%;   
  9.     height: 100%;   
  10.     font-family: 'Open Sans',sans-serif;   
  11.     margin: 0;   
  12.     background-color: #4A374A;   
  13. }   
  14. #login{   
  15.     position: absolute;   
  16.     top: 50%;   
  17.     left:50%;   
  18.     margin: -150px 0 0 -150px;   
  19.     width: 300px;   
  20.     height: 300px;   
  21. }   
  22. #login h1,h2{   
  23.     color: #fff;   
  24.     /* text-shadow:0 0 10px;    */
  25.     letter-spacing: 1px;   
  26.     text-align: center;   
  27. }   
  28. h1,h2{   
  29.     font-size: 2em;   
  30.     margin: 0.67em 0;   
  31. }   
  32. input{   
  33.     width: 278px;   
  34.     height: 18px;   
  35.     margin-bottom: 10px;   
  36.     outline: none;   
  37.     padding: 10px;   
  38.     font-size: 13px;   
  39.     color: #fff;   
  40.     /* text-shadow:1px 1px 1px;    */
  41.     border-top: 1px solid #312E3D;   
  42.     border-left: 1px solid #312E3D;   
  43.     border-right: 1px solid #312E3D;   
  44.     border-bottom: 1px solid #56536A;   
  45.     border-radius: 4px;   
  46.     background-color: #2D2D3F;   
  47. }   
  48. .but{   
  49.     width: 300px;   
  50.     min-height: 20px;   
  51.     display: block;   
  52.     background-color: #4a77d4;   
  53.     border: 1px solid #3762bc;   
  54.     color: #fff;   
  55.     padding: 9px 14px;   
  56.     font-size: 15px;   
  57.     line-height: normal;   
  58.     border-radius: 5px;   
  59.     margin: 0;   
  60. }
复制代码
以上就是php实现动态口令认证的示例代码的详细内容,更多关于php动态口令认证的资料请关注脚本之家其它相关文章!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
  • 打卡等级:偶尔看看
  • 打卡总天数:10
  • 打卡月天数:0
  • 打卡总奖励:180
  • 最近打卡:2024-06-20 09:02:38

9

主题

80

回帖

605

积分

高级会员

积分
605

推广达人宣传达人热心会员付费会员

发表于 2024-6-7 15:48:35 | 显示全部楼层
同意!

1

主题

48

回帖

117

积分

注册会员

积分
117
发表于 2024-7-3 00:23:19 | 显示全部楼层
顶一个,观点非常中肯!

0

主题

51

回帖

100

积分

注册会员

积分
100
发表于 2024-7-31 11:02:10 | 显示全部楼层
同意你的观点,我们有共鸣。

0

主题

40

回帖

80

积分

注册会员

积分
80
发表于 2024-8-20 10:44:37 | 显示全部楼层
嘎嘎嘎嘎嘎嘎嘎
  • 打卡等级:无名新人
  • 打卡总天数:2
  • 打卡月天数:0
  • 打卡总奖励:34
  • 最近打卡:2024-05-17 13:30:07

2

主题

79

回帖

407

积分

中级会员

积分
407

热心会员付费会员

发表于 2024-8-21 12:10:38 | 显示全部楼层
我们一起努力,共同解决问题吧。

1

主题

55

回帖

133

积分

注册会员

积分
133
发表于 2024-8-24 05:10:27 | 显示全部楼层
我不确定这个信息的准确性,请再确认一下
发表于 2024-8-29 19:18:52 | 显示全部楼层
谢谢你的提醒,我会注意的。

0

主题

41

回帖

80

积分

注册会员

积分
80
发表于 2024-9-18 05:42:42 | 显示全部楼层
已测试,非常不错

1

主题

53

回帖

128

积分

注册会员

积分
128
发表于 2024-10-1 09:08:44 | 显示全部楼层
这个话题真是有趣,我也对它感兴趣。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|爱云论坛 - d.taiji888.cn - 技术学习 免费资源分享 ( 蜀ICP备2022010826号 )|天天打卡

GMT+8, 2024-11-15 05:11 , Processed in 0.086721 second(s), 27 queries .

Powered by i云网络 Licensed

© 2023-2028 正版授权

快速回复 返回顶部 返回列表