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 或来源校验等保护。