java面试

SQL注入攻击

SQL 注入攻击(考点速记)

1. 定义

用户恶意拼接 SQL 语句,绕过验证、篡改 / 窃取数据库数据的攻击方式。

2. 攻击原理

后台直接拼接前端传入参数拼接 SQL,未做过滤,用户输入非法字符改变原 SQL 逻辑。

sql 复制代码
select * from user where username='${name}' and password='${pwd}'

输入用户名:' or 1=1 -- 拼接后语句恒成立,无需密码直接登录

3. 危害

  1. 非法登录后台
  2. 盗取数据库全部数据
  3. 删除 / 修改数据表、库
  4. 拖库泄露用户信息

4. 产生原因

  • 使用Statement静态拼接 SQL
  • 未过滤特殊字符:' " or and -- #
  • 直接接收前端参数拼语句

5. 防御手段(重点)

  1. 优先使用 PreparedStatement 预编译对象(最有效) 预编译 SQL 结构固定,参数仅做值传递,无法改变语法
  2. 后端过滤非法关键字:or、and、union、delete、drop 等
  3. 开启数据库权限最小化
  4. 前端 + 后端双重参数校验
  5. 使用 ORM 框架:MyBatis、MyBatis-Plus

6. 面试简答

SQL 注入是利用程序直接拼接用户参数构造恶意 SQL,入侵数据库;核心防御用预编译 PreparedStatement,杜绝字符串拼接 SQL。

如何防止SQL注入攻击

  1. 使用 PreparedStatement 预编译对象(最核心) SQL 语句提前编译,参数单独传入,无法篡改 SQL 结构,彻底杜绝注入。

  2. 杜绝字符串拼接 SQL 不要直接把用户输入拼进 SQL 语句。

  3. 参数统一使用占位符?占位传参,不用 ${} 拼接。

  4. 后端严格校验过滤 过滤 ' " or and union delete drop 等恶意关键字与特殊符号。

  5. 权限最小化 数据库账号只给业务必需权限,禁止删库删表等高权限。

  6. 使用框架 MyBatis、MyBatis-Plus、JPA 等 ORM 框架自带防注入。

  7. 关闭数据库错误详情输出 避免报错泄露表名、字段名。

  8. 前端做输入长度、格式限制 前后端双重校验。

面试最简答案 优先使用PreparedStatement 预编译,采用占位符传参,禁止拼接 SQL,后端过滤非法字符,搭配 ORM 框架、缩小数据库权限,即可有效防止 SQL 注入。

计算机网络传输层有哪些协议?分别适用于什么场景?

一、两大核心协议

  1. TCP 传输控制协议
  2. UDP 用户数据报协议

二、TCP 特点 + 适用场景

特点

  • 面向连接,先建立连接再传输
  • 可靠传输:确认应答、重传、排序、流量控制、拥塞控制
  • 有序、无丢失、无重复
  • 速度慢,开销大

适用场景(必须可靠)

  • 网页浏览 HTTP/HTTPS
  • 文件传输 FTP
  • 邮件 SMTP/POP3
  • 远程登录 SSH/Telnet
  • 数据库连接、聊天文件发送

三、UDP 特点 + 适用场景

特点

  • 无连接,直接发数据,不用建立连接
  • 不可靠:不重传、不确认、丢包不管
  • 速度快、延迟低、开销小

适用场景(追求速度,可丢少量包)

  • 视频通话、直播
  • 网络游戏
  • 语音通话
  • 视频播放
  • DNS 域名解析
  • 广播、群发
相关推荐
kyriewen41 分钟前
我把今年流传的前端 AI 面试题整理了一遍——4 类场景题+回答框架(附速查表)
前端·面试·程序员
AEI3 小时前
四年间大模型的演进历程
人工智能·面试·程序员
古法安卓3 小时前
Android-日志系统源码解析
android·java·android studio
小夏coding4 小时前
从"一把梭"到"精妙拆解" —— 滑动窗口计时框架的设计演进
java·后端
MacroZheng5 小时前
同事问我:"Claude Code经常失忆,不怕它把项目搞炸?",我:"怕,三个Markdown文件给它装个永不丢失的外置大脑!"
java·人工智能·后端
学习星球6 小时前
OFDM技术精讲:正交性推导、循环前缀原理与80行Python链路仿真(附实测数据)
算法·面试·前端框架
十年Java程序媛7 小时前
深度实战:JDK21 虚拟线程 + HikariCP 生产正确配比、坑点、监控全套
java·spring boot
xiaoqiMikko7 小时前
有人在搜一个不存在的 Tomcat 版本
java·tomcat
用户31268748772010 小时前
ConcurrentHashMap 怎么保证线程安全?从分段锁到 CAS+synchronized
java
vipxieliang10 小时前
ValidX vs Apache Commons Validator:功能与性能对比
java·spring boot