#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应用是怎么跑起来的

  1. HTTP协议基础:搞懂请求方法(GET/POST)、状态码(200/301/403/404/500)、请求头/响应头。这是所有Web安全的地基,地基不牢,地动山摇。详见 [[HTTP协议基础]]
  2. HTML/JS基础:至少能看懂 <script> 标签、DOM操作、Cookie是啥。不然 XSS 看都看不懂
  3. 一门后端语言:推荐PHP,因为大部分CTF题目和实战环境都是PHP。能写个留言板、能连数据库就够了

进阶阶段(4-9):开始正式学漏洞

  1. 三大经典漏洞:[[SQL注入]]、[[XSS跨站脚本]]、[[CSRF跨站请求伪造]]。这三个是Web安全的"三巨头",几乎每场比赛都会考
  2. 文件操作类:[[文件上传漏洞]]和[[文件包含漏洞]],实战中拿到WebShell的主要手段
  3. 进阶漏洞:[[SSRF服务端请求伪造]]、[[XXE外部实体注入]]、[[反序列化漏洞]],难度上了一个台阶
  4. 逻辑类:[[逻辑漏洞与未授权访问]]和[[认证与会话管理]],这类漏洞没有固定的payload,靠的是对业务逻辑的理解和"奇思妙想"
  5. 代码审计:从"用工具打"升级到"看代码找漏洞",这是质的飞跃
  6. 内网渗透: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协议、编程语言、数据库、操作系统都有深入的了解。

核心思维:

  1. 永远不要信任用户输入 —— 所有来自客户端的数据都是不可信的
  2. 漏洞的本质是"非预期行为" —— 让程序做开发者没想到的事
  3. 安全是攻防博弈 —— 没有绝对的安全,只有不断提高攻击成本

相关笔记:

  • [[HTTP协议基础]] —— Web安全的地基
  • [[SQL注入]] —— 最经典的Web漏洞
  • [[XSS跨站脚本]] —— 前端安全的头号威胁
  • [[CSRF跨站请求伪造]] —— 利用信任关系的攻击
  • [[文件上传漏洞]] —— 拿WebShell的主要手段
  • [[文件包含漏洞]] —— LFI/RFI
  • [[SSRF服务端请求伪造]] —— 让服务器替你"跑腿"
  • [[XXE外部实体注入]] —— XML的安全隐患
  • [[反序列化漏洞]] —— 高级漏洞,Java/PHP重灾区
  • [[逻辑漏洞与未授权访问]] —— 没有固定payload的漏洞
  • [[认证与会话管理]] —— 登录和会话的安全问题
  • [[Web安全工具]] —— 工具链详情
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐