什么是CSRF攻击
CSRF英文全称Cross-site request forgery,所以又称“跨站请求伪造”,是指黑客引诱用户打开黑客的网站,在黑客的网站中,利用用户的登录台发起一些跨站请求。简单来讲,CSRF攻击就是黑客利用用户的登录状态,然后通过第三方站点来进行一些坏事。
下面我们假如某网站有转账功能,来模拟CSRF攻击的三种方式
自动发起Get请求
比如黑客将转账请求的接口隐藏在img标签内,欺骗浏览器这是一个图片资源,那么当浏览器加载图片的时候,如果服务器没有对该请求进行判断,那么服务器就会认为该请求是一个转账请求,就会达到黑客的恶意转账的目的
自动发起POST请求
黑客可以制作一个隐藏的表单,该表单的内容就可以是转账接口,当用户打开该站点后,这个表单被提交,服务器就会执行转账操作。
引诱用户点击链接
黑客将转账接口做成某个吸引用户点击的链接,当链接被用户点击,那么就会执行转账操作。
与XSS不同,CSRF不需要将代码恶意注入到用户的页面,仅仅利用服务器的漏洞和用户的登录状态来进行攻击
如何防止CSRF攻击
-
充分利用好Cookie的SameSite属性
Cookie的SameSite属性设置属性达到浏览器禁止第三方Cookie的目的,常用的三个选项有
Strict、Lax、None三个值,严格程度依次下降
-
验证请求的来源站点
在服务器端验证请求来源的站点,可以在服务端验证请求头中的Referer或者Origin属性,有
Origin属性有限判断Origin属性,如果没有在根据实际情况判断是否使用Referer的值
-
CSRF Token
在浏览器向服务器发送请求的时候,服务器生成一个CSRF Token。CSRF Token就是服务器生成的字符串,然后将该字符串植入到返回的页面中。
在浏览器端,如果要发起转账请求,那么就需要带上CSRF Token,然后服务器会判断Token是否合法,如果是第三方站点发出的请求,那么就无法获取CSRF Token的值,所以就算发出了请求,也会因Token验证不合法而拒绝请求