prepareStatement预编译也可以sql注入

目录

1、问题

2、原因

3、修改


1、问题

代码进行sonar扫描,扫描出存在sql注入问题。 问题代码如下:

//预编译

preparedStatement = conn.prepareStatement(sql);

//参数

initQueryParams(queryParams, preparedStatement);

//查询结果

resultSet = preparedStatement.executeQuery();

2、原因

因为用到了conn.prepareStatement,就感觉已经使用了预编译,应该没有sonar问题。因此找到了质量组申诉误报,然后他们给出结论如下:

(1)sql是接口传的,可能是delete、update影响比较大

(2)sql就算是查询sql,如果sql占位符是 ${}也没有真的实现预编译

如,select *  from test where id = ${id},其实没有用到预编译

#、$区别

#预编译会替换成?, $直接进行的字符替换。

数据表或者order by后面的动态参数,必须用${},参数用#{}

如:select * from ${test} where id =#{id} order by ${order}

3、修改

(1)增加sql校验,校验sql是select语句

public static SwaggerResultUtil<String> checkSql(String sql, DbType dbType) {// 检测是否有语法错误try {SQLUtils.parseStatements(sql, dbType);SQLStatementParser parser = SQLParserUtils.createSQLStatementParser(sql, dbType);SQLStatement statement = parser.parseStatement();// 只允许查询语句if (!(statement instanceof SQLSelectStatement)) {return SwaggerResultUtil.resultError(ExceptionCodeUtil.PARAM_ERROR_CODE_I4, "必须是select语句");}} catch (Exception e) {log.error("sql有语法错误,错误信息:", e);return SwaggerResultUtil.resultError(ExceptionCodeUtil.PARAM_ERROR_CODE_I4, "sql语法错误:" + e.getMessage());}return SwaggerResultUtil.resultSuccess();
}

(2)sql做替换${},换成?

根据业务,正常通过页面访问的sql,数据表是写死的,只有参数是动态的,所以用下面替换

sql = sql.replaceAll("\\$\\{\\w*\\}", "?");

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

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

相关文章

Xfce桌面设置右键菜单:用右键打开VSCode

前言 AlmaLinux安装VSCode之后始终没有找到如何用右键菜单打开VSCode&#xff0c;比Windows麻烦多了。每次都需要先找到文件夹&#xff0c;然后用系统自带的Open In Terminal打开终端&#xff0c;再输入code .&#xff0c;才能够在当前文件夹中快速打开VSCode。那么&#xff0…

使用docker形式部署jumpserver

文章目录 前言一、背景二、使用步骤1.基础环境准备2.拉取镜像3.进行部署4.备份记录启动命令 前言 记录一下使用docker形式部署jumpserver服务的 一、背景 搭建一个jumpserver的堡垒机&#xff0c;但是发现之前是二进制文件部署的&#xff0c;会在物理机上部署污染环境&#x…

我谈正态分布——正态偏态

目录 pdf和cdf参数 标准正态分布期望和方差分布形态 3 σ 3\sigma 3σ原则 正态和偏态正态偏态瑞利分布偏度 (Skewness)峰度 (Kurtosis) 比较 正态分布的英文是Normal Distribution&#xff0c;normal是“正常”或“标准”的意思&#xff0c;中文翻译是正态&#xff0c;多完美的…

【嵌入式】STM32中的SPI通信

SPI是由摩托罗拉公司开发的一种通用数据总线&#xff0c;其中由四根通信线&#xff0c;支持总线挂载多设备&#xff08;一主多从&#xff09;&#xff0c;是一种同步全双工的协议。主要是实现主控芯片和外挂芯片之间的交流。这样可以使得STM32可以访问并控制各种外部芯片。本文…

大A终究是逃不过高开低走的魔咒

大A终究是逃不过高开低走的魔咒&#xff0c;早盘高开太多&#xff0c;周末休市&#xff0c;今天会议结束&#xff0c;各种不确定因素增加等原因导致午盘普跌。其实还是那句话&#xff0c;股市嘛&#xff0c;涨多了会跌&#xff0c;跌多了会涨&#xff0c;别急也别慌。 周末&…

知识付费小程序搭建,线上网课平台开发

我是【码云数智】平台的黄导&#xff0c;今天分享&#xff1a;知识付费小程序搭建&#xff0c;线上网课平台开发 在线网校小程序开发&#xff0c;在线教育小程序还不断优化界面设计&#xff0c;确保操作简便直观&#xff0c;无论是老人还是小孩都能轻松上手。​​ 01、小程序…

Python | Leetcode Python题解之第543题二叉树的直径

题目&#xff1a; 题解&#xff1a; class Solution:def diameterOfBinaryTree(self, root: TreeNode) -> int:self.ans 1def depth(node):# 访问到空节点了&#xff0c;返回0if not node:return 0# 左儿子为根的子树的深度L depth(node.left)# 右儿子为根的子树的深度R …

无代码开发平台smardaten R5C50 新版本更新!都做了哪些改变?

数睿数据为此次新版本做了7项体验优化、8项功能增补、1项性能优化&#xff0c;总计16个功能点。快来看看&#xff0c;哪个功能戳中你的心~ 一、体验优化 围绕smardaten搭建第一个原型并完成发布主链路&#xff0c;进行了体验优化&#xff0c;解决新手门槛高、模板使用路径长、…

175页PPTBCG某企业健康智能制造与供应链战略规划建议书

智能制造与供应链战略规划方法论是一个系统性、科学性的框架&#xff0c;旨在指导企业实现智能制造转型和供应链优化。以下是对这一方法论的核心内容的归纳和阐述&#xff1a; 一、智能制造的目标与原则 明确智能制造目标&#xff1a; 提高生产效率&#xff1a;通过引入自动…

DICOM标准:深入详解DICOM医学影像中的传输语法

引言 DICOM&#xff08;数字成像和通信医学&#xff09;标准在医学影像数据交换中扮演着至关重要的角色。其中&#xff0c;*传输语法&#xff08;Transfer Syntax&#xff09;是DICOM标准中定义数据编码和传输方式的核心部分。理解传输语法对于确保不同设备和系统之间的互操作性…

爱普生SG-8201CG可编程晶振智能门锁的核心驱动

在智能家居蓬勃发展的时代浪潮中&#xff0c;智能门锁作为智能家居的第一道防线&#xff0c;其安全性与便捷性至关重要。爱普生 SG - 8201CG 可编程晶振犹如一颗隐藏在幕后却发挥着关键作用的智慧芯片&#xff0c;为智能家居系统的高效、稳定运行提供了不可或缺的精准时钟信号。…

LLM大模型微调(lora原理)

一、微调方法介绍 1.1 Lora原理 通过低秩矩阵来降低模型训练的参数量&#xff0c;有点‘给我一个支点&#xff0c;就可以撬动地球’的感觉&#xff0c;其中矩阵的秩&#xff08;rank&#xff09;就有点像这个‘支点’的意思&#xff0c;大致原理如下&#xff1a; LoRA 的核心…

协议(OSI-tcp-udp)

目录 OSI七层协议模型 TCP/IP协议 3次握手 4次挥手 TCP VS UDP TCP和UDP分别对应的常见应用层协议 Tcp 状态机 TCP/ UDP /socket /http /webSocket 区别 RPC 和 RMI RPC与RMI的区别 Web Service SOAP&#xff08;Simple Object Access Protocol&#xff1a;简单对…

源代码防泄密管理分享

随着信息技术的快速发展&#xff0c;软件已成为现代企业不可或缺的核心资产之一。然而&#xff0c;源代码作为软件的心脏&#xff0c;其安全性直接关系到企业的核心竞争力。为了有效防止源代码泄露&#xff0c;构建一套全面且高效的源代码安全管理体系显得尤为重要。以下是六个…

2024/11/3 随笔笔记

[NOIP2001 提高组] Car 的旅行路线 题目描述 又到暑假了&#xff0c;住在城市 A 的 Car 想和朋友一起去城市旅游。 她知道每个城市都有 4 4 4 个飞机场&#xff0c;分别位于一个矩形的 4 4 4 个顶点上&#xff0c;同一个城市中两个机场之间有一条笔直的高速铁路&#xff0c…

【学习AI-相关路程-mnist手写数字分类-win-硬件:windows-自我学习AI-实验步骤-全连接神经网络(BPnetwork)-操作流程(3) 】

【学习AI-相关路程-mnist手写数字分类-win-硬件&#xff1a;windows-自我学习AI-实验步骤-全连接神经网络&#xff08;BPnetwork&#xff09;-操作流程&#xff08;3&#xff09; 】 1、前言2、前置学习&#xff08;1&#xff09;window和Linux中python寻找目录的方式。&#x…

Shortcut Learning in In-Context Learning: A Survey

为我们的综述打一打广告&#xff0c;目前是初级版本&#xff0c;欢迎各位批评指正&#xff01;后续的论文列表、测评基准会在Github更新[/(ㄒoㄒ)/~~最近比较忙容许我拖一拖] 这里是arxiv链接&#xff1a;Linking!!! Abstract&#xff1a;捷径学习是指模型在实际任务中使用简单…

ZDS 数字股票 布局全球视野,开启智能金融新篇章

在全球金融市场蓬勃发展的背景下&#xff0c;Zeal Digital Shares&#xff08;ZDS&#xff09;正迈向一个全新的发展阶段。通过采用先进技术与深度融合人工智能&#xff08;AI&#xff09;&#xff0c;ZDS 吸引了各类顶尖人才&#xff0c;不仅推动了创新金融服务的建设&#xf…

Linux常用命令

常用命令&#xff1a; pwd、ls、cd mkdir&#xff0c;rmdir touch、cp rm、mv cat、more、less echo head tail history ln date cal find locate grep tar -zxvf -c 产生.tar打包文件 -v 显示详细信息 -f 指定压缩后的文件名 -z 打包同时压缩 -x 解包.tar文件打包&#xff1a…

Chromium Mojo(IPC)进程通信演示 c++(1)

网上搜索关于mojo教程 多数都是理论 加上翻译谷歌mojo文档的&#xff0c;但是如何自定义两个进程使用mojo通信呢&#xff1f;看下面的完整例子介绍&#xff1a;&#xff08;本人也是参考谷歌代码例子改编而成&#xff09; 本文演示了client.exe和service.exe 通过mojo::Incomin…