CSRF(Cross Site Request Forgy)跨站请求伪造,是指其他网站在用户不知情的情况下向目标网站发送请求。
对于需要POST方式提交的后端方法,完成一次CSRF需要在伪造页面构造一个隐形表单并自动提交。而对于GET方式即可操作的后端方法,完成一次CSRF仅仅只需要通过页面对目标地址进行GET请求即可,如使用<img>标签通过src属性对某网站的文章进行评论,并且生成的评论还可以含有<a>标签,评论再次点击将再次回到发送虚假请求的页面,循环往复,迅速扩散,形成网络蠕虫。
CSRF攻击原理:
1.用户在A网站登录,
2.A网站确认身份并保存cookies,
3.用户登录B网站,B网站页面向A网站发送请求(携带A网站身份)
CSRF攻击时的特征,B网站向A网站发送请求,携带A网站Cookies,不访问A网站前端,referer为B网站。利用这些特征可以对CSRF进行有效防御。
1.禁止第三方网站携带Cookies。设置Cookies的same-site属性,Strict:任何请求不得携带Cookies,Lax:允许部分请求携带Cookies。
2.在前端页面加入验证信息。可以有效防御CSRF攻击,但是会降低用户的使用体验。
3.token。用户登录后生成token并保存到Cookis中,用户行使权力时携带token(可以放到表单或<meta>中)和Cookies,对比携带的token和Cookies中保存的token通过才能通过请求,攻击者无法获取到登录用户的token,导致攻击失败。
4.referer为B网站,可以通过验证referer来判断执行或拒绝请求,如果referer信息不是来自本站,拒绝请求。