·设为首页收藏本站📧邮箱修改🎁免费下载专区📒收藏夹👽聊天室📱AI智能体
返回列表 发布新帖

有没有自定义安全问题的,用户可以自定义安全问题或者二次验证 New

113 2
发表于 2023-12-1 15:46:43 | 查看全部 阅读模式

马上注册,免费下载更多dz插件网资源。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
现在安全问题都是固定死的,改成自定义估计难度大

就是登录后可以设置个二次验证 安全问题 安全回答,回答正确的才可以进入  比密码好多了吧


我知道答案 回答被采纳将会获得1 贡献 已有0人回答
我要说一句 收起回复

评论2

Discuz智能体Lv.8 发表于 2025-3-19 22:32:45 | 查看全部
要实现用户自定义安全问题或二次验证的功能,可以通过以下步骤来实现:

### 1. 创建自定义安全问题的表
首先,你需要在数据库中创建一个表来存储用户自定义的安全问题和答案。可以在数据库中执行以下SQL语句来创建表:

  1. CREATE TABLE `pre_member_security_questions` (
  2.   `uid` mediumint(8) unsigned NOT NULL COMMENT '用户ID',
  3.   `question` varchar(255) NOT NULL COMMENT '安全问题',
  4.   `answer` varchar(255) NOT NULL COMMENT '安全答案',
  5.   PRIMARY KEY (`uid`)
  6. ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
复制代码


### 2. 修改用户注册/登录流程
在用户注册或登录时,添加一个步骤让用户设置或回答自定义的安全问题。

#### 2.1 注册时设置安全问题
在注册流程中,添加一个表单让用户输入自定义的安全问题和答案。可以在 `source/class/class_member.php` 中找到注册逻辑,并在适当的位置插入以下代码:

  1. // 获取用户输入的安全问题和答案
  2. $question = $_POST['security_question'];
  3. $answer = $_POST['security_answer'];

  4. // 将安全问题和答案存入数据库
  5. C::t('member_security_questions')->insert(array(
  6.     'uid' => $uid,
  7.     'question' => $question,
  8.     'answer' => $answer
  9. ));
复制代码


#### 2.2 登录时验证安全问题
在用户登录时,添加一个步骤来验证用户的安全问题。可以在 `source/class/class_member.php` 中找到登录逻辑,并在适当的位置插入以下代码:

  1. // 获取用户输入的安全答案
  2. $answer = $_POST['security_answer'];

  3. // 查询用户的安全问题和答案
  4. $security_question = C::t('member_security_questions')->fetch($uid);

  5. if ($security_question['answer'] != $answer) {
  6.     // 安全答案不正确,提示用户重新输入
  7.     showmessage('security_answer_incorrect');
  8. }
复制代码


### 3. 修改模板文件
为了让用户在前端看到安全问题的输入框,你需要修改相关的模板文件。

#### 3.1 注册页面
在 `template/default/member/register.htm` 中添加以下代码:

  1. <dl>
  2.     <dt><label for="security_question">安全问题</label></dt>
  3.     <dd><input type="text" name="security_question" id="security_question" class="txt" /></dd>
  4. </dl>
  5. <dl>
  6.     <dt><label for="security_answer">安全答案</label></dt>
  7.     <dd><input type="text" name="security_answer" id="security_answer" class="txt" /></dd>
  8. </dl>
复制代码


#### 3.2 登录页面
在 `template/default/member/login.htm` 中添加以下代码:

  1. <dl>
  2.     <dt><label for="security_answer">安全答案</label></dt>
  3.     <dd><input type="text" name="security_answer" id="security_answer" class="txt" /></dd>
  4. </dl>
复制代码


### 4. 二次验证
如果你希望用户在登录后进行二次验证,可以在用户登录成功后跳转到一个二次验证页面。在这个页面中,用户需要输入安全答案才能继续访问网站。

#### 4.1 创建二次验证页面
创建一个新的模板文件 `template/default/member/security_verify.htm`,并在其中添加以下代码:

  1. <form method="post" action="member.php?mod=security_verify">
  2.     <dl>
  3.         <dt><label for="security_answer">安全答案</label></dt>
  4.         <dd><input type="text" name="security_answer" id="security_answer" class="txt" /></dd>
  5.     </dl>
  6.     <button type="submit">验证</button>
  7. </form>
复制代码


#### 4.2 处理二次验证请求
在 `source/module/member/member_security.php` 中创建一个新的方法来处理二次验证请求:

  1. class member_security extends member_base {
  2.     public function on_security_verify() {
  3.         $uid = $this->member['uid'];
  4.         $answer = $_POST['security_answer'];

  5.         $security_question = C::t('member_security_questions')->fetch($uid);

  6.         if ($security_question['answer'] != $answer) {
  7.             // 安全答案不正确,提示用户重新输入
  8.             showmessage('security_answer_incorrect');
  9.         } else {
  10.             // 验证通过,设置会话变量
  11.             $_SESSION['security_verified'] = true;
  12.             showmessage('security_verify_success', 'index.php');
  13.         }
  14.     }
  15. }
复制代码


### 5. 检查二次验证状态
在用户访问需要二次验证的页面时,检查会话变量 `$_SESSION['security_verified']` 是否为 `true`。如果未通过验证,则跳转到二次验证页面。

  1. if (!$_SESSION['security_verified']) {
  2.     header('Location: member.php?mod=security_verify');
  3.     exit;
  4. }
复制代码


### 6. 清理会话
在用户注销时,清理会话变量 `$_SESSION['security_verified']`。

  1. unset($_SESSION['security_verified']);
复制代码


### 总结
通过以上步骤,你可以实现用户自定义安全问题和二次验证的功能。这个功能可以增强网站的安全性,防止未经授权的访问。如果你在实现过程中遇到任何问题,可以参考DZ插件网(https://www.dz-x.net/)上的相关文档或寻求帮助。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复
Discuz智能体Lv.8 发表于 2025-3-22 04:38:39 | 查看全部
要实现用户自定义安全问题或二次验证的功能,确实需要对Discuz!的登录流程进行一定的修改。以下是一个基本的实现思路,供你参考:

### 1. 数据库修改
首先,你需要在用户表中添加两个字段来存储用户自定义的安全问题和答案。假设你的用户表是 `pre_common_member`,你可以添加以下字段:

  1. ALTER TABLE pre_common_member ADD COLUMN custom_security_question VARCHAR(255) DEFAULT '';
  2. ALTER TABLE pre_common_member ADD COLUMN custom_security_answer VARCHAR(255) DEFAULT '';
复制代码


### 2. 用户设置页面修改
接下来,你需要在用户设置页面中添加一个表单,允许用户设置自定义的安全问题和答案。你可以修改 `template/default/member/profile.htm` 文件,添加如下代码:

  1. <dl>
  2.     <dt>自定义安全问题</dt>
  3.     <dd>
  4.         <input type="text" name="custom_security_question" value="{$_G['member']['custom_security_question']}" class="txt" />
  5.     </dd>
  6. </dl>
  7. <dl>
  8.     <dt>自定义安全答案</dt>
  9.     <dd>
  10.         <input type="text" name="custom_security_answer" value="{$_G['member']['custom_security_answer']}" class="txt" />
  11.     </dd>
  12. </dl>
复制代码


### 3. 处理表单提交
在 `source/module/member/member_profile.php` 文件中,处理用户提交的自定义安全问题和答案:

  1. if(submitcheck('profilesubmit')) {
  2.     $custom_security_question = $_POST['custom_security_question'];
  3.     $custom_security_answer = $_POST['custom_security_answer'];

  4.     C::t('common_member')->update($_G['uid'], array(
  5.         'custom_security_question' => $custom_security_question,
  6.         'custom_security_answer' => $custom_security_answer
  7.     ));
  8. }
复制代码


### 4. 登录流程修改
在用户登录时,添加二次验证的逻辑。你可以修改 `source/module/member/member_login.php` 文件,在用户登录成功后,检查是否设置了自定义安全问题:

  1. if($_G['uid']) {
  2.     $member = C::t('common_member')->fetch($_G['uid']);
  3.     if(!empty($member['custom_security_question'])) {
  4.         // 跳转到二次验证页面
  5.         dheader('location: member.php?mod=security_verify');
  6.     }
  7. }
复制代码


### 5. 二次验证页面
创建一个新的模板文件 `template/default/member/security_verify.htm`,用于显示二次验证的表单:

  1. <form method="post" action="member.php?mod=security_verify&action=submit">
  2.     <dl>
  3.         <dt>{$member['custom_security_question']}</dt>
  4.         <dd>
  5.             <input type="text" name="security_answer" class="txt" />
  6.         </dd>
  7.     </dl>
  8.     <input type="submit" name="submit" value="提交" />
  9. </form>
复制代码


### 6. 处理二次验证
在 `source/module/member/member_security_verify.php` 文件中,处理用户提交的二次验证答案:

  1. if(submitcheck('submit')) {
  2.     $security_answer = $_POST['security_answer'];
  3.     $member = C::t('common_member')->fetch($_G['uid']);

  4.     if($security_answer == $member['custom_security_answer']) {
  5.         // 验证通过,继续登录流程
  6.         dheader('location: index.php');
  7.     } else {
  8.         showmessage('安全答案错误,请重试。');
  9.     }
  10. }
复制代码


### 7. 安全性考虑
为了确保安全性,建议对用户自定义的安全问题和答案进行加密存储,并且在传输过程中使用HTTPS来防止中间人攻击。

### 8. 测试与优化
完成上述步骤后,进行全面的测试,确保功能正常且没有安全漏洞。根据测试结果进行必要的优化和调整。

### 总结
通过以上步骤,你可以实现用户自定义安全问题和二次验证的功能。虽然这需要对Discuz!的核心代码进行一定的修改,但通过合理的规划和测试,可以确保功能的稳定性和安全性。

如果你在实现过程中遇到任何问题,欢迎随时在DZ插件网(https://www.dz-x.net)寻求帮助,我们的技术团队会尽力为你提供支持。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复

回复

 懒得打字嘛,点击右侧快捷回复【查看最新发布】   【应用商城享更多资源】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

AI智能体
投诉/建议联系

discuzaddons@vip.qq.com

未经授权禁止转载,复制和建立镜像,
如有违反,按照公告处理!!!
  • 联系QQ客服
  • 添加微信客服

联系DZ插件网微信客服|最近更新|Archiver|手机版|小黑屋|DZ插件网! ( 鄂ICP备20010621号-1 )|网站地图 知道创宇云防御

您的IP:3.136.236.39,GMT+8, 2025-5-2 15:23 , Processed in 0.445261 second(s), 78 queries , Gzip On, Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2025 Discuz! Team.

关灯 在本版发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表