Web安全
一、Web安全基础概念
1.1 Web安全定义
Web安全是指保护Web应用系统及其数据免受未经授权的访问、篡改、破坏,确保系统的可用性、完整性和保密性的技术体系。核心目标是防范针对Web应用层的攻击。
1.2 重要性
- 业务连续性:防止恶意攻击导致服务中断
- 数据安全:保护用户隐私、交易数据等敏感信息
- 合规要求:满足等保2.0、PCI-DSS等安全规范
- 企业声誉:避免数据泄露引发的信任危机
1.3 常见安全威胁分类
分类 | 特点 | 典型攻击方式 |
---|---|---|
主动攻击 | 篡改数据或伪造请求 | SQL注入、XSS、CSRF |
被动攻击 | 窃取信息但不修改数据 | 嗅探、信息泄露 |
物理攻击 | 针对服务器硬件的攻击 | 物理破坏、设备盗窃 |
逻辑攻击 | 利用业务逻辑漏洞 | 越权访问、支付漏洞 |
二、常见Web攻击类型详解
2.1 SQL注入(SQL Injection)
2.1.1 攻击原理
通过在输入参数中注入恶意SQL语句,篡改数据库查询逻辑,实现数据窃取、篡改或服务器控制。
2.1.2 攻击方式
- 联合查询注入:利用
UNION SELECT
拼接恶意语句 - 报错注入:通过
UPDATEXML
等函数触发错误回显数据 - 盲注:通过布尔逻辑或时间延迟判断数据存在性
2.1.3 攻击实例
// 漏洞代码
$id = $_GET['id'];
$sql = "SELECT * FROM users WHERE id = $id";
// 恶意输入:1' AND 1=2 UNION SELECT username,password FROM admin--
2.1.4 防御方法
- 使用参数化查询(Prepared Statements)
- 对输入进行严格过滤(正则匹配合法字符)
- 最小化数据库账户权限
- 启用Web应用防火墙(WAF)
2.2 跨站脚本攻击(XSS, Cross-Site Scripting)
2.2.1 攻击原理
在Web页面中注入恶意脚本,当用户浏览时执行,窃取Cookie、会话令牌等敏感信息。
2.2.2 类型
- 反射型XSS:恶意代码嵌入在URL中,即时执行
- 存储型XSS:恶意代码存储在服务器数据库,长期有效
- DOM型XSS:通过修改DOM树触发攻击
2.2.3 攻击实例
<!-- 反射型攻击链接 -->
http://example.com/search?keyword=<script>alert('xss');</script>
2.2.4 防御方法
- 对用户输入进行HTML转义(<转义为<)
- 启用Content Security Policy(CSP)头
- 使用XSS过滤器组件
- 禁止危险标签和属性(如onclick、eval)
2.3 跨站请求伪造(CSRF, Cross-Site Request Forgery)
2.3.1 攻击原理
利用用户已登录的会话,伪造受信任站点的请求,执行非预期操作(如转账、修改密码)。
2.3.2 攻击流程
- 用户登录信任站点A并保持会话
- 访问恶意站点B,B向A发送伪造请求
- A服务器验证会话有效并执行操作
2.3.3 防御方法
- 添加CSRF令牌(Token)并验证
- 检查Referer头和Origin头
- 使用SameSite Cookie属性
- 双重提交Cookie验证
2.4 文件上传漏洞
2.4.1 攻击原理
允许用户上传恶意文件(如PHP木马、可执行文件),通过Web服务器解析执行,获取服务器控制权限。
2.4.2 攻击方式
- 绕过文件类型检查(修改扩展名、利用.htaccess文件)
- 路径 traversal(上传到可执行目录)
- 解析漏洞(IIS 6.0目录解析漏洞)
2.4.3 防御方法
- 白名单校验文件扩展名
- 服务器端重命名上传文件
- 限制上传目录执行权限
- 进行文件内容检测(如病毒扫描)
2.5 命令注入(Command Injection)
2.5.1 攻击原理
通过拼接操作系统命令,执行恶意指令(如rm -rf /
、net user
),获取服务器控制权。
2.5.2 攻击实例
// 漏洞代码
$ip = $_GET['ip'];
system("ping -c 4 " . $ip);
// 恶意输入:127.0.0.1 && rm -rf /var/www/html
2.5.3 防御方法
- 禁止使用危险函数(system、exec、shell_exec)
- 对输入进行严格过滤(禁止特殊字符:&、|、;、`)
- 使用安全的API替代直接执行命令
2.6 SSRF(Server-Side Request Forgery)
2.6.1 攻击原理
利用服务器端发起任意HTTP请求的功能,伪造请求访问内部网络资源(如Redis未授权访问、内网Web服务)。
2.6.2 攻击场景
- 探测内网存活主机
- 访问内部API接口
- 利用file协议读取本地文件
2.6.3 防御方法
- 限制请求目标为合法域名
- 禁止使用非HTTP(s)协议(file、gopher)
- 对URL进行白名单校验
- 禁用不必要的HTTP请求功能
2.7 逻辑漏洞
2.7.1 常见类型
- 越权访问:水平越权(相同权限用户数据互访)、垂直越权(低权限用户访问高权限功能)
- 竞争条件:多个请求同时处理时引发状态不一致(如秒杀超卖)
- 支付漏洞:修改订单金额、跳过支付流程
2.7.2 防御方法
- 严格执行权限校验(RBAC模型)
- 使用事务处理和状态锁机制
- 对关键操作进行业务逻辑审计
三、Web安全防御技术
3.1 输入输出过滤
- 输入过滤:对用户输入进行合法性校验(正则表达式、白名单)
- 输出编码:对动态生成的HTML/JS/CSS进行转义处理
- 推荐库:OWASP ESAPI、Apache Commons Text
3.2 身份认证与授权
3.2.1 认证机制
- 基础认证(Basic Auth)
- 摘要认证(Digest Auth)
- Token认证(JWT、OAuth2.0)
- 双因素认证(2FA)
3.2.2 授权模型
- ACL(访问控制列表)
- RBAC(角色-based访问控制)
- ABAC(属性-based访问控制)
3.3 会话管理
- 使用安全Cookie属性:Secure、HttpOnly、SameSite
- 定期更新会话令牌(Session ID)
- 限制会话超时时间
- 会话固定攻击防御(登录后重新生成Session ID)
3.4 安全配置
- 关闭调试模式(禁止显示错误信息)
- 移除默认文件(如phpinfo.php、test.php)
- 配置安全头信息:
X-Content-Type-Options: nosniff X-Frame-Options: DENY X-XSS-Protection: 1; mode=block
3.5 Web应用防火墙(WAF)
- 部署方式:硬件WAF、云WAF、软件WAF(ModSecurity)
- 防护功能:规则匹配、异常检测、流量清洗
- 规则集:OWASP Core Rule Set (CRS)
3.6 HTTPS加密
- 采用TLS/SSL协议加密传输
- 使用强加密套件(TLS 1.3推荐)
- 部署HSTS(HTTP Strict Transport Security)
- 定期更新证书(避免过期或弱签名)
练习题
单选题
1. 以下哪种攻击属于SQL注入的变种?
A. XSS攻击 B. 盲注攻击 C. CSRF攻击 D. 文件包含攻击
答案:B
解析:盲注是SQL注入的一种特殊形式,通过逻辑判断或时间延迟获取数据,不直接回显结果。
2. 防御XSS攻击最有效的方法是?
A. 过滤URL参数 B. 对用户输入进行HTML转义 C. 禁用Cookie D. 安装杀毒软件
答案:B
解析:HTML转义可以将恶意脚本标签转换为无害字符,阻止浏览器执行恶意代码。
多选题
1. 以下哪些属于CSRF攻击的防御措施?
A. 使用CSRF Token B. 验证Referer头 C. 启用SameSite Cookie D. 输入参数过滤
答案:ABC
解析:输入参数过滤主要防御注入攻击,CSRF防御需要结合Token、Referer和Cookie属性。
2. 以下哪些属于OWASP Top 10(2021)中的安全风险?
A. 失效的访问控制 B. 不安全的设计 C. 缓冲区溢出 D. 身份认证失效
答案:ABD
解析:缓冲区溢出属于传统二进制漏洞,不在2021版OWASP Top 10中。
判断题
- SSRF攻击只能访问公网URL,无法攻击内网资源。( )
答案:×
解析:SSRF可以通过服务器发起内网请求,探测内部IP地址和端口。
- 存储型XSS的恶意代码存储在用户浏览器中。( )
答案:×
解析:存储型XSS的恶意代码存储在服务器数据库中,用户访问时从服务器获取并执行。