跨站点请求伪造-CSRF

288 阅读2分钟

CSRF就是黑客通过用户的登录状态,在第三方站点实现攻击行为的攻击方式。

分为三种:

  • get请求

  • post请求

  • 诱使用户点击链接

一、get请求

当用户登录一个受信任的网站,在登录黑客网站,黑客网站的html中有一个img标签,该标签的src为受信任网站的转账接口,那么当该页面打开时,就会发起一个转账的请求。

二、post请求

比如黑客网站有一个隐藏的表单,这个表单的提交地址是转账的请求接口,在script里面进行提交,那么一打开该页面,这个提交请求就会触发。 

三、诱导用户点击链接

比如恶客页面中有一个a标签,a标签的链接是转账接口,那么一点击,请求就发送了。

跨站请求伪造(CSRF)和跨域脚本攻击(XSS)的攻击的区别是:XSS需要注入攻击脚本,只需要服务器的漏洞和用户的登录状态Cookie就可以了。

四、防范

1、给Cookie设置SameSite属性,禁止第三方站点请求时,携带本站点的Cookie。

SameSite的值有三种:None、Lax、Strict。

  • None:任何情况下都会携带Cookie。
  • Lax:第三方站点的链接打开和get方式的表单会携带Cookie,其他的不会携带。
  • Strict:完全禁止第三方站点携带Cookie。

2、使用Referer和Origin。

Referer会记录请求站点的详细来源,而Origin只会记录协议、域名、端口。而且有些情况下是不适合携带Referer字段的(可能会暴漏关键信息),因此还是使用Origin字段。

因此,服务器端在验证站点来源时,优先验证Origin字段,如果没有,再验证Referer字段。