安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。
目录
二十、TCP三次握手与四次挥手
二十一、TCP为何三次握手?
二十二、DNS解析原理
二十三、完整HTTP请求过程
二十四、Cookies vs Session
二十五、GET vs POST
二十六、HTTP vs HTTPS
二十七、Session工作原理
二十八、HTTP长连接 vs 短连接
二十九、OSI七层模型
三十、TCP粘包/拆包
三十一、TCP可靠传输机制
三十二、URI vs URL
三十三、SSL/TLS协议
三十四、HTTPS安全机制
三十五、TCP/UDP应用层协议
三十六、HTTP状态码分类
三十七、Web攻击防御策略
三十八、SQL注入攻击
三十九、SQL注入防御实战
二十、什么是三次握手四次挥手?
二十一、tcp 为什么要三次握手?
二十二、dns 是什么?dns 的工作原理
二十三、一次完整的 HTTP 请求过程
二十四、Cookies 和 session 区别
二十五、GET 和 POST 的区别
二十六、HTTPS 和 HTTP 的区别
二十七、session 的工作原理?
二十八、http 长连接和短连接的区别
二十九、OSI 的七层模型都有哪些?
三十、session 的工作原理?什么是 TCP 粘包/拆包?发生原因?解决方案
三十一、TCP 如何保证可靠传输?
三十二、URI 和 URL 的区别
三十三、什么是 SSL ?
三十四、https 是如何保证数据传输的安全(SSL 是怎么工作保证安全的)
三十五、TCP 对应的应用层协议,UDP 对应的应用层协议
三十六、常见的状态码有哪些?
三十七、防范常见的 Web 攻击
三十八、什么是 SQL 注入攻击
三十九、攻击者在 HTTP 请求中注入恶意的 SQL 代码,服务器使用参数构建数据库 SQL 命令时,恶意
二十、TCP三次握手与四次挥手
- 三次握手(建立连接)
- SYN:客户端发送
SYN=1, seq=x
- SYN+ACK:服务端回复
SYN=1, ACK=1, seq=y, ack=x+1
- ACK:客户端确认
ACK=1, seq=x+1, ack=y+1
目的:同步序列号,验证双向通信能力。
- 四次挥手(断开连接)
- FIN:主动方发送
FIN=1, seq=u
- ACK:被动方回复
ACK=1, ack=u+1
- FIN+ACK:被动方发送
FIN=1, ACK=1, seq=v, ack=u+1
- ACK:主动方确认
ACK=1, seq=u+1, ack=v+1
原因:TCP支持半关闭(half-close),需双方独立确认终止。
二十一、TCP为何三次握手?
- 核心目的:防止已失效的连接请求导致资源浪费
- 关键风险:若采用两次握手,网络延迟的旧
SYN
包可能被服务端误认为新请求,建立无效连接
- 三次握手必要性:
- 确保双方收发能力正常(双向验证)
- 同步初始序列号(ISN),避免数据混淆
二十二、DNS解析原理
- DNS定义:域名系统(Domain Name System),将域名映射为IP地址
- 工作流程:
mermaidgraph LR A[浏览器缓存] --> B[操作系统缓存] B --> C[路由器缓存] C --> D[本地DNS服务器] D --> E[根域名服务器] E --> F[顶级域服务器 .com] F --> G[权威域名服务器]
- 递归查询:客户端→本地DNS
- 迭代查询:本地DNS→根域→顶级域→权威域
二十三、完整HTTP请求过程
- DNS解析:域名→IP
- TCP连接:与目标IP三次握手
- 发送HTTP请求:请求头+请求体
- 服务器处理:路由→业务逻辑→数据库交互
- 服务器响应:状态码+响应头+响应体
- 浏览器渲染:解析HTML→构建DOM树→渲染页面
- 连接关闭:TCP四次挥手
二十四、Cookies vs Session
特性 |
Cookies |
Session |
存储位置 |
客户端 |
服务端 |
安全性 |
较低(可篡改) |
较高 |
数据大小限制 |
≤4KB |
无限制(受服务器内存约束) |
生命周期 |
可设置过期时间 |
会话结束或超时销毁 |
使用场景 |
保存登录状态、用户偏好 |
存储敏感数据(用户ID等) |
二十五、GET vs POST
对比维度 |
GET |
POST |
数据位置 |
URL查询字符串 |
请求体(Body) |
安全性 |
低(历史记录可见) |
较高(HTTPS下) |
数据长度限制 |
受URL长度限制(约2KB) |
无限制 |
缓存 |
可缓存 |
不可缓存 |
幂等性 |
幂等(多次执行结果相同) |
非幂等 |
二十六、HTTP vs HTTPS
特性 |
HTTP |
HTTPS |
协议 |
应用层 |
HTTP + SSL/TLS(传输层加密) |
端口 |
80 |
443 |
加密 |
明文传输 |
对称+非对称混合加密 |
证书 |
无需 |
需CA认证的数字证书 |
性能开销 |
低 |
高(加密/解密消耗CPU) |
二十七、Session工作原理
- 创建:用户首次访问时,服务端生成唯一
Session ID
- 存储:
Session ID
通过Cookie返回浏览器(如JSESSIONID
)
- 会话数据存储在服务端(内存/Redis/数据库)
- 验证:后续请求携带
Session ID
,服务端匹配数据
- 销毁:超时(默认30分钟)或主动调用
session.invalidate()
二十八、HTTP长连接 vs 短连接
类型 |
短连接(HTTP/1.0) |
长连接(HTTP/1.1+) |
连接复用 |
每次请求后关闭TCP连接 |
保持连接复用多次请求(Keep-Alive) |
性能开销 |
高(频繁握手挥手) |
低 |
适用场景 |
低频请求 |
高频请求(如网页加载多资源) |
默认行为 |
非默认 |
HTTP/1.1默认开启 |
二十九、OSI七层模型
层级 |
名称 |
核心协议/设备 |
功能 |
7 |
应用层 |
HTTP, FTP, DNS |
用户接口(数据单位:报文) |
6 |
表示层 |
SSL, JPEG |
数据格式转换、加密 |
5 |
会话层 |
NetBIOS |
建立/管理会话 |
4 |
传输层 |
TCP, UDP |
端到端连接(数据单位:段) |
3 |
网络层 |
IP, Router |
路由寻址(数据单位:包) |
2 |
数据链路层 |
Ethernet, Switch |
帧传输、MAC寻址 |
1 |
物理层 |
RJ45, Fiber |
比特流传输 |
三十、TCP粘包/拆包
- 现象:接收方读取的数据包不完整(粘包)或拆分(拆包)
- 原因:
- 粘包:发送方频繁发送小包 → 接收缓冲区合并
- 拆包:包大小超过TCP缓冲区/MSS(最大报文段长度)
- 解决方案:
- 定长协议:固定每个包长度(如512字节)
- 分隔符:用特殊字符标记结束(如
\n
)
- 长度字段:包头声明数据长度(如HTTP头
Content-Length
)
三十一、TCP可靠传输机制
- 校验和:验证数据完整性
- 序列号与ACK:确认数据有序到达
- 重传机制:超时重传(RTO) + 快速重传(重复ACK)
- 流量控制:滑动窗口(接收方控制发送速率)
- 拥塞控制:慢启动 → 拥塞避免 → 快重传 → 快恢复
三十二、URI vs URL
- URI(统一资源标识符):资源的抽象标识(如
ISBN:9780143035008
)
- URL(统一资源定位符):资源的具体访问路径(如
https://example.com/book
)
所有URL都是URI,但URI不一定是URL
三十三、SSL/TLS协议
- 定义:安全套接层(Secure Sockets Layer)/传输层安全协议(Transport Layer Security)
- 作用:在传输层提供加密、认证和数据完整性保护
- 核心功能:
- 加密传输数据(防窃听)
- 验证服务器身份(防中间人攻击)
- 防止数据篡改(MAC验证)
三十四、HTTPS安全机制
- SSL/TLS握手:
- 客户端发送
ClientHello
(支持算法列表)
- 服务端回复
ServerHello
(选定算法)+ 数字证书
- 客户端验证证书有效性(CA链校验)
- 生成会话密钥:客户端用证书公钥加密预备主密钥 → 服务端私钥解密
- 双方基于预备主密钥生成对称加密密钥
- 数据传输:使用对称密钥加密通信(如AES)
三十五、TCP/UDP应用层协议
传输层 |
协议示例 |
特点 |
TCP |
HTTP, HTTPS, FTP, SMTP, SSH |
可靠、有序、面向连接 |
UDP |
DNS, DHCP, NTP, QUIC, VoIP |
高效、低延迟、无连接 |
三十六、HTTP状态码分类
状态码 |
类别 |
常见示例 |
1xx |
信息响应 |
100(继续发送请求体) |
2xx |
成功 |
200(OK), 201(Created) |
3xx |
重定向 |
301(永久迁移), 302(临时重定向) |
4xx |
客户端错误 |
400(请求语法错误), 403(禁止访问), 404(资源不存在) |
5xx |
服务器错误 |
500(内部错误), 502(网关错误), 504(网关超时) |
三十七、Web攻击防御策略
- XSS(跨站脚本):
- 防御:输入过滤 + 输出转义(如
<
→ <
) + CSP(内容安全策略)
- CSRF(跨站请求伪造):
- 防御:
SameSite Cookie
+ 验证Referer
+ Anti-CSRF Token
- DDoS:流量清洗 + CDN分发 + 限流(如令牌桶)
- 中间人攻击:强制HTTPS + HSTS响应头
三十八、SQL注入攻击
- 原理:攻击者将恶意SQL代码拼接到输入参数中
sql-- 原始SQL SELECT * FROM users WHERE username = '$input_user'; -- 恶意输入: admin' OR '1'='1 -- 最终SQL(返回所有用户): SELECT * FROM users WHERE username = 'admin' OR '1'='1';
- 防御措施:
- 参数化查询(Prepared Statements)
- 输入验证(白名单过滤)
- 最小权限原则(数据库账户权限限制)
三十九、SQL注入防御实战
java// 错误示例(拼接SQL) String sql = "SELECT * FROM users WHERE username = '" + inputUser + "'"; // 正确方案:使用PreparedStatement String sql = "SELECT * FROM users WHERE username = ?"; PreparedStatement stmt = conn.prepareStatement(sql); stmt.setString(1, inputUser); // 自动转义特殊字符 ResultSet rs = stmt.executeQuery();
关键点:参数化查询将输入数据与SQL指令分离,避免恶意代码执行。