5月30日 21:29
CSRF 和 XSS 有什么区别?项目里如何区分和防护?
CSRF 和 XSS 都是 Web 安全高频问题,但攻击点完全不同。CSRF 是“冒充用户发请求”:攻击者利用用户已登录的 Cookie,让服务器执行用户并不想做的操作。XSS 是“让脚本跑进用户页面”:攻击者把恶意 JavaScript 注入目标站上下文里,读取页面、窃取 Token、调用接口甚至进一步发起 CSRF。区分时记一句话:CSRF 主要骗服务器,XSS 主要控制浏览器。
追问
两者攻击前提有什么不同?
CSRF 通常要求用户已登录目标站,且敏感接口只靠 Cookie 认证。XSS 要求页面存在输入输出处理漏洞。
为什么 XSS 往往更危险?
XSS 拿到的是页面执行权,可以读取 DOM、调用接口、窃取非 HttpOnly Token,还可能绕过很多 CSRF 防护。
HttpOnly Cookie 能防哪一种?
HttpOnly 防止 XSS 直接读 Cookie,但不能阻止脚本发同源请求,也不能单独防 CSRF。
防护策略怎么分工?
防 CSRF 用 Token、SameSite、Origin/Referer;防 XSS 用输出编码、CSP、避免危险 API 和 HttpOnly/Secure Cookie。
示例
html<form action="https://bank.example/transfer" method="POST"></form> <script>fetch('/api/me')</script>