一、前言:为什么需要Web安全基础?
在数字化转型的今天,Web应用已成为网络攻击的主要目标。根据2024年统计,超过70%的网络攻击都是针对Web应用的。无论你是开发者、运维人员还是安全爱好者,掌握Web安全基础都是必备技能。
二、必须掌握的四大基础模块
2.1 HTTP协议深度理解
# HTTP请求示例
GET /login.php?username=admin&token=xyz123 HTTP/1.1
Host: target.com
User-Agent: Mozilla/5.0
Cookie: sessionid=abc789
Content-Type: application/x-www-form-urlencoded
核心知识点:
-
请求方法:GET(获取)、POST(提交)、PUT(更新)、DELETE(删除)
-
状态码:
-
200 OK - 请求成功
-
302 Found - 重定向(常用于登录跳转)
-
404 Not Found - 资源不存在
-
500 Internal Server Error - 服务器错误
-
-
重要头部:
-
Cookie:会话管理
-
Authorization:认证信息
-
Referer:来源页面
-
User-Agent:客户端信息
-
2.2 Web应用架构三件套
┌─────────────────┐
│ 前端 │ ← HTML/CSS/JavaScript
├─────────────────┤
│ 后端 │ ← PHP/Java/Python/Node.js
├─────────────────┤
│ 数据库 │ ← MySQL/PostgreSQL/MongoDB
└─────────────────┘
攻击面分析:
-
前端:XSS、CSRF、点击劫持
-
后端:SQL注入、文件上传、命令执行
-
数据库:数据泄露、权限绕过
三、OWASP Top 10 2025关键漏洞精讲
3.1 SQL注入(最危险的漏洞之一)
**漏洞原理:** 用户输入被直接拼接到SQL语句中执行
-- 正常查询
SELECT * FROM users WHERE username = 'admin' AND password = '123456'
-- 恶意输入:admin' OR '1'='1
-- 最终执行的SQL:
SELECT * FROM users WHERE username = 'admin' OR '1'='1' AND password = 'xxx'
-- 条件永远成立,绕过登录验证!
防御方法:
-
使用参数化查询(Prepared Statements)
-
对输入进行严格的白名单验证
-
最小权限原则,数据库用户只给必要权限
3.2 跨站脚本(XSS)攻击
三种类型对比:
| 类型 | 存储位置 | 触发方式 | 危害程度 |
|---|---|---|---|
| 反射型XSS | URL参数 | 用户点击恶意链接 | 中等 |
| 存储型XSS | 数据库 | 访问包含恶意代码的页面 | 严重 |
| DOM型XSS | 前端代码 | 前端JS执行恶意代码 | 中等 |
PoC示例:
<script>alert(document.cookie)</script>
<img src=x onerror=alert(1)>
<svg onload=alert('XSS')>
防御方法:
-
输入过滤:移除
<script>、onerror等危险标签和属性 -
输出编码:根据上下文使用HTML编码、JS编码等
-
设置CSP(Content Security Policy)头部
3.3 跨站请求伪造(CSRF)
攻击流程:
-
用户登录银行网站,Cookie有效
-
用户访问恶意网站
-
恶意网站自动提交转账请求到银行
-
浏览器自动携带Cookie,请求被执行
防御方法:
-
使用CSRF Token
-
验证Referer头部
-
设置SameSite Cookie属性
3.4 文件上传漏洞
危险文件类型检查表:
| 文件类型 | 危险扩展名 | 可能危害 |
|---|---|---|
| Web脚本 | .php, .jsp, .asp | 获取服务器权限 |
| 配置文件 | .htaccess, .yml | 修改服务器配置 |
| 可执行文件 | .exe, .sh, .bat | 执行系统命令 |
安全建议:
-
白名单验证:只允许特定的文件类型
-
重命名文件:避免用户控制文件名
-
隔离存储:文件不放在Web目录下
-
禁用执行权限:上传目录禁止脚本执行
四、实战工具与环境搭建
4.1 新手必备工具套装
浏览器插件(Chrome/Firefox):
-
EditThisCookie:Cookie管理器
-
Wappalyzer:技术栈识别
-
HTTP Headers:查看和修改请求头
本地测试环境搭建:
# 使用Docker快速搭建靶场
docker pull vulnerables/web-dvwa
docker run -d -p 80:80 vulnerables/web-dvwa
# 或者使用Vulhub
git clone https://github.com/vulhub/vulhub.git
cd vulhub/vulnerability/sqli
docker-compose up -d
4.2 Burp Suite基础使用
初学者配置流程:
-
安装证书 :访问
http://burp下载并安装CA证书 -
代理设置 :浏览器设置代理为
127.0.0.1:8080 -
四个核心模块:
-
Proxy:拦截和修改请求
-
Repeater:重复发送和修改请求
-
Intruder:自动化参数爆破
-
Scanner:自动化漏洞扫描
-
五、实战演练:从信息收集到漏洞发现
5.1 标准渗透测试流程
graph TD
A[信息收集] --> B[漏洞扫描]
B --> C[手动验证]
C --> D[漏洞利用]
D --> E[权限维持]
E --> F[报告编写]
5.2 信息收集命令速查表
# 1. 子域名收集
subfinder -d target.com -o subdomains.txt
amass enum -d target.com -o amass.txt
# 2. 端口扫描
nmap -sV -sC -p- target.com -oN full_scan.txt
# 快速扫描常用端口
nmap -sV --top-ports 1000 target.com
# 3. 目录爆破
gobuster dir -u https://target.com -w /path/to/wordlist.txt
ffuf -u https://target.com/FUZZ -w wordlist.txt
# 4. 技术栈识别
whatweb target.com
wappalyzer-cli https://target.com
5.3 常见漏洞手动检测方法
SQL注入检测:
原始参数:id=1
测试payload:
id=1' # 观察是否有SQL错误
id=1' AND '1'='1
id=1' AND '1'='2
id=1' OR '1'='1
id=1' UNION SELECT NULL--
XSS检测:
"><script>alert(1)</script>
'><img src=x onerror=alert(1)>
javascript:alert(document.domain)
六、防御措施与安全开发规范
6.1 开发者安全自查清单
输入验证:
-
\] 所有用户输入都经过验证
-
\] 验证数据类型、长度、范围、格式
-
\] HTML上下文使用HTML实体编码
-
\] URL参数进行URL编码
-
\] 使用强随机数生成Session ID
-
\] 用户登出时会话立即失效
Nginx安全配置示例
add_header X-Frame-Options "SAMEORIGIN"; # 防止点击劫持
add_header X-Content-Type-Options "nosniff"; # 禁止MIME嗅探
add_header X-XSS-Protection "1; mode=block"; # 启用XSS保护
add_header Content-Security-Policy "default-src 'self'"; # 内容安全策略
七、学习资源推荐
7.1 在线靶场(免费)
-
PortSwigger Web Security Academy - 最好的免费学习平台
-
**DVWA (Damn Vulnerable Web App)** - 本地搭建的经典靶场
-
OWASP Juice Shop - 现代化的漏洞练习平台
-
HackTheBox - 综合渗透测试平台(部分免费)
7.2 书籍推荐
-
**《Web安全攻防:渗透测试实战指南》** - 国内实战经典
-
**《白帽子讲Web安全》** - 阿里安全大佬作品
-
**《The Web Application Hacker's Handbook》** - Web安全圣经
7.3 博客与社区
-
CSDN网络安全专栏 - 中文优质文章
-
PortSwigger Blog - Burp Suite官方博客
-
HackerOne Hacktivity - 真实漏洞报告学习
八、总结与建议
给初学者的学习路径:
-
第1-2个月:搭建环境,学习HTTP和基础漏洞原理
-
第3-4个月:使用DVWA等靶场进行手工练习
-
第5-6个月:尝试HackTheBox简单机器
-
第6个月后:参与合法众测或CTF比赛
最重要的三点:
-
合法授权:永远只在授权范围内测试
-
手工为主:工具只是辅助,理解原理才是关键
-
持续学习:安全领域日新月异,每天都有新漏洞