XSS 和 CSRF 分别怎么防
先理解原理和示例,再练习完整口述与追问。
回答要点
XSS 关注不可信内容被当作脚本执行:正确转义、可信净化、减少危险 HTML 注入、配合 CSP。CSRF 关注浏览器自动附带凭证的伪造请求:结合 SameSite、CSRF token、来源检查等防护。
原理拆解
XSS 是不可信内容进入可执行的页面上下文,攻击代码借用当前站点身份运行;CSRF 是诱导已认证浏览器向目标站点发出非预期请求。前者主要防止内容变代码,后者主要确认请求确由合法交互发起。文本、属性、URL、脚本字符串所需转义不同,富文本必须使用可靠清洗并限制允许标签和属性。
示例与推演
评论正文展示纯文本时用 textContent 或框架默认文本插值,不把它直接交给 innerHTML/v-html。修改地址接口除 Cookie 会话外,服务端可验证 CSRF token、Origin 等条件,并设置适当 SameSite。若接口只接受带自定义头的受控请求,还需严谨配置 CORS,不能向任意来源授予凭据访问。
易错点
把 HTML 中的尖括号替换掉不等于所有上下文都安全。CSP 是补充保护;XSS 能在同源上下文发请求,因此也可能绕开部分 CSRF 防线。后端权限校验始终必需。
参考回答可直接练习口述
XSS 是不可信内容被当成可执行脚本进入页面,防护重点是正确转义、对富文本做可靠净化、限制危险注入并结合 CSP。CSRF 是诱导浏览器携带现有凭证发起非本人意愿的请求,可结合 SameSite、CSRF token 和来源检查。二者不同,HttpOnly 只让脚本不能直接读 Cookie,不能阻止 XSS 在用户会话里发请求,也不自动解决浏览器自动带 Cookie 的 CSRF。
面试官可能继续问追问与完整解答展开收起
追问
富文本怎么显示?v-html 的输入可信么?HttpOnly 为什么不能解决所有 XSS / CSRF 问题?
追问回答
富文本必须通过可信净化方案去除危险标签、事件属性和 URL,再渲染;v-html 不会替你完成净化。HttpOnly 只限制读 Cookie,XSS 仍能在当前会话执行动作;CSRF 利用自动携带凭证,因此还要 SameSite、CSRF token 或来源校验等保护。