XSS 和 CSRF 的区别与防御?

前端开发第 12 / 13 题答题框架
参考思路:XSS 是注入执行(转义/CSP/HttpOnly)、CSRF 是伪造请求(token/SameSite/Referer 校验)。分别讲攻击原理再讲防御,能画请求示意更清晰。

五个经典回答示范

回答一 · 校招应届版

XSS 是攻击者把脚本注入页面执行,防御靠输出转义、CSP 内容安全策略、Cookie 加 HttpOnly;CSRF 是诱导用户在已登录站点发起伪造请求,防御用 CSRF token、SameSite Cookie 和校验 Referer。一个是『执行我的脚本』,一个是『借你的身份发请求』,机制完全不同。

回答二 · 1-3年经验版

我在评论区场景处理过存储型 XSS:富文本入库前用白名单 sanitizer 过滤标签和属性,前端渲染仍走转义,双保险;同时上了 CSP 限制脚本来源。CSRF 方面我们把核心会话 Cookie 设为 SameSite=Lax,写操作再带一次性 token。上线后安全扫描的这两类告警清零。

回答三 · 资深版

我会从信任边界讲:XSS 的根因是把不可信数据当代码执行,解法按注入点分类——HTML 上下文、属性上下文、JS 上下文、URL 上下文的转义规则不同;CSRF 的根因是 Cookie 自动携带的隐式身份,解法是让请求携带攻击者拿不到的显式凭据。再延伸 SameSite 的兼容代价与 token 的会话管理成本,安全方案要评估体验损耗。

回答四 · 追问应对

追问『HttpOnly 能防 XSS 吗』:不能防注入,只是拿不到 Cookie,减小危害;『CSP 怎么落地』:先 report-only 收集违规再收紧策略,nonce 方案对动态脚本更友好;『为什么 CSRF 不能用 CORS 防』:简单表单请求本身就是简单请求,不触发预检,CORS 管的是读取不是发送。

回答五 · 反面示范

『这两个差不多,都是黑客攻击,HTTPS 全站之后基本就不会有了,密码加盐哈希就行。』——点评:混淆了两种攻击机制;HTTPS 防传输窃听,防不了注入和伪造请求——页面里的恶意脚本一样跑在你加密的通道里;加盐哈希是防拖库的,答非所问。

怎么练这道题
  1. 打开 模拟练习,选择「前端开发」方向,限时 3 分钟作答本题。
  2. 对照上方答题框架,逐点检查:哪些要素没覆盖、哪里表达啰嗦。
  3. 用自己项目的真实经历替换框架中的占位内容,重讲一遍并录音回听。

这类题在真实面试中常被追问细节,
建议进入限时模式练一遍。

开始限时演练