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 域名解析
  • 广播、群发
相关推荐
-银雾鸢尾-3 小时前
C#中的拓展方法
开发语言·c#
guodingdingh5 小时前
软件开发工作问题总结0718
java·开发语言·数据库
咖啡八杯6 小时前
GoF设计模式——解释器模式
java·后端·spring·设计模式
优橙教育6 小时前
5G网优培训 vs Java开发:转行选哪个?
java·开发语言·5g
糖果店的幽灵7 小时前
【DeepAgents 从入门到精通】Context Management 上下文管理
java·人工智能·后端·spring·中间件·langgraph·deepagents
腻害兔8 小时前
【若依项目-产品经理视角】RuoYi-Vue-Pro 源码拆解:字典、短信、邮件、通知——后台系统的“基础设施四件套“!
java·前端·vue.js·产品经理·ai编程
SeaTunnel8 小时前
从 Python Script 地狱到标准化数据集成框架
大数据·开发语言·python·程序员·代码·seatunnel
碎光拾影9 小时前
ARM交叉工具链各工具作用及IMX6ULL平台LED+蜂鸣器裸机程序实现
java·开发语言·数据库
Marst Code9 小时前
(python)2026Plotly 库评估:交互式可视化到底值不值得引入?
开发语言·python
Miao121319 小时前
微服务 API 测试实践:海外某民宿平台如何构建模式驱动测试基础设施
java·开发语言