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 防止 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>
标签:CSRFXSS