前端
前端安全常见漏洞防范
2026/4/30
一次XSS攻击让我夜不能寐
那是个普通的周三晚上,安全团队突然拉了一个紧急会议:我们的一个表单页面存在存储型XSS漏洞,已经有少量用户数据受到影响。
我是这个功能模块的开发者。虽然漏洞很快被修复,但那种「我的代码给别人造成了实际损失」的愧疚感,让我连续几个晚上睡不好。从那以后,前端安全成了我每次代码评审中最重要的检查项。
第一步:理解前端安全的三座大山
前端安全问题中,最常见也最危险的三个方向:
- XSS(跨站脚本攻击):攻击者在页面中注入恶意脚本,窃取用户信息
- CSRF(跨站请求伪造):诱导用户在本站已登录状态下执行非本意的操作
- 点击劫持:用透明的iframe覆盖合法页面,诱导用户点击
这三种攻击每年造成数十亿美元的经济损失,而很多前端开发者对它们的了解仅限于面试八股文。
第二步:XSS防护的实操方案
XSS分为反射型、存储型和DOM型三种。防护手段各有侧重:
- 对所有用户输入进行转义输出,不要相信任何来自用户的数据
- 使用CSP(内容安全策略)限制脚本执行来源
- 给Cookie设置HttpOnly和SameSite属性
- 使用DOMPurify库对富文本内容进行清洗
<!-- CSP配置示例 -->
<meta http-equiv="Content-Security-Policy"
content="default-src "self"; script-src "self" trusted-cdn.com;">
第三步:CSRF和点击劫持的防御
CSRF防御三板斧:
- SameSite Cookie:设置为Lax或Strict模式
- CSRF Token:每个表单请求携带服务端生成的随机令牌
- 验证Referer头:检查请求来源是否合法
点击劫持的防御很简单但容易被忽略:
<!-- 禁止页面被嵌入iframe -->
<meta http-equiv="X-Frame-Options" content="DENY">

第四步:建立安全开发习惯
安全不是一次性的检查,而是贯穿开发全流程的习惯:
- 代码评审时增加「安全检查清单」
- 使用ESLint插件
eslint-plugin-security自动检测常见问题 - 定期用OWASP ZAP做安全扫描
- 第三方依赖用
npm audit定期检查已知漏洞
那次XSS事件过去一年了,但每次提交代码前我都会问自己一句:这段代码如果被恶意用户看到了会发生什么?保持这种敬畏心,比任何安全工具都重要。
延伸阅读: