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 域名解析
  • 广播、群发
相关推荐
洛卡卡了7 小时前
我们在用 AI 写代码时,为什么建议要好好维护 AGENTS.md 呢?
面试·agent·claude
PBitW7 小时前
GPT训练我的第三天,明白了应该咋说满分回答!😕😕😕
前端·javascript·面试
像我这样帅的人丶你还8 小时前
Java 后端详解(四):分页与搜索
java·javascript·后端
她的男孩8 小时前
数据权限为什么不能只靠注解?Forge 的 Mapper 层 SQL 改写源码拆解
java·后端·架构
tntxia8 小时前
Mybatis的日志输入
java
亦暖筑序10 小时前
Java 8老系统Browser Agent实战:三层拦截把AI操作后台变成可审计流程
java·后端·设计模式
用户2986985301413 小时前
Java 实现 Word 文档加密与权限解除
java·后端
自由路飞13 小时前
RAG 混合检索深挖:BM25 和向量分数为什么不能直接相加?
面试
Yeats_Liao13 小时前
14:Servlet中的页面跳转-Java Web
java·后端·架构
未秃头的程序猿14 小时前
告别"if-else地狱"!Java 21模式匹配,代码优雅了10倍
java·后端·面试