APEX后台弱密码增强改造出现的问题及解决方法

为了加强APEX后台密码的安全性和可靠性,对其进行弱密码改造,通过改写登录函数,判断密码可靠性,在密码不符合条件(密码长度必须大于8位小于16位,其包含数字、大小写字母与特殊符号)时跳转到密码修改页面。

判断逻辑

登录后先验证密码是否为空——为空返回false,不为空继续——判断输入密码是否与数据库加密密码相符——不符返回false,相符继续——判断是否是弱密码——否(强密码)用户登录,是(弱密码)进入密码修改页面——修改成功后返回登录界面用新密码登录。

流程图如下所示

【问题记录】页面登录时可以从P9999登录页面进入P81修改密码界面,但是想从P81修改密码界面点击进入登录界面不生效,又返回P81修改密码界面,搁这儿单人转呢?

【问题原因】密码验证方法有误,将输入密码加密后再进行密码强弱性校验这样做项IS_CHANGE_PSWD永远取到1而不是0,所以无法跳转登录页

在登录页呈现前创建分支,进行判断,如果项IS_CHANGE_PSWD为1,则说明是弱密码,
需要修改,跳转到密码修改页

详情:

 加密前正常输入密码Aa123456!,加密后是jYwu7f1/liQ9N+yRyszzHA==,加密后字符长达24,超出了最大长度16,自然一直走false。

如果将输入密码Aa123456#加密再进行校验,那么无论如何都走的是false,带入到逻辑代码中就是IS_CHANGE_PSWD永远取到1,无法正常登录

反之将输入密码进行校验则会正常判断

【解决方法】将输入密码与数据库内所存密码(解密后)比较,进行密码强弱性校验时也是使用输入原密码,不要加密后校验!不要加密后校验!不要加密后校验!(重要的事说三遍)
create function apex_mpf_authentication_basic2(p_username in varchar2,p_password in varchar2)return boolean
asv_password   varchar2(64);v_password_reg  varchar2(64);  --解密后的密码v_mobile     varchar2(64);v_job_number varchar2(64);v_err_msg    varchar2(2000);
beginapex_util.set_session_state('USER_NAME',p_username); --设置工号到USER_NAMEselect PASSWORD, MOBILE, JOB_NUMBERinto v_password,v_mobile,v_job_numberfrom BASIC_SYSTEM_LOGIN_USERwhere LOGIN_USER_ID in (SELECT u.LOGIN_USER_IDFROM BASIC_SYSTEM_USER_ROLE uwhere u.IS_ENABLE = 1and u.USER_ID in (select a.USER_IDfrom SHARE_BASIC_USER_V awhere a.IS_LEAVE = 0 -- 中台 EHR账户“未离职”的状态下and a.TENANT_ID = apex_util.get_session_state('USER_TENANT'))and u.TENANT_ID = apex_util.get_session_state('USER_TENANT'))and JOB_NUMBER = upper(p_username)and SYSTEM_TYPE = 'BASIC'and DEL_FLAG = 0and TENANT_ID = apex_util.get_session_state('USER_TENANT');WRITE_LOG(GET_FN_NAME(), 'debug3',p_username || p_password || apex_util.get_session_state('USER_TENANT') || v_job_number, -1, -1);if v_password is not null then  --密码非空V_PASSWORD_REG := JA_UTILS_PKG.DECRYPT_DEC(v_password);  --将解密的密码赋值给v_password_regif p_password <> V_PASSWORD_REG then  --输入密码与数据库解密密码不符return false;else  --输入密码与数据库解密密码相符-- 验证当前用户是强密码或弱密码的情况-- 8到16位,包含数字,大小写,特殊字符,不包含空格WRITE_LOG(GET_FN_NAME(), 'debug6','V_PASSWORD:'||V_PASSWORD_REG, -1, -1);IF NOT (REGEXP_LIKE(V_PASSWORD_REG, '[0-9]') ANDREGEXP_LIKE(V_PASSWORD_REG, '[a-z]') ANDREGEXP_LIKE(V_PASSWORD_REG, '[A-Z]') ANDREGEXP_LIKE(V_PASSWORD_REG, '[@#$%^&+=!.]') ANDLENGTH(V_PASSWORD_reg) BETWEEN 8 AND 16 ANDNOT REGEXP_LIKE(V_PASSWORD_REG, '\s')) THEN--弱密码的情况 IS_CHANGE_PSWD赋值1,目的:跳转修改密码页 要求用户修改密码,反之APEX_UTIL.SET_SESSION_STATE('IS_CHANGE_PSWD', 1);RETURN FALSE;ELSEAPEX_UTIL.SET_SESSION_STATE('IS_CHANGE_PSWD', 0);RETURN TRUE;END IF;end if;else  --密码为空return false;end if;exceptionwhen others thenv_err_msg := sqlerrm || chr(13) || dbms_utility.format_error_backtrace;JA_WRITE_LOG(JA_UTILS_PKG.GET_FN_NAME(), 'error', v_err_msg, apex_util.get_session_state('USER_ID'),apex_util.get_session_state('USER_TENANT'), V('APP_NAME') || ':' || V('APP_ID'));return false;
end;
/

奇怪,明明都是对的,但是会报“登录身份证明无效”

原来是表BASIC_SYSTEM_USER_ROLE中未分配角色,所以找不到,其他有角色的用户带来则会正常执行。

【一个展示BUG】

奇怪的bug增加了,点击修改密码页面的“返回登录页”按钮,出现了一个丑丑的bug

后来找到原因了,返回登录使用的是别名,结果别名被占用,不是我想返回的登录页,将想返回的登录页别名命名过来即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/237954.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Docker】基于华为 openEuler 应用 Docker 镜像体积压缩

书接 openEuler 系列文章&#xff08;可以翻看测试系列&#xff09;&#xff0c;本次跟大家说说如何将 Java 包轻量化地构建到 openEuler 镜像中且保持镜像内操作系统是全补丁状态。 之前我们都是使用现成的 jdk 镜像进行构建的&#xff0c;如下图&#xff1a; FROM ibm-seme…

智能数字人1688直播软件系统源码有哪些适用的场景?

智能数字人1688直播软件系统源码适用于多个场景&#xff0c;小编给大家列举了一些。 以下是部分代码的示例&#xff1a; 适用场景&#xff1a; 1.电商直播&#xff1a;1688智能数字人直播软件系统源码可以用于电商直播平台&#xff0c;为商家提供智能化的直播服务。数字人主播…

macOS制作dmg包

macOS制作dmg包 准备&#xff1a;磁盘工具、以及要制作的软件&#xff0c;这里以Firefox为例 图片素材 背景图&#xff1a; 找到Firefox&#xff0c;点击显示简介&#xff0c;查看包的大小 打开磁盘工具 文件–>新建映像–>空白映像 填写信息&#xff0c;大小…

nodejs微信小程序+python+PHP个性化书籍推荐系统-计算机毕业设计推荐

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

静态HTTP:构建高效、可扩展的Web应用程序的基础

静态HTTP是Web应用程序的重要组成部分&#xff0c;它为构建高效、可扩展的Web应用程序提供了坚实的基础。下面将详细介绍静态HTTP的优势和在Web应用程序中的作用。 一、静态HTTP的优势 高效性能&#xff1a;静态HTTP内容在服务器上预先生成&#xff0c;然后通过HTTP协议传输到…

CloudPulse:一款针对AWS云环境的SSL证书搜索与分析引擎

关于CloudPulse CloudPulse是一款针对AWS云环境的SSL证书搜索与分析引擎&#xff0c;广大研究人员可以使用该工具简化并增强针对SSL证书数据的检索和分析过程。 在网络侦查阶段&#xff0c;我们往往需要收集与目标相关的信息&#xff0c;并为目标创建一个专用文档&#xff0c…

智慧互联网银行引领金融变革,开源网安VulHunter护航数字化发展

某银行作为国内知名的互联网银行&#xff0c;以构建“智慧型互联行”为总体战略目标&#xff0c;始终坚持科技赋能金融的理念。通过AI、大数据、云计算等数字技术与金融业务的探索融合&#xff0c;实现以更低的成本为客户提供便捷、高效和优质体验的互联网金融服务。 架构升级助…

DBeaver中使用外部格式化程序对进行sql格式化

本文介绍了如何在DBeaver中使用pgFormatter、sqlprase、sqlformatter等外部格式化程序对sql进行格式化。 目录 一、pgFormatter 1.准备工作 2.DBeaver中进行配置 二、sqlprase 1.准备工作 2.在DBeaver中配置 三、sql-formatter 1.准备工作 2.在DBeaver中配置 一、pgF…

celery是封装记录

目录 入口主程序 celery配置文件 config/config.conf&#xff08;可取消&#xff09; redis 配置 nanny 保姆文件 入口主程序 celery启动时调用的主程序 tasks.py #! /usr/bin/env python …

防火墙安全策略

目录 一、防火墙种类 二、防火墙流量控制手段 1、包过滤技术&#xff08;传统&#xff09; 2、状态检测技术 &#xff08;1&#xff09;、状态检测机制 三、安全实验 1、拓扑 2、需求 3、配置思路 4、关键配置截图 5、验证 一、防火墙种类 对于防火墙来说就是针对哪…

选型前必看,CRM系统在线演示为什么重要?

在CRM挑选环节中&#xff0c;假如企业需要深入了解CRM管理系统的功能和功能&#xff0c;就需要CRM厂商提供在线演示。简单的说&#xff0c;就是按照企业的需要&#xff0c;检测怎样通过CRM进行。如今我们来谈谈CRM在线演示的作用。 在线演示 1、了解CRM情况 熟悉系统功能&…

阿里云oss存储器图片上传功能

controller层 RestController RequestMapping("/upload") public class FileUploadController {PostMappingpublic Result upload(MultipartFile file) throws IOException {String orgFilename file.getOriginalFilename();//名字组合String filename UUID.rand…

姿态识别、目标检测和跟踪的综合应用

引言&#xff1a; 近年来&#xff0c;随着人工智能技术的不断发展&#xff0c;姿态识别、目标检测和跟踪成为了计算机视觉领域的热门研究方向。这三个技术的综合应用为各个行业带来了巨大的变革和机遇。本文将分别介绍姿态识别、目标检测和跟踪的基本概念和算法&#xff0c;并探…

如何添加jar包到本地Maven项目中

在 Maven 中添加一个外部 JAR 包的依赖&#xff0c;你需要使用 Maven 的 <dependency> 元素来指定该 JAR 包的坐标信息。以下是具体的步骤&#xff1a; 将 JAR 包手动添加到 Maven 本地仓库&#xff1a; 首先&#xff0c;确保将外部 JAR 包手动添加到 Maven 本地仓库。可…

基于Java开发的微信约拍小程序

一、系统架构 前端&#xff1a;vue | element-ui 后端&#xff1a;springboot | mybatis 环境&#xff1a;jdk8 | mysql8 | maven | mysql 二、代码及数据库 三、功能说明 01. 首页 02. 授权登录 03. 我的 04. 我的-编辑个人资料 05. 我的-我的联系方式 06. …

Java——PriorityQueue用法(实现最大堆)

Java——PriorityQueue用法 PriorityQueue 是 Java 中基于优先级堆实现的一个队列&#xff0c;可以用来存储一组元素&#xff0c;并按照一定的优先级顺序访问这些元素。其中&#xff0c;优先级高的元素会被先访问。 PriorityQueue 类位于 java.util 包中&#xff0c;是一个泛…

等待队列头实现阻塞 IO(BIO)

文章目录 等待队列头实现阻塞 IO(BIO)模型等待队列头init_waitqueue_headDECLARE_WAIT_QUEUE_HEAD 等待队列项使用方法驱动程序应用程序模块使用参考 等待队列头实现阻塞 IO(BIO) 等待队列是内核实现阻塞和唤醒的内核机制。 等待队列以循环链表为基础结构&#xff0c;链表头和…

苹果如何从iCloud恢复备份?正确方法看这里!

iCloud为所有苹果用户免费提供5G内存空间&#xff0c;用户可以将照片、短信、联系人、备忘录等重要信息备份到iCloud云端&#xff0c;这样可以方便在不同设备之间同步和共享。 同时&#xff0c;iCloud保证这些数据在所有苹果设备上及时自动更新。当遇到手机数据丢失时&#xf…

构建搜索引擎,而非向量数据库(Vector DB) [译]

原文&#xff1a;Build a search engine, not a vector DB 作者&#xff1a; Panda Smith 在过去 12 个月中&#xff0c;我们见证了向量数据库&#xff08;Vector DB&#xff09;创业公司的迅猛增长。我此刻并不打算深入探讨它们各自的设计取舍。相反&#xff0c;我更想探讨和…

做外贸多想一步,多走一步

最近在网上给小儿买了一个液晶画画板&#xff0c;自从告诉小儿已经购物需要耐心等待之后&#xff0c;几乎每天小儿要询问几遍&#xff0c;快递到哪里了&#xff1f; 好不容易盼到了&#xff0c;结果打开一看却是个坏的&#xff0c;虽然外包装是好的&#xff0c;但是明显这个快…