星海

网络与安全 · 主观题 · 第 38 题

前端与全栈开发面试 · 第 38 题

XSS 和 CSRF 有什么区别?分别如何防御?

参考答案

1. 本质区别:XSS 是攻击者的脚本在受害网站的页面里执行,能做任何用户能做的事,包括读取页面数据;CSRF 是攻击者在别的站点诱导浏览器向受害网站发请求,利用浏览器自动携带 Cookie 冒用用户身份,但读不到响应。
2. XSS 类型:存储型(恶意内容存入数据库)、反射型(恶意内容放在 URL 参数里)、DOM 型(前端 JS 直接把不可信数据写进 innerHTML 等)。
3. XSS 防御:输出时按上下文转义;避免使用 innerHTML、v-html、dangerouslySetInnerHTML,必须使用时先用 DOMPurify 净化;配置 CSP 限制脚本来源;会话 Cookie 设置 HttpOnly;输入校验作为辅助。
4. CSRF 防御:Cookie 设置 SameSite=Lax 或 Strict;写操作校验 CSRF Token;校验 Origin / Referer;关键操作要求二次确认或验证码;改用放在请求头里的 Bearer Token(不会被浏览器自动携带)。
5. 注意:存在 XSS 时,CSRF 防御基本失效,因为攻击脚本可以读到页面里的 Token。

解析

先讲清两者的攻击原理不同,再分别给出防御手段。

在线刷这套题:即时判分、错题本、闪卡复习,不用登录就能练。