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

news2025/2/6 7:44:24

为了加强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
as
    v_password   varchar2(64);
    v_password_reg  varchar2(64);  --解密后的密码
    v_mobile     varchar2(64);
    v_job_number varchar2(64);
    v_err_msg    varchar2(2000);
begin
   apex_util.set_session_state('USER_NAME',p_username); --设置工号到USER_NAME
    select PASSWORD, MOBILE, JOB_NUMBER
    into v_password,v_mobile,v_job_number
    from BASIC_SYSTEM_LOGIN_USER
    where LOGIN_USER_ID in (SELECT u.LOGIN_USER_ID
                            FROM BASIC_SYSTEM_USER_ROLE u
                            where u.IS_ENABLE = 1
                              and u.USER_ID in (select a.USER_ID
                                                from SHARE_BASIC_USER_V a
                                                where 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 = 0
      and 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_reg
        if 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]') AND
                REGEXP_LIKE(V_PASSWORD_REG, '[a-z]') AND
                REGEXP_LIKE(V_PASSWORD_REG, '[A-Z]') AND
                REGEXP_LIKE(V_PASSWORD_REG, '[@#$%^&+=!.]') AND
                LENGTH(V_PASSWORD_reg) BETWEEN 8 AND 16 AND
                NOT REGEXP_LIKE(V_PASSWORD_REG, '\s')
            ) THEN
            --弱密码的情况 IS_CHANGE_PSWD赋值1,目的:跳转修改密码页 要求用户修改密码,反之
            APEX_UTIL.SET_SESSION_STATE('IS_CHANGE_PSWD', 1);
            RETURN FALSE;
            ELSE
             APEX_UTIL.SET_SESSION_STATE('IS_CHANGE_PSWD', 0);
            RETURN TRUE;
        END IF;
        end if;
    else  --密码为空
        return false;
    end if;

exception
    when others then
        v_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.coloradmin.cn/o/1327980.html

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

相关文章

easyexcel复杂表头导出

easyexcel复杂表头导出 /*** ClassName ColumnWidthStyleStrategy* Description: excel导出列长度**/ public class ExcelWidthStyleStrategy extends AbstractColumnWidthStyleStrategy {private static final int MAX_COLUMN_WIDTH 200;private final Map<Integer, Map…

flutter + firebase 云消息通知教程 (android-安卓、ios-苹果)

如果能看到这篇文章的 一定已经对手机端的 消息推送通知 有了一定了解。 国内安卓厂商这里不提都有自己的FCM 可自行查找。&#xff08;国内因无法科学原因 &#xff0c;不能使用谷歌服务&#xff09;只说海外的。 目前 adnroid 和 ios 推送消息分别叫 FCM 和 APNs。这里通过…

【小白专用】php pdo方式连接sqlserver 设置方法 更新23.12.21

windows系统的拓展相对来说比较好安装&#xff0c;直接下载对应的dll文件&#xff0c;修改php.ini配置文件即可。 添加PHP对SQL SERVER的支持 1.新建PHP 文件&#xff0c;输入内容&#xff1a; <?php echo phpinfo(); ?> 2.运行后&#xff0c;可以查看到如下数据&…

【Xcode】解决Unable to process request - PLA Update available

出现场景 IOS更新app时&#xff0c;使用Xcode上传新版本的包时&#xff0c;提示无法上传。 Unable to process request -PLA update available you currently dont have access to this membership resource. To resolve this issue ,agree to the latest program license a…

ES排错命令

GET _cat/indices?v&healthred GET _cat/indices?v&healthyellow GET _cat/indices?v&healthgreen确定哪些索引有问题&#xff0c;多少索引有问题。_cat API 可以通过返回结果告诉我们这一点 查看有问题的分片以及原因。 这与索引列表有关&#xff0c;但是索引…

Patreon怎么订阅付款?Patreon会员订阅付款保姆级教程,用虚拟VISA卡订阅Patreon作者艺术家

Patreon 是目前世界上最受欢迎的会员平台之一。 内容创作者和艺术家通常很难让粉丝在经济上支持他们。 通过使用像 Patreon 这样的平台&#xff0c;创作者和艺术家可以很容易地从他们的作品中获得报酬。粉丝也能更方便的支持他们&#xff0c;今天就教大家如何订阅Patreon 首先我…

数字门牌管理系统:提升数据质量与服务品质的关键

一、引言 在当今社会&#xff0c;各行各业对数据质量的要求越来越高。为了满足客户需求并遵循国家行业标准&#xff0c;数字门牌管理系统应运而生。该系统以建立项目建设标准规范为核心&#xff0c;旨在提升数据质量与服务品质。 二、建立标准规范&#xff0c;确保数据质量 …

CS32L010 用Keil + Jlink(或其它)烧录已有的hex文件

1. 新建一个Project 打开KEIL&#xff0c;Project-New μVision Project&#xff0c;命名并保存到某个文件夹&#xff0c;比如我命名为burn-wipi 2. 设置Output 打开Options for Target Name of Excutable设置的名称和已有的Hex文件名称相同。 3. 设置Debug选项 设置Debug方…

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

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

OpenCV如何以指定分辨率打开摄像头(C++ / Python代码演示)

问题背景 使用OpenCV打开USB摄像头时经常会遇到一个问题:我的摄像头最高分辨率是1920 * 1080,为什么用OpenCV打开摄像头保存的图片每次都是640 *480?能不能以最高分辨率打开并保存图片呢? 如何解决 首先需要确认自己的摄像头支持的最大分辨率是多少,具体步骤可以参考下…

基于ssm的车辆运输管理系统论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本车辆运输管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信息…

若依框架跑起来,Java小白入门(一)

背景 本人Java小白&#xff0c;有一点编程基础&#xff08;c#&#xff09;。企业数字化建设大环境是JAVA&#xff0c;所以需要搞起来&#xff0c;而学习最快的方式就是读代码&#xff0c;学以致用干项目。所以这个系列就是从小白看能否变成小黑。码云上有很多框架&#xff0c;…

自定义Taro上传图片hooks(useUploadImg)

有两个方法需要提前引入 FileUtil(上传文件的方法)、to&#xff08;对请求接口返回做了二次处理&#xff0c;数据和错误提示等&#xff09; //FileUtil export namespace FileUtil {const env {timeout: 10000,uploadImageUrl: "阿里云的地址",};const genPolicy …

搭载紫光展锐芯的移远通信RedCap模组顺利通过中国联通OPENLAB实验室认证

近日&#xff0c;移远通信联合紫光展锐在中国联通5G物联网OPENLAB开放实验室&#xff0c;完成了RedCap模组RG207U-CN端到端测试验收&#xff0c;并获颁认证证书。移远通信RG207U-CN成为业内率先通过联通OPENLAB认证的紫光展锐RedCap芯片平台的模组。 本次测试基于联通OPENLAB实…

网络技术基础与计算思维实验教程_4.1_PSTN和以太网互连实验

实验内容 实验目的 实验原理 关键命令说明 实验步骤 构建以太网 工作区中放置路由器 交换机 PC机 直通线互连PC0和交换机 交换机和路由器 构建PSTN 放置PSTN 放置PC 为路由器安装modem 打开电源 再为终端安装modem 单击路由器选择图形配置 这个IP地址将成为PC0的默认网关地…

跆拳道加盟培训机构管理系统源码开发方案

一、项目背景与目标 &#xff08;一&#xff09;项目背景 跆拳道加盟培训机构管理系统源码开发方案旨在为跆拳道培训机构提供一个全面、高效的管理平台&#xff0c;帮助机构实现学员管理、课程安排、财务管理等方面的自动化和信息化。 &#xff08;二&#xff09;项目可行性…

debian10安装配置vim+gtags

sudo apt install global gtags --version gtags //生成gtag gtags-cscope //查看gtags gtags与leaderf配合使用 参考: 【VIM】【LeaderF】【Gtags】打造全定制化的IDE开发环境&#xff01; - 知乎

vue:ref的作用和实例

定义&#xff1a;用来获取元素或子组件注册或者引用信息&#xff0c;父组件通过$ref获取到相应的DOM对象和子组件 1、vue中ref的作用 获取页面的DOM元素获取子组件的对象&#xff08;也是一种通信方式&#xff09; 2、实例 1、获取DOM&#xff0c;首先创建一个父页面index然…

IDEA中Git的常用使用方式

IDEA中Git的常用使用方式 1.初次拉取远程仓库项目代码到本地2.初次提交本地项目代码到远程仓库新分支方式一&#xff1a;提交时把.git目录删除掉&#xff0c;不保留以往修改记录方式二&#xff1a;提交时不删除.git目录&#xff0c;保留以往修改记录 3.日常拉取、提交、推送代码…

虚幻学习笔记20—C++中用户输入控制

一、前言 用户输入主要有鼠标和键盘以及其他的遥感外接设备等&#xff0c;在虚幻中经常会用到这些输入设备的值&#xff0c;比如通过鼠标控制摄像头的方向、键盘控制人物移动等。本文主要讲解简单的输入绑定和虚幻5新增的”增强输入控制“两种方法。 二、实现 2.1、原始的输入…