5.安全防护场景题 来源:https://w0hog67yl81.feishu.cn/wiki/F763wL25Yi3GEzkRb4gcxTybnrf 采集状态:已完成正文采集;逐段滚动采集正文与代码。 开场话术 "前端安全不只是防XSS,需要建立完整的安全防护体系。" "我们从代码层面到部署层面都做了安全加固。" 标准答题示例 我们的金融类应用对安全要求很高,我负责前端安全防护设计。 XSS防护方面: • 所有用户输入都做HTML转义,用DOMPurify过滤危险标签 • 使用CSP策略限制脚本执行,阻止内联脚本 • 建立了安全编码规范,禁止使用innerHTML等危险API CSRF防护: • 所有状态变更请求都带CSRF Token • 用SameSite Cookie属性限制跨站请求 • 关键操作增加二次验证,比如短信验证码 数据安全: • 敏感数据前端不存储,用完即清 • localStorage存储用AES加密 • 建立了数据脱敏规范,日志中不出现敏感信息 部署安全: • 启用HTTPS和HSTS,强制安全连接 • 用Webpack的代码混淆,保护知识产权 • 建立了安全扫描流程,每次发布前自动检测漏洞 监控告警: • 用Sentry监控前端异常,异常行为及时告警 • 建立了用户行为分析,识别潜在的攻击行为 这套安全体系上线后,0安全事故,通过了等保三级认证。 常见追问及应对 面试官: “XSS攻击具体有哪些类型?你们是怎么防护的?” 📔 答题思路:展示你对 XSS 类型划分的清晰理解,并结合代码解释防护机制的覆盖广度与落地方案。 XSS 攻击主要分为三类,我们在编码和配置层面都做了相应防护。 存储型 XSS(Stored XSS) 攻击者将恶意脚本注入数据库,其他用户在访问时触发执行,危害最大。 const maliciousComment = ''; 防护措施: • 后端入库前使用白名单规则清洗(如 DOMPurify); const sanitizedHtml = DOMPurify.sanitize(comment.content, { ALLOWED_TAGS: ['b', 'i', 'strong', 'p'], ALLOWED_ATTR: ['class'], }); • 前端渲染采用 dangerouslySetInnerHTML 时进行明确的 HTML 过滤; • React 默认 JSX 是安全的,除非使用未经过滤的dangerouslySetInnerHTML属性:
反射型 XSS(Reflected XSS) 攻击者构造恶意链接,通过 URL 参数注入脚本,通常结合钓鱼页面使用。 // URL: http://xx.com/search?q= 防护措施: • 对 URL 参数做 HTML 编码; • 使用 Content-Type: application/json 避免服务端直接渲染输入; • React、Vue 默认会自动对变量内容转义。 DOM 型 XSS(DOM-based XSS) 攻击不依赖后端,直接在前端通过 innerHTML 或 eval 等危险 API 插入脚本。 // 安全写法:textContent 替代 innerHTML element.textContent = userInput; React 特性: React 本身默认做了内建转义(除非使用 dangerouslySetInnerHTML),非常适合构建防 XSS 的应用。 CSP(内容安全策略)补充防线: 借助 HTTP 头控制脚本来源、内联限制、数据加载等,是防御 XSS 的最后一道防线。 上线时我们还配置了 CSP 违规监控(结合 securitypolicyviolation 事件)便于追踪异常加载行为。 面试官: “CSRF攻击的原理是什么?如何防护?” 📔 答题思路:说明攻击原理后,系统性覆盖前后端防御手段,并强调组合使用的重要性。 CSRF 本质上是“借用用户的登录态,在用户不知情的情况下,诱导其发起敏感请求”。 攻击示意: 防护手段一:CSRF Token 机制(主流方案) • 服务端在会话中生成 csrf_token; • 前端每次请求时在 Header 或 body 带上该 token; • 后端验证 token 与 session 是否匹配。 config.headers['X-CSRF-Token'] = csrfToken; 在 React 项目中我们封装了 useCSRFProtectedRequest,自动添加 token。 防护手段二:SameSite Cookie 属性 通过设置 Cookie 的 SameSite=Strict,限制第三方页面带 cookie 请求,阻断大多数 CSRF 攻击。 cookie: { sameSite: 'strict', secure: true, httpOnly: true } 防护手段三:关键操作二次验证 我们对转账、修改密码等高危行为引入短信验证码 / 动态令牌验证,增强事务完整性 {isVerifying &&