前端安全
前端安全
OHNII前端安全
核心威胁(6大类型)
记忆口诀:XSS → CSRF → 点击劫持 → SQL注入 → 中间人攻击 → 其他
1 | 1. XSS(跨站脚本攻击):注入恶意脚本 |
1. XSS(Cross-Site Scripting)跨站脚本攻击
1.1 XSS攻击类型
存储型XSS(最危险)
1 | // 攻击场景:评论、留言板 |
反射型XSS
1 | // 攻击场景:URL参数 |
DOM型XSS
1 | // 攻击场景:前端直接操作DOM |
1.2 XSS防御方案
方案1:输出转义(推荐)
1 | // HTML转义 |
方案2:CSP(Content Security Policy)
1 | Content-Security-Policy: default-src 'self'; script-src 'self' https://trusted.com |
方案3:HttpOnly Cookie
1 | Set-Cookie: sessionId=xxx; HttpOnly; Secure; SameSite=Strict |
2. CSRF(Cross-Site Request Forgery)跨站请求伪造
2.1 CSRF攻击原理
1 | // 恶意网站B的代码 |
2.2 CSRF防御方案
方案1:CSRF Token(推荐)
1 | // 服务端生成Token |
方案2:SameSite Cookie
1 | Set-Cookie: sessionId=xxx; SameSite=Strict |
方案3:验证Referer/Origin
1 | if (!referer || !referer.startsWith('https://trusted.com')) { |
3. 点击劫持(Clickjacking)
3.1 防御方案
X-Frame-Options(推荐)
1 | X-Frame-Options: DENY // 禁止被iframe嵌入 |
CSP frame-ancestors
1 | Content-Security-Policy: frame-ancestors 'none' |
4. SQL注入
4.1 防御方案
参数化查询(推荐)
1 | const sql = 'SELECT * FROM users WHERE username=? AND password=?'; |
5. 中间人攻击(MITM)
5.1 防御方案
HTTPS(必须)
1 | // 强制使用HTTPS |
6. 其他安全威胁
敏感信息泄露
1 | // ❌ 不要在前端存储敏感信息 |
文件上传漏洞
1 | // 1. 验证文件类型 |
DDoS防御
1 | // 限流 |
7. 面试口述版本
面试官:请说说前端常见的安全问题及防御方案
回答框架:
“前端主要面临6类安全威胁:
1. XSS(跨站脚本攻击)
- 攻击者注入恶意脚本,窃取Cookie、劫持会话
- 防御:输出转义、CSP策略、HttpOnly Cookie、使用DOMPurify
2. CSRF(跨站请求伪造)
- 攻击者伪造用户请求,执行恶意操作
- 防御:CSRF Token、SameSite Cookie、验证Referer
3. 点击劫持
- 透明iframe覆盖,诱导用户点击
- 防御:X-Frame-Options、CSP frame-ancestors
4. SQL注入
- 注入恶意SQL,绕过验证或窃取数据
- 防御:参数化查询、输入验证、ORM框架
5. 中间人攻击
- 拦截、篡改通信数据
- 防御:HTTPS、HSTS、证书验证
6. 其他威胁
- 敏感信息泄露:不在前端存储密码、密钥
- 文件上传漏洞:验证类型、大小、重命名
- DDoS攻击:限流、验证码、CDN
安全原则:
- 永远不信任用户输入
- 最小权限原则
- 纵深防御(多层防护)
- 定期安全审计”
8. 高频追问
Q1: XSS和CSRF的区别?
| 特性 | XSS | CSRF |
|---|---|---|
| 攻击方式 | 注入恶意脚本 | 伪造用户请求 |
| 攻击目标 | 用户浏览器 | 服务器 |
| 是否需要登录 | 不需要 | 需要 |
| 利用的是 | 用户对网站的信任 | 网站对用户的信任 |
| 防御重点 | 输出转义 | Token验证 |
Q2: 如何防止XSS攻击?
输出转义(最重要):
- 使用框架自动转义(React、Vue)
- 手动转义HTML特殊字符
- 避免使用dangerouslySetInnerHTML、v-html
CSP策略:
- 限制脚本来源
- 禁止内联脚本
HttpOnly Cookie:
- JS无法访问Cookie
- 防止Cookie被窃取
Q3: CSRF Token的原理?
1 | 1. 服务器生成随机Token,存储在Session |
Q4: SameSite Cookie有哪些值?
1 | SameSite=Strict |
Q5: 如何安全地存储Token?
方案对比:
| 存储方式 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| LocalStorage | 持久化、容量大 | 易受XSS攻击 | 低敏感度 |
| Cookie | 可设置HttpOnly | 易受CSRF攻击 | 需要防CSRF |
| Memory | 最安全 | 刷新丢失 | 高敏感度 |
推荐方案:
1 | // Token存Cookie(HttpOnly) |
Q6: HTTPS的工作原理?
1 | 1. 客户端发起HTTPS请求 |

