XSRF CRFS(跨站请求伪造,单点登录攻击) 特点和原理

简介: 概念:跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF, 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。跟跨网站脚本(XSS)相比,XSS 利用的是用户对指定网站的信任,CSRF 利用的是网站对用户网页浏览器的信任。

CSRF 特点和原理


CSRF:Cross Site Request Forgery,跨站请求伪造


概念:跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF, 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。跟跨网站脚本(XSS)相比,XSS 利用的是用户对指定网站的信任,CSRF 利用的是网站对用户网页浏览器的信任。


本质是:恶意网站把正常用户作为媒介,通过模拟正常用户的操作,攻击其登录过的站点。


20210106182454646.png


它的原理如下:


1.用户访问正常站点,登录后,获取到了正常站点的令牌,以cookie的形式保存


20210106182801161.png


2.用户访问恶意站点,恶意站点通过某种形式去请求了正常站点(请求伪造),迫使正常用户把令牌传递到正常站点,完成攻击


20210106182823844.png



防御


cookie的SameSite


现在很多浏览器都支持禁止跨域附带的cookie,只需要把cookie设置的SameSite设置为Strict即可


SameSite有以下取值:


  • Strict:严格,所有跨站请求都不附带cookie,有时会导致用户体验不好
  • Lax:宽松,所有跨站的超链接、GET请求的表单、预加载连接时会发送cookie,其他情况不发送
  • None:无限制


这种方法非常简单,极其有效,但前提条件是:用户不能使用太旧的浏览器


验证referer和Origin


页面中的二次请求都会附带referer或Origin请求头,向服务器表示该请求来自于哪个源或页面,服务器可以通过这个头进行验证


但某些浏览器的referer是可以被用户禁止的,尽管这种情况极少


使用非cookie令牌


这种做法是要求每次请求需要在请求体或请求头中附带token


请求的时候:authorization: token


验证码


这种做法是要求每个要防止CSRF的请求都必须要附带验证码


不好的地方是容易把正常的用户逼疯


表单随机数


这种做法是服务端渲染时,生成一个随机数,客户端提交时要提交这个随机数,然后服务器端进行对比


该随机数是一次性的


流程:


1.客户端请求服务器,请求添加学生的页面,传递cookie

2.服务器

  1.生成一个随机数,放到session中

  2.生成页面时,表单中加入一个隐藏的表单域<input type="hidden" name="hash" value="<%=session['key'] %>">

3.填写好信息后,提交表单,会自动提交隐藏的随机数

4.服务器

  1.先拿到cookie,判断是否登录过

  2.对比提交过来的随机数和之前的随机数是否一致

  3.清除掉session中的随机数


二次验证


当做出敏感操作时,进行二次验证

相关文章
|
4月前
|
SQL 存储 安全
Web安全-CSRF跨站请求伪造
Web安全-CSRF跨站请求伪造
111 5
|
8月前
|
安全 数据安全/隐私保护
第二轮学习笔记:CSRF跨站请求伪造漏洞
第二轮学习笔记:CSRF跨站请求伪造漏洞
55 0
|
数据安全/隐私保护
CSRF(跨站请求伪造)
CSRF(跨站请求伪造)
130 0
|
存储 JavaScript 安全
跨站脚本攻击(XSS)和跨站请求伪造(CSRF)是什么?区别是什么?底层原理是什么?
跨站脚本攻击(XSS)和跨站请求伪造(CSRF)是什么?区别是什么?底层原理是什么?
931 0
|
机器学习/深度学习 安全 程序员
网络安全-跨站请求伪造(CSRF)的原理、攻击及防御
网络安全-跨站请求伪造(CSRF)的原理、攻击及防御
333 0
网络安全-跨站请求伪造(CSRF)的原理、攻击及防御
|
SQL 安全 Python
【Django | 安全防护】CSRF跨站伪请求和SQL注入攻击
【Django | 安全防护】CSRF跨站伪请求和SQL注入攻击
【Django | 安全防护】CSRF跨站伪请求和SQL注入攻击
什么是CSRF(跨站请求伪造)?
什么是CSRF(跨站请求伪造)?
343 0
什么是CSRF(跨站请求伪造)?
|
Web App开发 XML 前端开发
密码学系列之:csrf跨站点请求伪造
密码学系列之:csrf跨站点请求伪造
|
SQL 安全
SSRF(服务端请求伪造)原理/防御
原理 攻击者伪造服务器获取资源的请求,通过服务器来攻击内部系统 比如端口扫描,读取默认文件判断服务架构,或者配合SQL注入等其他漏洞攻击内网的主机
213 0