fortify安全扫描Access Control: Database问题解决
概述
Access Control: Database说白了就是权限控制。在访问数据库(sql和nosql)需要加入当前用户的权限控制。不然会被fortify扫描出来,认为客户端可能不挟持和假冒,从而导致数据被泄露。 但是这个并不是任何时候都需要的,有的接口本来就是可以任意访问的。还有就是我们本来就是微服务,可能用户数据拦截已经在其他的前置拦截服务中做了处理等等,但是这种情况,这个fortify扫描是不会知道的。
这就导致,每一次做安全扫描都会有一堆问题需要改。这里就探讨一下如何解决这个问题。
解决方式
其实最本质的方法就是在代码中从springboot框架中获取当前用户,这样就能解决,但是这个方法有时候我们没有或者并不需要。
那么就只有另一种方法,迷惑它。让fortify觉得我们已经对参数做了处理,并不是原来的数据了。
通过查找资料和多次测试。我找到了两种方式。这里不讨论代码的可读性和其他,就只保证改完了之后能用还不被扫描出来。当然这只是我测试出来的方法。
第一种:反射代理
通过反射的方式就是利用java的特性,让fortify找不到具体的实现,这样就只能被认为没有问题。
import java.lang.reflect.Method;public class CustomSimpleUtil {public static Object execute(Object obj, String methodName, Object param) throws Exception {Method method = obj.getClass().getMethod(methodName);ReflectionUtils.makeAccessible(method);Object result = method.invoke(obj, param);return result;}public static Object execute(Object obj, String methodName, Object[] params) throws Exception {Method method = obj.getClass().getMethod(methodName, paramClasses);ReflectionUtils.makeAccessible(method);Object result = method.invoke(obj, params);return result;}
}
第二种:就是绕行
这种方法原理就是通过假装处理了输入的参数来骗过fortify。就是将原来的参数包装起来在转换回去。
先建一个包装类:
import lombok.Data;import java.util.List;@Data
public class DetourDto {private Object originData;private Integer type;public DetourDto(Object originData){if(originData instanceof Integer){type = 1;}else if(originData instanceof Long){type = 2;}else if(originData instanceof Short){type = 3;}else if(originData instanceof Double){type = 4;}else if(originData instanceof Float){type = 5;}else if(originData instanceof List){type = 6;}else if(originData instanceof String []){type = 7;} else {type = 8;}}public Object getDetourValue(){if(type ==1){return (Integer)originData;}else if(type == 2){return (Long)originData;}else if(type == 3){return (Short)originData;}else if(type == 4){return (Double)originData;}else if(type == 5){return (Float)originData;}else if(type == 6){return (List)originData;}else if(type == 7){return (String[])originData;}else{return originData;}}
}
这个包装类,可以减少if判断,避免高并发时浪费性能。
在建一个工具类,用于创建包装类,获取包赚后的参数
import com.xxxx.DetourDto;import java.lang.reflect.Method;
import java.util.function.Function;
import java.util.function.Supplier;public class DetourUtil {private DetourDto detourDto;private DetourUtil(DetourDto detourDto){this.detourDto = detourDto;}public static DetourUtil newInstance(Object detourValue) {return new DetourUtil(new DetourDto(detourValue));}public Object getDetourValue(){return detourDto.getDetourValue();}
}
最后再通过,强转得到新的参数:
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;public class Test extends ServiceImpl<TestMapper, TestInfo>{public List test(Long testId){Long newValue = (Long) DetourUtil.newInstance(testId).getDetourValue();return getBaseMapper().getDetail(newValue);}
}
经过测试,以上方式可以绕过fotify的检测。
相关文章:
fortify安全扫描Access Control: Database问题解决
概述 Access Control: Database说白了就是权限控制。在访问数据库(sql和nosql)需要加入当前用户的权限控制。不然会被fortify扫描出来,认为客户端可能不挟持和假冒,从而导致数据被泄露。 但是这个并不是任何时候都需要的,有的接口本来…...
Java 设计模式:软件开发的精髓与艺
目录 一、设计模式的起源二、设计模式的分类1. 创建型模式2. 结构型模式3. 行为型模式三、设计模式的实践1. 单例模式2. 工厂模式3. 策略模式四、设计模式的优势五、设计模式的局限性六、总结在软件开发的浩瀚星空中,设计模式犹如一颗颗璀璨的星辰,照亮了开发者前行的道路。它…...
初学者如何用 Python 写第一个爬虫?
?? 欢迎来到我的博客! 非常高兴能在这里与您相遇。在这里,您不仅能获得有趣的技术分享,还能感受到轻松愉快的氛围。无论您是编程新手,还是资深开发者,都能在这里找到属于您的知识宝藏,学习和成长。 ?? …...
Cocos Creator3.8.6拖拽物体的几种方式
文章目录 前言一、第一种通过UILocation二、第二种通过UIDelta实现总结 前言 在游戏开发中,拖拽物体是一个非常常见的交互功能,无论是用于UI元素的拖动,还是场景中物体的移动,拖拽操作都能极大地提升用户体验。Cocos Creator 3.8…...
分布式Session
我用「餐厅点餐代码实战」帮你彻底搞懂分布式Session,看完不仅能应对面试,还能直接应用到实际开发。先记住这个核心矛盾:多服务员如何记住同一顾客的喜好? 一、从生活场景理解Session的本质 传统单机场景(小餐馆&…...
Kotlin 运算符重载
在Kotlin中,常用的运算符重载函数名如下: 1.算术操作符: 加法:plus 减法:minus 乘法:times 除法:div 取模:rem 或 mod 整数除法:floorDiv 求幂:pow 自增&…...
OpenHarmony4.1-轻量与小型系统ubuntu开发环境
因OpenHarmony官网提供包含轻量、小型与标准系统的全量代码非常宠大,解包后大概需要70G以上硬盘空间,如要编译标准系统则需要140G以上空间。 如硬盘空间有限与只使用轻量/小型OpenHarmony系统,则可以下载并直接使用本人裁剪源码过的ubuntu硬盘…...
AVR 单片机硬件供电处理
摘自AVR 单片机应用笔记:AN2519 - AVR Microcontroller Hardware Design Considerations。 2. 供电 供电设计是任何硬件设计的关键一环,直接影响到系统的性能。在设计供电时,有两个重要的方面需要考虑:ESD 防护和噪声干扰。这些内…...
LeetCode 27 移除元素
LeetCode 27 - 移除元素(Remove Element)是一个简单但经典的双指针问题,主要考察数组操作的基本功。虽然问题容易,但掌握多种解法以及衍生的变体问题对解决更复杂的操作数组问题有帮助。 题目描述 输入:整数数组 nums…...
对“预训练”的理解
预训练有什么用 传统的机器学习是偏数学的,对数据的量不做过多要求,而深度学习的项目通常是有大量的数据可供使用。 在平常的任务或者项目中,我们可能并没有大量数据,只有少量数据,在这时我们就可以通过“借用”有大…...
论文阅读:CAN GENERATIVE LARGE LANGUAGE MODELS PERFORM ASR ERROR CORRECTION?
CAN GENERATIVE LARGE LANGUAGE MODELS PERFORM ASR ERROR CORRECTION? 生成式大语言模型能否进行自动语音识别(ASR)纠错? https://arxiv.org/pdf/2307.04172 文章目录 速览常规总结通俗版 摘要(Abstract)2. 引言&a…...
Stable Diffusion(SD)系列模型及关联算法深度解析
一、基础模型架构演进 SD v1.5 核心架构:基于Latent Diffusion Model(LDM),通过VAE将图像压缩至潜空间进行扩散训练,支持512x512分辨率生成,兼容二次元与写实风格混合创作12。 训练数据&…...
FPGA开发,使用Deepseek V3还是R1(3):系统级与RTL级
以下都是Deepseek生成的答案 FPGA开发,使用Deepseek V3还是R1(1):应用场景 FPGA开发,使用Deepseek V3还是R1(2):V3和R1的区别 FPGA开发,使用Deepseek V3还是R1&#x…...
logback日志输出配置范例
logback日志输出配置范例 在wutool中,提供了logback日志输出配置范例,实现日志文件大小限制、滚动覆盖策略、定时清理等功能。 关于wutool wutool是一个java代码片段收集库,针对特定场景提供轻量解决方案,只要按需选择代码片段…...
【开源免费】基于SpringBoot+Vue.JS酒店管理系统(JAVA毕业设计)
本文项目编号 T 224 ,文末自助获取源码 \color{red}{T224,文末自助获取源码} T224,文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…...
Unity中动态切换光照贴图LightProbe的方法
关键代码:LightmapSettings.lightmaps lightmapDatas; LightmapData中操作三张图:lightmapColor,lightmapDir,以及一张ShadowMap 这里只操作前两张: using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI;public cl…...
linux(2)用户管理
文章目录 1. 切换用户2. 添加删除用户3.写改密码 1. 切换用户 # 切换用户名,不切换工作目录 su 用户名 # 一起切换工作目录 su - 用户名 # 退出用户 exit2. 添加删除用户 # 添加用户 sudo adduser username # 推荐sudo useradd -m -s /bin/bash 用户名-m 如果创建…...
在鸿蒙HarmonyOS手机上安装hap应用
一、下载工具 安装hap包需要用到小工具 。 二、解压到目录后,进入该文件夹,打开命令行,如下图 三、将下载好的hap包放入刚才解压的文件夹内(假设hap包文件名为app.hap) 四、连接好手机和电脑,手机需要打…...
MacBook Pro使用FFmpeg捕获摄像头与麦克风推流音视频
FFmpeg查看macos系统音视频设备列表 ffmpeg -f avfoundation -list_devices true -i "" 使用摄像头及麦克风同时推送音频及视频流: ffmpeg -f avfoundation -pixel_format yuyv422 -framerate 30 -i "0:1" -c:v libx264 -preset ultrafast -b:v 1000k -…...
工程化与框架系列(8)--持续集成实践
持续集成实践 🔄 持续集成(Continuous Integration,简称CI)是现代前端开发流程中的重要环节,它通过自动化构建、测试和部署,帮助团队更快速、更可靠地交付高质量代码。本文将详细介绍前端持续集成的实践方…...
Creality Print:从新手到专家的完整3D打印切片软件指南
Creality Print:从新手到专家的完整3D打印切片软件指南 【免费下载链接】CrealityPrint 项目地址: https://gitcode.com/gh_mirrors/cr/CrealityPrint 在3D打印的世界里,切片软件是连接数字模型与物理实体的关键桥梁。无论您刚刚接触3D打印&…...
清华PPT模板:如何在5分钟内打造专业学术演示文稿
清华PPT模板:如何在5分钟内打造专业学术演示文稿 【免费下载链接】THU-PPT-Theme 清华主题PPT模板 项目地址: https://gitcode.com/gh_mirrors/th/THU-PPT-Theme 还在为学术汇报PPT设计而烦恼吗?面对即将到来的答辩、会议或课堂展示,你…...
凡亿AD最小系统板--元件模型组成介绍
一、课程整体概述原理图库创建是PCB设计流程的第二步核心工作,也是电子设计建模的源头工序。所有电路板上的电子元器件,都需要先在原理图库中绘制对应的电气模型,才能完成后续原理图绘制、封装匹配、PCB布局布线等操作。本系列课程将通过多类…...
10分钟搭建个人游戏云:Sunshine开源游戏串流服务器完全指南
10分钟搭建个人游戏云:Sunshine开源游戏串流服务器完全指南 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine 你是否梦想过在任何设备上畅玩PC游戏?想要在客厅…...
跳出传统 RAG!用 LLM Wiki 构建闭环式产品 Agent 协作体系
这段时间我在了解 LLM Wiki 之后,把它当成一套「私域知识库 Agent 工作流」的底座,做了一次具体实践。这篇文章主要想记录我对 LLM Wiki 的理解,以及我怎么基于这套思路去构建一个产品 Agent:知识库如何组织,产品工作…...
PowerToys汉化指南:3步让英文效率工具变成你的中文助手
PowerToys汉化指南:3步让英文效率工具变成你的中文助手 【免费下载链接】PowerToys-CN PowerToys Simplified Chinese Translation 微软增强工具箱 自制汉化 项目地址: https://gitcode.com/gh_mirrors/po/PowerToys-CN 你是不是曾经因为PowerToys的英文界面…...
手把手教你用USB ISP下载器给Arduino Nano烧写Bootloader(含ProgISP软件详细配置)
手把手教你用USB ISP下载器为Arduino Nano烧录Bootloader 当你拿到一块全新的Arduino Nano开发板,或是遇到程序无法上传的"变砖"情况时,很可能需要重新烧写Bootloader。Bootloader是存储在微控制器中的一小段特殊程序,它负责与Ard…...
OBS Source Record:解锁视频源独立录制的技术乐高
OBS Source Record:解锁视频源独立录制的技术乐高 【免费下载链接】obs-source-record 项目地址: https://gitcode.com/gh_mirrors/ob/obs-source-record 想象一下,你在OBS Studio中精心布置了一个包含摄像头、游戏画面和PPT演示的复杂场景&…...
重塑AI代理的数据智能:Wren AI如何构建开放上下文层
重塑AI代理的数据智能:Wren AI如何构建开放上下文层 【免费下载链接】WrenAI Turn any AI Agents into world-class data analysts through the open context layer that gives AI agents grounded, governed memory, context, SQL across 20 data sources, that he…...
终极指南:如何用TrollInstallerX快速解锁iOS系统自由
终极指南:如何用TrollInstallerX快速解锁iOS系统自由 【免费下载链接】TrollInstallerX A TrollStore installer for iOS 14.0 - 16.6.1 项目地址: https://gitcode.com/gh_mirrors/tr/TrollInstallerX 想要打破iOS系统的限制,安装更多个性化应用…...
