SQL注入攻击
SQL 注入攻击(考点速记)
1. 定义
用户恶意拼接 SQL 语句,绕过验证、篡改 / 窃取数据库数据的攻击方式。
2. 攻击原理
后台直接拼接前端传入参数拼接 SQL,未做过滤,用户输入非法字符改变原 SQL 逻辑。
sql
select * from user where username='${name}' and password='${pwd}'
输入用户名:' or 1=1 -- 拼接后语句恒成立,无需密码直接登录
3. 危害
- 非法登录后台
- 盗取数据库全部数据
- 删除 / 修改数据表、库
- 拖库泄露用户信息
4. 产生原因
- 使用Statement静态拼接 SQL
- 未过滤特殊字符:
' " or and -- # - 直接接收前端参数拼语句
5. 防御手段(重点)
- 优先使用 PreparedStatement 预编译对象(最有效) 预编译 SQL 结构固定,参数仅做值传递,无法改变语法
- 后端过滤非法关键字:or、and、union、delete、drop 等
- 开启数据库权限最小化
- 前端 + 后端双重参数校验
- 使用 ORM 框架:MyBatis、MyBatis-Plus
6. 面试简答
SQL 注入是利用程序直接拼接用户参数构造恶意 SQL,入侵数据库;核心防御用预编译 PreparedStatement,杜绝字符串拼接 SQL。
如何防止SQL注入攻击
-
使用 PreparedStatement 预编译对象(最核心) SQL 语句提前编译,参数单独传入,无法篡改 SQL 结构,彻底杜绝注入。
-
杜绝字符串拼接 SQL 不要直接把用户输入拼进 SQL 语句。
-
参数统一使用占位符 用
?占位传参,不用 ${} 拼接。 -
后端严格校验过滤 过滤
' " or and union delete drop等恶意关键字与特殊符号。 -
权限最小化 数据库账号只给业务必需权限,禁止删库删表等高权限。
-
使用框架 MyBatis、MyBatis-Plus、JPA 等 ORM 框架自带防注入。
-
关闭数据库错误详情输出 避免报错泄露表名、字段名。
-
前端做输入长度、格式限制 前后端双重校验。
面试最简答案 优先使用PreparedStatement 预编译,采用占位符传参,禁止拼接 SQL,后端过滤非法字符,搭配 ORM 框架、缩小数据库权限,即可有效防止 SQL 注入。
计算机网络传输层有哪些协议?分别适用于什么场景?
一、两大核心协议
- TCP 传输控制协议
- UDP 用户数据报协议
二、TCP 特点 + 适用场景
特点
- 面向连接,先建立连接再传输
- 可靠传输:确认应答、重传、排序、流量控制、拥塞控制
- 有序、无丢失、无重复
- 速度慢,开销大
适用场景(必须可靠)
- 网页浏览 HTTP/HTTPS
- 文件传输 FTP
- 邮件 SMTP/POP3
- 远程登录 SSH/Telnet
- 数据库连接、聊天文件发送
三、UDP 特点 + 适用场景
特点
- 无连接,直接发数据,不用建立连接
- 不可靠:不重传、不确认、丢包不管
- 速度快、延迟低、开销小
适用场景(追求速度,可丢少量包)
- 视频通话、直播
- 网络游戏
- 语音通话
- 视频播放
- DNS 域名解析
- 广播、群发