jdbcTemplate防止注入写法

article/2025/8/21 20:39:13

前一期写过拼接查询
https://blog.csdn.net/qq_44749121/article/details/148084689
但是会涉及到注入风险
所幸这一期给一个改进写法

在这里插入图片描述

在 Spring 框架中使用 JdbcTemplate 时,可以通过以下方式有效防止 SQL 注入:

1. 使用预编译语句(PreparedStatement)
这是最核心的防注入方式,所有动态参数都应该通过参数绑定传递

String sql = "INSERT INTO user (name, age) VALUES (?, ?)";
jdbcTemplate.update(sql, user.getName(), user.getAge());

2. 使用 NamedParameterJdbcTemplate
命名参数方式更易维护且支持重复参数

// 需要先注入 NamedParameterJdbcTemplate
@Autowired
private NamedParameterJdbcTemplate namedJdbcTemplate;public User getUser(String name) {String sql = "SELECT * FROM user WHERE name = :name";Map<String, Object> params = new HashMap<>();params.put("name", name);return namedJdbcTemplate.queryForObject(sql, params, new UserRowMapper());
}

3. 查询操作示例
普通查询

String sql = "SELECT * FROM products WHERE price > ? AND category = ?";
List<Product> products = jdbcTemplate.query(sql, new Object[]{minPrice, category}, // 参数数组new BeanPropertyRowMapper<>(Product.class)
);

IN 查询

String sql = "SELECT * FROM users WHERE id IN (:ids)";
MapSqlParameterSource params = new MapSqlParameterSource();
params.addValue("ids", Arrays.asList(1, 2, 3));List<User> users = namedJdbcTemplate.query(sql, params, new BeanPropertyRowMapper<>(User.class)
);

更新操作示例

String sql = "UPDATE orders SET status = ? WHERE order_id = ?";
jdbcTemplate.update(sql, newStatus, orderId);

4、动态条件查询

StringBuilder sql = new StringBuilder("SELECT * FROM products WHERE 1=1 ");
List<Object> params = new ArrayList<>();if (priceMin != null) {sql.append("AND price >= ? ");params.add(priceMin);
}if (category != null) {sql.append("AND category = ? ");params.add(category);
}jdbcTemplate.query(sql.toString(), params.toArray(), new BeanPropertyRowMapper<>.(Standard.class));

5、特别注意不安全写法

// ❌ 危险!字符串拼接直接嵌入用户输入
String unsafeSql = "SELECT * FROM users WHERE name = '" + userInput + "'";
jdbcTemplate.query(unsafeSql, ...);// ❌ 错误使用 LIKE
String wrongLikeSql = "SELECT * FROM users WHERE name LIKE '%" + userInput + "%'";

防御原理
参数绑定:通过 PreparedStatement 将参数值与 SQL 语句分离
自动转义:JDBC 驱动会自动处理特殊字符(如单引号转义为 ‘’)
类型安全:自动处理数据类型转换(如 Date → java.sql.Date)
最佳实践
禁用字符串拼接:永远不要将用户输入直接拼接到 SQL 中
白名单校验:对于排序字段等必须动态拼接的场景,使用白名单校验
日志监控:启用 SQL 日志,监控异常查询模式
最小权限原则:数据库账号分配最低必要权限
只要严格使用参数化查询(? 或 :paramName),即可有效防御 99% 的 SQL 注入攻击。


http://www.hkcw.cn/article/NXUfRXjiFR.shtml

相关文章

Spring AI 系列3: Promt提示词

一、Promt提示词 Promt提示是引导 AI 模型生成特定输出的输入&#xff0c; 提示的设计和措辞会显著影响模型的响应。 在 Spring AI 中与 AI 模型交互的最低层级&#xff0c;处理提示有点类似于在 Spring MVC 中管理”视图”。 这涉及创建带有动态内容占位符的大段文本。 这些占…

用 Python 模拟雪花飘落效果

用 Python 模拟雪花飘落效果 雪花轻轻飘落&#xff0c;给冬日带来一份浪漫与宁静。本文将带你用一份简单的 Python 脚本&#xff0c;手把手实现「雪花飘落效果」动画。文章深入浅出&#xff0c;零基础也能快速上手&#xff0c;完整代码仅需一个脚本文件即可运行。 目录 前言…

Linux `cp` 命令深度解析与高阶应用指南

Linux `cp` 命令深度解析与高阶应用指南 一、核心功能解析1. 基本作用2. 与类似命令对比二、选项系统详解1. 基础选项矩阵2. 高阶选项说明三、高阶应用场景1. 企业数据备份2. 容器环境部署3. 系统安全审计四、特殊文件处理1. 符号链接处理2. 稀疏文件优化五、性能优化策略1. 大…

中国寻亲网宣布将关闭服务器 25年终落幕

近日,中国寻亲网发布公告称将于2025年7月15日起停止运行并关闭服务器。公告于2025年4月1日发布,内容提到根据公司股东大会决议,公司将停止全部业务并进行注销。自2025年5月1日起,中国寻亲网将不再发布新的寻亲信息,仅提供原有信息的更改服务,直至最终关闭。对于无法继续为…

Spring代理工厂类ProxyFactory作用以及实现原理

代理工厂类ProxyFactory AdvisedSupport&#xff08;代理配置信息类&#xff09;ProxyFactory&#xff08;代理工厂类&#xff09;小结测试 源码见&#xff1a;mini-spring 在 AOP&#xff08;面向切面编程&#xff09;中&#xff0c;Spring 支持两种常见的代理机制&#xff1a…

旺店通ERP集成金蝶ERP(金蝶EAS、KIS、K3、云星空、云星辰、云星瀚)

对接说明 旺店通ERP完成所有供应链业务单向同步到金蝶ERP进行成本核算和生成财务凭证&#xff1a; 旺店通ERP货品数据同步至金蝶ERP物料档案旺店通ERP供应商数据同步至金蝶ERP供应商档案旺店通ERP店铺数据同步至金蝶ERP客户档案旺店通ERP仓库数据同步至金蝶ERP仓库档案旺店通…

美国年轻人遭遇“求职寒冬” 就业市场冻结

5月23日,美国加利福尼亚州奥兰治,查普曼大学毕业生参加了毕业典礼。从5月到6月,美国大学迎来了毕业季。来自政府、研究机构和招聘平台的数据揭示了一个令年轻人不安的事实:求职者,尤其是职场新人,面临异常激烈的就业市场。CNBC报道指出,应届毕业生发现劳动力市场比几个月…

俄罗斯一副市长遭人肉炸弹袭击死亡 俄乌冲突背景下的悲剧

俄罗斯一副市长遭人肉炸弹袭击死亡 俄乌冲突背景下的悲剧!5月28日,俄罗斯斯塔夫罗波尔市副市长古尔齐耶夫遭遇爆炸袭击身亡。事发时,一名熟人走近古尔齐耶夫,随后该熟人携带的包发生爆炸。爆炸导致34岁的古尔齐耶夫和29岁的熟人身亡,这名男子在事发地附近租了一套公寓。古…

ArkUI(方舟UI框架)介绍

ArkUI&#xff08;方舟UI框架&#xff09;介绍 构建快速入门 使用ArkWeb构建页面

对话云蝠智能魏佳星:大模型呼叫如何重塑智能营销未来?

在数字化浪潮席卷全球的当下&#xff0c;智能营销已然成为企业角逐市场的关键 “武器”。而云蝠智能&#xff0c;作为行业内的 “弄潮儿”&#xff0c;正凭借创新技术引领着这一领域的变革。近日&#xff0c;我们有幸与云蝠智能创始人魏佳星展开深度对话&#xff0c;一同探寻云…

3条警犬退役训导员湿了眼眶 无言战友光荣卸甲

“立正!敬礼!”猎狐、涛涛、巴依从今天开始光荣退役。感谢它们用忠诚和无畏为昭通公安做出的突出贡献。近日,在云南省昭通市公安局警犬基地训练场上,民警辅警庄严敬礼,向三位特殊的战友——警犬“猎狐”“涛涛”“巴依”致以最高礼遇。这场催人泪下的退役仪式为它们的职业…

聊聊 Metasploit 免杀

各位小伙伴们&#xff0c;晚上好&#xff01; 咱们今天打开宵夜“安全食材箱”&#xff0c;聊聊渗透测试绕过杀毒&#xff08;免杀&#xff09;的那些门道。你可以把免杀理解为——深夜做宵夜时&#xff0c;家里有人睡觉&#xff0c;但你非得去厨房整点美食&#xff0c;还不能…

4 串电池保护芯片创芯微CM1341-DAT使用介绍

特性 专用于 4 串锂/铁/钠电池的保护芯片&#xff0c;内置有高精度电压检测电路和电流检测电路。通过检测各节电池的电压、充放电电流及温度等信息&#xff0c;实现电池过充电、过放电、均衡、断线、低压禁充、放电过电流、短路、充电过电流和过温保护等功能&#xff0c;放电过…

SAP销售订单批导创建

一、功能描述 用户导出极简的导入模板,并填写相关业务数据,后导入SAP,系统读取文件,并进行前端展示,通过程序进行测试执行,无误后保存生成的销售订单 二、FS简介 FS包含前端界面,功能设计与字段写入逻辑 前端界面 功能设计 写入字段 三、代码片段 获取ALV中的鼠…

【AI预测】5月30日尼克斯大战前瞻:东部黑马能否再下一城?

&#x1f3c0; 随着赛季进入白热化阶段&#xff0c;5月30日尼克斯的这场比赛注定焦点十足。作为东部近年来少有的“黑马型”球队&#xff0c;尼克斯用硬朗的防守和团队配合让人重新认识了这支老牌劲旅。 这篇文章&#xff0c;我们将从数据模型球员表现战术执行力三个维度&…

李翔担任北京女篮主教练 挖掘内部潜力

北京首钢篮球俱乐部于5月29日宣布,原北京首钢男篮助理教练李翔将担任北京首钢女篮主教练。在2024-2025赛季中国女子篮球联赛(WCBA)中,北京首钢女篮止步季后赛首轮,球队正积极备战全运会和新赛季的比赛。北京首钢篮球俱乐部常务副总经理张云松指出,任命李翔为女篮主教练旨…

永坤黄金出现大规模兑付异常 投资者损失惨重

5月15日,林明像往常一样打开永坤黄金的线上平台,点击“黄金提现”按钮。按照以往三年的操作,资金会在交易发生日后第三个工作日到账。然而到了5月20日,他的银行账户仍未收到款项。与此同时,投资者婷婷也被业务员告知她在线下购买的永坤黄金可能无法提取。2025年初,她在永…

《Pytorch深度学习实践》ch1-线性模型

------B站《刘二大人》 1.Machine Learning 训练集&#xff0c;测试集&#xff1b;开发集&#xff1a;将训练集拆分为&#xff08;训练集&#xff0c;开发集&#xff09;&#xff0c;用来测试泛化的能力&#xff0c;模型的评估&#xff1b;监督学习&#xff1a;利用一组已知类…

2025年数字经济与绿色金融国际会议:智能金融与可持续发展的创新之路

会议简介 第二届数字经济与绿色金融国际会议即将召开。本次盛会将聚集全球范围内的经济学家、金融科技专家、政策制定者及企业领袖&#xff0c;共同探讨数字经济发展趋势下绿色金融体系构建的关键议题。会议围绕如何利用大数据、区块链、云计算等前沿信息技术推动传统金融业转型…

区间DP概述(JAVA)

区间DP 概述例题例题一 更小的数例题二 能量项链 概述 区间DP和线性DP其实从代码角度来说就是遍历处理的顺序不一样 合并&#xff1a;即将两个或多个部分进行整合&#xff0c;也可以反过来&#xff1b; 特征&#xff1a;能将问题分解为能两两合并的形式&#xff1b; 求解&am…