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进行了转义,只当做字符串使用)

相关推荐
DIY源码阁13 小时前
JavaSwing航班订票管理系统 - MySQL版
数据库·mysql
Xzh042313 小时前
AI Agent 学习路线(Java 后端方向)
java·人工智能·学习
我叫黑大帅13 小时前
通过php 中的Route:: 的写法了解什么是静态类调用
后端·面试·php
JS菌13 小时前
AI Agent 沙箱双层防护体系:从权限过滤到内核隔离的完整实现
前端·人工智能·后端
艾利克斯冰14 小时前
Java 设计模式-行为型模式(更新中)
java·开发语言·设计模式
倒霉蛋小马14 小时前
Java新特性:record关键字
java·开发语言
浪客灿心14 小时前
项目篇:模块设计与实现
数据库·c++
折哥的程序人生 · 物流技术专研14 小时前
《Java 100 天进阶之路》第95篇:消息队列基础(RocketMQ/Kafka)(2026版)
java·面试·kafka·rocketmq·java-rocketmq·求职招聘
budingxiaomoli14 小时前
Spring日志
java·开发语言
IT空门:门主14 小时前
Spring 注入三剑客:@Resource、@Autowired、@RequiredArgsConstructor 到底该用哪个?
java·后端·spring