Skip to content

Latest commit

 

History

History
33 lines (25 loc) · 2.27 KB

File metadata and controls

33 lines (25 loc) · 2.27 KB

跨站请求伪造(CSRF)

跨站请求伪造(Cross-site request forgery):是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾 经认证过的网站并运行一些操作(如发邮件,发消息,甚至财产操作如转账和购买商品),由于浏览器曾经认证过, 所以被访问的网站会认为是真正的用户操作而去运行.

跟跨站脚本(XSS)相比,XSS 利用的是用户对指定网站的信任,CSRF 利用的是网站对用户网页浏览器的信任

原理

用户登录受信任的网站A,保存用户登陆状态,生成cookie 用户访问危险网站B,在B上有访问网站A的操作(利用同源策略不适用于HTML标签的缺陷,如img标签的src是访问A的操作) 此时浏览器会自动带上用户的cookie,从而A会根据cookie信任B的请求

防御措施

Referer Check

根据 HTTP 协议,在 HTTP 头中有一个字段叫 Referer,它记录了该 HTTP 请求的来源地址。通过 Referer Check,可以检查请求是否来自合法的"源"。

比如,如果用户要删除自己的帖子,那么先要登录 www.c.com,然后找到对应的页面,发起删除帖子的请求。 此时,Referer 的值是 www.c.com;当请求是从 www.a.com 发起时,Referer 的值是 www.a.com 了。因此, 要防御 CSRF 攻击,只需要对于每一个删帖请求验证其 Referer 值,如果是以 www.c.com 开头的域名,则说明 该请求是来自网站自己的请求,是合法的。如果 Referer 是其他网站的话,则有可能是 CSRF 攻击,可以拒绝该请求。

添加 token 验证

如果要求在访问敏感数据请求时,要求用户浏览器提供不保存在cookie中,并且攻击者无法伪造的数据作为校验, 那么攻击者就无法再运行CSRF攻击。 可以在 HTTP 请求中以参数的形式加入一个随机产生的 token,并在服务器端建立一个拦截器来验证这个 token, 如果请求中没有 token 或者 token 内容不正确,则认为可能是 CSRF 攻击而拒绝该请求。

🌺 参考文章: