SQL注入与预编译SQL

1、SQL注入

SQL注入:是通过操作输入的数据来修改事先定义好的SQL语句,以达到执行代码对服务器进行攻击的方法。

由于没有对用户输入进行充分检查,而SQL又是拼接而成,在用户输入参数时,在参数中添加一些SQL关键字,达到改变SQL运行结果的目的,也可以完成恶意攻击。

实行SQL注入:

用户在页面提交数据的时候人为的添加一些特殊字符,使得sql语句的结构发生了变化,最终可以在没有用户名或者密码的情况下进行登录。

2、预编译SQL

预编译SQL有两个优势:

  • 性能更高:预编译SQL,编译一次之后会将编译后的SQL语句缓存起来,后面再次执行这条语句时,不会再次编译。(只是输入的参数不同)。
  • 更安全(防止SQL注入):将敏感字进行转义,保障SQL的安全性。

3、参数占位符

在Mybatis中提供的参数占位符有两种:${...} 、#{...}

  • #{...}
    • 执行SQL时,会将#{...}替换为?,生成预编译SQL,会自动设置参数值
    • 使用时机:参数传递,都使用#{...}
  • ${...}
    • 拼接SQL。直接将参数拼接在SQL语句中,存在SQL注入问题
    • 使用时机:如果对表名、列表进行动态设置时使用

注意事项:在项目开发中,建议使用#{...},生成预编译SQL,防止SQL注入安全。

4、使用预编译SQL(参数占位符)预防SQL注入

使用预编译SQL(参数占位符)预防SQL注入:

把整个' or '1'='1作为一个完整的参数,赋值给第2个问号(' or '1'='1进行了转义,只当做字符串使用)

相关推荐
Gauss松鼠会6 分钟前
GaussDB 内存相关参数及故障诊断
运维·数据库·sql·oracle·性能优化·架构·gaussdb
Thomas.Sir13 分钟前
第6课:SpringBoot4.x 核心注解全解:Component、Bean、Scope、Lazy等IOC相关注解
java·spring boot
paopaokaka_luck15 分钟前
美食推荐系统(协同过滤算法推荐、AI助手、HanLP中文分词、 ECharts可视化分析、菜谱学习与话题交流)
java·spring boot·mysql·tomcat·echarts
开源推荐官16 分钟前
2026 年开源商城源码选型参考:技术栈、功能与适用场景梳理
java·架构·开源
斯普信专业组30 分钟前
Redis RESP3 协议规范:从入门到实战
数据库·redis·缓存
sunburn-30 分钟前
数据库操作完整教程:从基础到实战
java·数据库·mysql
文丑颜不良啊37 分钟前
LeetCode576~600题目解析
java·leetcode
bksczm1 小时前
MySQL之读写分离与分库分表
数据库·mysql
姜鱼问生1 小时前
报数据库连不上?Docker Compose 启动顺序假象:depends_on 不是万能的!
数据库·docker·容器
Linux运维技术栈1 小时前
CVE-2026-91403 高危漏洞预警:Java JSSE 信任链被攻破 全场景修复方案与Linux系统级彻底清理实操
java·linux·安全·jdk·信任链