2. Web 攻击与防御
Web平台安全知识点大纲
1. Web安全目标与攻击模型
1.1 核心目标
- 用户保护: 防范恶意网站和网络攻击;
- 站点隔离: 确保不同站点间数据隔离;
- 完整性: 站点A无法篡改站点B的用户会话;
- 机密性: 站点A无法窃取站点B的用户数据;
1.2 攻击模型
- 恶意网站: 通过钓鱼或注入攻击危害用户;
- 恶意外部资源: 第三方脚本/广告携带攻击载荷;
- 网络攻击者: 窃听或篡改HTTP流量;
- 恶意软件攻击者: 控制用户设备或浏览器;
2. Web基础技术
2.1 HTML与安全转义
- HTML结构: 通过标签定义文档结构与内容;
- 转义规则: 特殊字符需转义为实体(如
<→<);
- 转义规则: 特殊字符需转义为实体(如
- 示例漏洞: 未转义的用户输入可能导致XSS攻击;
2.2 JavaScript与DOM
-
动态交互: JavaScript可修改DOM内容;
-
示例代码:
1
2
3
4
5
6
7<script>
function addTodo(text) {
var newitem = document.createElement("li");
newitem.textContent = text;
document.getElementById("todo").appendChild(newitem);
}
</script>
-
-
安全风险: 恶意脚本可劫持用户操作或窃取数据;
2.3 URL结构与编码
- URL组成:
scheme://host:port/path?query#fragment;- 编码规则: 非ASCII字符需UTF-8编码(如空格→
%20);
- 编码规则: 非ASCII字符需UTF-8编码(如空格→
- 安全隐患: 未编码的URL可能被解析错误或用于注入攻击;
2.4 HTTP协议
- 请求-响应模型: 无状态协议,依赖Cookie维护会话;
- 常见方法: GET(获取数据)、POST(提交数据);
- 状态码: 200(成功)、404(未找到)、302(重定向);
3. Cookie机制与安全
3.1 Cookie基础
- 作用: 维护会话状态(如登录态、购物车);
- 设置与读取:
- 设置范围: 当前域或其父域(非公共后缀);
- 示例:
login.site.com可为site.com设置Cookie;
- 示例:
- 读取范围: 当前域及其父域;
- 设置范围: 当前域或其父域(非公共后缀);
3.2 安全属性
- Secure属性: 仅通过HTTPS传输Cookie;
- HttpOnly属性: 禁止JavaScript访问Cookie;
- SameSite属性:
Strict: 禁止跨站请求携带Cookie;Lax: 允许导航类跨站请求(如链接点击);
3.3 安全隐患
- 默认风险:
- HTTPS Cookie可能通过HTTP泄露;
- 未设置
HttpOnly的Cookie可被第三方脚本读取;
4. 浏览器执行模型与同源策略(SOP)
4.1 浏览器加载流程
- 加载URL内容;
- 解析HTML并执行内联JavaScript;
- 递归加载子资源(脚本、图片、CSS);
4.2 同源策略(SOP)
- 定义: 限制不同源之间的数据访问;
- 源的组成:
scheme://domain:port; - 隔离资源: Cookies、DOM存储、JavaScript命名空间;
- 源的组成:
- 跨域资源限制:
- 脚本访问:
facebook.com的JS无法读取gmail.com的API响应; - 图像加载: 允许显示跨域图片,但禁止通过Canvas读取像素;
- 脚本访问:
4.3 跨域资源共享(CORS)
-
机制: 通过预检请求(OPTIONS)授权跨域访问;
- 示例:
1 | OPTIONS /data |
1 | 200 OK |
5. 现代网站的安全挑战
5.1 第三方资源依赖
- 示例: 新闻网站加载Google Analytics脚本、广告框架;
- 风险: 第三方资源可能携带恶意代码或泄露用户数据;
5.2 复杂攻击面
- 多源混合: 单个页面可能涉及数十个域和数百个资源;
- 防御难点: 难以确保所有第三方资源的安全性;
6. 安全防御总结
| 攻击类型 | 防御措施 |
|---|---|
| XSS | HTML转义、CSP策略、避免内联脚本 |
| CSRF | SameSite Cookie、CSRF令牌、Referer验证 |
| Cookie泄露 | Secure + HttpOnly属性、限制Cookie作用域 |
| 跨域数据泄露 | 严格SOP、CORS白名单控制 |
3. 经典Web攻击与防御
3.1 跨站请求伪造(CSRF)
-
攻击原理: 诱导用户浏览器向目标站点发送已认证的请求;
-
示例:
1
<img src="https://bank.com/transfer?to=attacker&amount=10000" />
-
防御措施:
- Referer验证: 检查请求来源域(隐私限制导致不可靠);
- CSRF令牌: 在表单中嵌入动态令牌(需绑定会话);
- SameSite Cookie: 设置为
Lax或Strict;
-
3.2 SQL注入(SQLi)
-
攻击原理: 通过未过滤输入篡改SQL语义;
-
示例:
1
SELECT * FROM users WHERE username = 'aroyc' AND password='' OR 1=1 --';
-
防御措施:
- 参数化查询: 分离SQL语句与数据(如
cursor.execute(sql, [user])); - 输入验证: 限制特殊字符(如单引号);
- 参数化查询: 分离SQL语句与数据(如
-
3.3 跨站脚本攻击(XSS)
- 类型:
- 反射型XSS: 恶意输入通过URL反射到页面(如
https://site.com/hello?name=<script>alert(1)</script>); - 存储型XSS: 恶意内容持久化存储后展示给其他用户(如用户资料注入脚本);
- 反射型XSS: 恶意输入通过URL反射到页面(如
- 防御措施:
- 输入过滤与转义: 转义HTML特殊字符(如
<→<); - 内容安全策略(CSP): 限制脚本来源(如
Content-Security-Policy: default-src 'self');
- 输入过滤与转义: 转义HTML特殊字符(如
4. 攻击案例与影响
4.1 CSRF攻击实例
- 银行转账: 攻击者构造自动转账请求,利用用户已登录状态完成操作;
- 登录CSRF: 诱骗用户登录攻击者账户,劫持其数据;
4.2 XSS蠕虫案例(Samy Worm)
- 传播机制: 通过MySpace用户资料注入自传播脚本;
- 影响: 20小时内感染超过100万用户;
4.3 SQL注入后果
- 数据泄露: 窃取用户表数据;
- 数据破坏: 执行
DROP TABLE users删除关键表;
5. 防御技术总结
| 攻击类型 | 防御措施 |
|---|---|
| CSRF | SameSite Cookie、CSRF令牌、Referer验证 |
| SQL注入 | 参数化查询、输入过滤 |
| XSS | 输入转义、CSP策略、避免内联脚本 |
| Cookie安全 | Secure + HttpOnly + SameSite属性、限制作用域 |
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
