Web安全总览
#Web安全 #总览 #安全
一、什么是Web安全
说白了,Web安全就是研究"怎么搞垮一个网站"以及"怎么防止网站被搞垮"的学问。
打个比方:你开了一家奶茶店(Web应用),客人(用户)通过点单窗口(浏览器)下单,后厨(服务器)负责做奶茶,原材料仓库(数据库)存着所有配方和订单。Web安全研究的就是——有人能不能从点单窗口忽悠后厨,让后厨干出不该干的事?比如偷看别人的配方、往奶茶里加奇怪的东西、甚至直接把后厨炸了。
本质规则:Web安全的核心是——信任问题。
- 前端说的话,后端能不能信?(输入验证)
- 用户传上来的文件,服务器能不能信?(文件上传)
- 用户提交的SQL语句片段,数据库能不能信?(SQL注入)
- 用户给的URL,服务器能不能信?(SSRF)
一句话总结:凡是用户能控制输入的地方,都可能存在安全问题。
二、Web应用架构
搞Web安全之前,得先知道Web应用长啥样。就像你要攻破一座城堡,总得先看看城堡的结构图吧?
┌─────────────────────────────────────────────────────────────────┐
│ Web 应用架构全景 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────┐ HTTP/HTTPS ┌──────────────────────────┐ │
│ │ │ ───────────────> │ Web 服务器 │ │
│ │ 浏览器 │ │ (Nginx / Apache / IIS) │ │
│ │ (前端) │ <─────────────── │ │ │
│ │ │ Response └───────────┬──────────────┘ │
│ │ HTML/CSS │ │ │
│ │ JS │ │ 转发请求 │
│ └──────────┘ ▼ │
│ ┌──────────────────────┐ │
│ │ 后端应用服务器 │ │
│ │ (PHP/Java/Python/Go) │ │
│ │ │ │
│ │ ┌────────────────┐ │ │
│ │ │ 业务逻辑处理 │ │ │
│ │ │ 路由 / 控制器 │ │ │
│ │ │ 模板渲染 │ │ │
│ │ └────────────────┘ │ │
│ └──────────┬───────────┘ │
│ │ │
│ ┌────────────────────┼────────────┐ │
│ ▼ ▼ ▼ │
│ ┌──────────────┐ ┌──────────────┐ ┌────────┐ │
│ │ 数据库 │ │ 文件系统 │ │ 缓存 │ │
│ │ MySQL/Redis │ │ /uploads/ │ │ Redis │ │
│ │ MongoDB │ │ /tmp/ │ │ Memc.. │ │
│ └──────────────┘ └──────────────┘ └────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
简单解释一下每一层:
- 前端(浏览器端):用户看到的界面,HTML/CSS/JS。安全问题相对少,但 XSS 就是在这里搞事情
- Web服务器:Nginx、Apache 这些,负责接收请求、转发给后端。配置不当也会出问题
- 后端应用:真正的业务逻辑所在,PHP、Java、Python 等语言写的。大部分漏洞都在这里产生
- 数据库:存数据的地方。SQL注入就是通过后端"拐弯"攻击数据库
- 文件系统:用户上传的文件存这里。文件上传漏洞、文件包含漏洞都和它有关
- 缓存:Redis 等,加速数据读取。配置不当可能导致未授权访问
三、OWASP Top 10 简述
OWASP(Open Web Application Security Project)是个搞Web安全的国际组织,他们每隔几年会发布一个"十大Web安全风险"排行榜。这就好比Web安全界的"福布斯排行榜",上榜的都是"最危险选手"。
以下是 OWASP Top 10 2021 版的主要内容:
| 排名 | 漏洞类型 | 一句话说明 |
|---|---|---|
| A01 | Broken Access Control(访问控制失效) | 本来没权限看的东西,绕一绕就看到了 |
| A02 | Cryptographic Failures(加密失败) | 密码明文存?用MD5?等着被拖库吧 |
| A03 | Injection(注入) | [[SQL注入]]、命令注入,把恶意代码"注入"进去让服务器执行 |
| A04 | Insecure Design(不安全的设计) | 架构层面就有问题,代码写得再好也白搭 |
| A05 | Security Misconfiguration(安全配置错误) | 默认密码没改、调试模式没关、目录列表开着 |
| A06 | Vulnerable Components(脆弱组件) | 用了有漏洞的第三方库,比如 Log4j |
| A07 | Identification & Auth Failures(认证失败) | [[认证与会话管理]]出了问题,暴力破解、会话劫持 |
| A08 | Software & Data Integrity(软件和数据完整性) | [[反序列化漏洞]]、CI/CD管道被篡改 |
| A09 | Security Logging & Monitoring(日志和监控不足) | 被打了都不知道,连日志都没记 |
| A10 | SSRF(服务端请求伪造) | [[SSRF服务端请求伪造]],让服务器替你访问不该访问的东西 |
注意:OWASP Top 10 不是"全部漏洞",只是"最常见的十大风险"。实际碰到的漏洞类型远不止这些,比如 [[XSS跨站脚本]]、[[CSRF跨站请求伪造]]、[[文件上传漏洞]]、[[文件包含漏洞]]、[[XXE外部实体注入]]、[[逻辑漏洞与未授权访问]] 等等,都是实战中非常高频的。
四、攻击面全景图
下面这张图展示了从浏览器到服务器,每一层可能被攻击的点。就像一张"藏宝图",标注了所有可能被突破的防线:
┌─────────────────────────────────────────────────────────────────────────┐
│ Web 攻击面全景图 │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ 【第一层:客户端 / 浏览器】 │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ ● XSS(跨站脚本)—— 在页面注入恶意JS │ │
│ │ ● CSRF(跨站请求伪造)—— 诱导用户发起非预期请求 │ │
│ │ ● 点击劫持(Clickjacking)—— 透明iframe欺骗点击 │ │
│ │ ● 前端JS代码篡改 / 浏览器插件劫持 │ │
│ └──────────────────────────┬──────────────────────────────────┘ │
│ │ HTTP请求 │
│ ▼ │
│ 【第二层:传输层】 │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ ● 中间人攻击(MITM)—— HTTP明文传输被窃听 │ │
│ │ ● SSL/TLS 降级攻击 │ │
│ │ ● 证书伪造 │ │
│ └──────────────────────────┬──────────────────────────────────┘ │
│ │ │
│ ▼ │
│ 【第三层:Web服务器 / 反向代理】 │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ ● 服务器配置错误(目录遍历、默认页面) │ │
│ │ ● HTTP 请求走私(Request Smuggling) │ │
│ │ ● WAF 绕过 │ │
│ │ ● Nginx/Apache 解析漏洞 │ │
│ └──────────────────────────┬──────────────────────────────────┘ │
│ │ │
│ ▼ │
│ 【第四层:后端应用】 │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ ● SQL注入 —— 通过输入操控数据库查询 │ │
│ │ ● 命令注入 / 代码执行 —— 让服务器执行恶意命令 │ │
│ │ ● 文件上传漏洞 —— 上传WebShell获取服务器控制权 │ │
│ │ ● 文件包含漏洞(LFI/RFI)—— 包含恶意文件执行 │ │
│ │ ● SSRF —— 利用服务器发起内网请求 │ │
│ │ ● XXE —— 通过XML解析读取服务器文件 │ │
│ │ ● 反序列化漏洞 —— 篡改序列化数据触发恶意代码 │ │
│ │ ● 逻辑漏洞 —— 绕过业务逻辑(越权、支付篡改等) │ │
│ │ ● SSTI(服务端模板注入)—— 在模板引擎中注入表达式 │ │
│ └──────────────────────────┬──────────────────────────────────┘ │
│ │ │
│ ▼ │
│ 【第五层:数据层】 │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ ● 数据库提权 —— 从Web权限提升到系统权限 │ │
│ │ ● Redis 未授权访问 —— 写入SSH公钥/定时任务 │ │
│ │ ● MongoDB 注入 —— NoSQL注入 │ │
│ │ ● 备份文件泄露 —— .sql / .bak 文件被下载 │ │
│ └──────────────────────────┬──────────────────────────────────┘ │
│ │ │
│ ▼ │
│ 【第六层:操作系统 / 内网】 │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ ● 提权(Privilege Escalation)—— 从www-data到root │ │
│ │ ● 内网渗透 —— 以Web服务器为跳板攻击内网 │ │
│ │ ● 横向移动 —— 在内网中扩大战果 │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
结论:Web安全的攻击面是非常广的,从用户点开浏览器的那一刻起,每一个环节都可能出问题。所以做安全要"层层设防",不能只靠某一层的保护。
五、Web安全学习路线
下面是建议的学习顺序,从易到难,循序渐进。别一上来就搞反序列化,先把基础打牢:
入门阶段 进阶阶段
─────────────────────────────────────────────────────────────>
[1] HTTP协议基础 [4] SQL注入 + XSS + CSRF
│ │
│ 先搞懂Web怎么通信 │ "三大经典漏洞",必须吃透
▼ ▼
[2] HTML/JS基础 [5] 文件上传 + 文件包含
│ │
│ 至少能看懂前端代码 │ 文件操作类漏洞,实战高频
▼ ▼
[3] 一门后端语言 [6] SSRF + XXE + 反序列化
(推荐PHP) │
│ │ 进阶漏洞,需要更深的理解
│ 能写简单的Web应用 ▼
│ [7] 逻辑漏洞 + 认证与会话管理
▼ │
基础打牢 │ 需要经验和思维方式的转变
▼
[8] 代码审计 + 工具链
│
│ 从"用工具"到"看代码"
▼
[9] 内网渗透 + 提权
│
│ Web只是入口,内网才是战场
▼
出师!
各阶段要点:
入门阶段(1-3):别急着学漏洞,先搞懂Web应用是怎么跑起来的
- HTTP协议基础:搞懂请求方法(GET/POST)、状态码(200/301/403/404/500)、请求头/响应头。这是所有Web安全的地基,地基不牢,地动山摇。详见 [[HTTP协议基础]]
- HTML/JS基础:至少能看懂
<script>标签、DOM操作、Cookie是啥。不然 XSS 看都看不懂 - 一门后端语言:推荐PHP,因为大部分CTF题目和实战环境都是PHP。能写个留言板、能连数据库就够了
进阶阶段(4-9):开始正式学漏洞
- 三大经典漏洞:[[SQL注入]]、[[XSS跨站脚本]]、[[CSRF跨站请求伪造]]。这三个是Web安全的"三巨头",几乎每场比赛都会考
- 文件操作类:[[文件上传漏洞]]和[[文件包含漏洞]],实战中拿到WebShell的主要手段
- 进阶漏洞:[[SSRF服务端请求伪造]]、[[XXE外部实体注入]]、[[反序列化漏洞]],难度上了一个台阶
- 逻辑类:[[逻辑漏洞与未授权访问]]和[[认证与会话管理]],这类漏洞没有固定的payload,靠的是对业务逻辑的理解和"奇思妙想"
- 代码审计:从"用工具打"升级到"看代码找漏洞",这是质的飞跃
- 内网渗透:Web只是突破口,真正的战场在内网。学提权、横向移动、代理隧道
小建议:每个阶段都要配合靶场练习。推荐 DVWA、Pikachu、upload-labs、sqli-labs 等靶场,边学边打,效果翻倍。
六、常用工具速览
工欲善其事,必先利其器。以下是最常用的Web安全工具,每个工具一句话说清楚它是干嘛的:
| 工具 | 用途 | 一句话说明 |
|---|---|---|
| Burp Suite | 抓包/改包/Web测试 | Web安全的"瑞士军刀",拦截HTTP请求、修改参数、重放请求,必备中的必备 |
| SQLMap | SQL注入自动化 | 喂它一个URL,它帮你全自动跑SQL注入,支持MySQL/MSSQL/Oracle等主流数据库 |
| nmap | 端口扫描/服务探测 | 先用它扫一遍目标开了哪些端口、跑了什么服务,做到心中有数 |
| dirsearch / dirb | 目录扫描 | 扫描网站有哪些隐藏目录和文件,比如 /admin/、/backup.zip |
| HackBar | 浏览器插件 | 快速修改URL参数、编码解码、发送POST请求,轻量好用 |
| Postman | API测试 | 测试后端API接口,比浏览器方便,比Burp轻量 |
| Gobuster | 目录/DNS爆破 | Go写的,速度快,支持目录爆破和虚拟主机发现 |
| Nikto | Web漏洞扫描 | 自动扫描常见漏洞、危险文件、过时的服务器版本 |
| Wappalyzer | 指纹识别 | 浏览器插件,一眼看出网站用了什么框架、什么CMS、什么服务器 |
| CyberChef | 编解码/数据处理 | “网络厨房”,Base64、URL编码、Hex转换、加密解密,一站式搞定 |
| 蚁剑/冰蝎/哥斯拉 | WebShell管理 | 拿到WebShell后用这些工具连接管理,中国安全圈的"三件套" |
| Curl | 命令行HTTP请求 | 快速发HTTP请求,脚本中常用,调试接口神器 |
注意:工具只是辅助,核心是理解漏洞原理。SQLMap能帮你跑注入,但如果你不懂SQL注入的原理,遇到WAF就傻眼了。先学原理,再用工具,这个顺序不能反。
七、总结
Web安全是一个"入门容易、深入很难"的领域。入门阶段背背payload、跑跑工具就能打CTF了,但要真正理解漏洞的本质,需要对HTTP协议、编程语言、数据库、操作系统都有深入的了解。
核心思维:
- 永远不要信任用户输入 —— 所有来自客户端的数据都是不可信的
- 漏洞的本质是"非预期行为" —— 让程序做开发者没想到的事
- 安全是攻防博弈 —— 没有绝对的安全,只有不断提高攻击成本
相关笔记:
- [[HTTP协议基础]] —— Web安全的地基
- [[SQL注入]] —— 最经典的Web漏洞
- [[XSS跨站脚本]] —— 前端安全的头号威胁
- [[CSRF跨站请求伪造]] —— 利用信任关系的攻击
- [[文件上传漏洞]] —— 拿WebShell的主要手段
- [[文件包含漏洞]] —— LFI/RFI
- [[SSRF服务端请求伪造]] —— 让服务器替你"跑腿"
- [[XXE外部实体注入]] —— XML的安全隐患
- [[反序列化漏洞]] —— 高级漏洞,Java/PHP重灾区
- [[逻辑漏洞与未授权访问]] —— 没有固定payload的漏洞
- [[认证与会话管理]] —— 登录和会话的安全问题
- [[Web安全工具]] —— 工具链详情
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)