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中的随机数


二次验证


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

相关文章
|
Linux 编译器 Android开发
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
在Linux环境下,本文指导如何交叉编译x265的so库以适应Android。首先,需安装cmake和下载android-ndk-r21e。接着,下载x265源码,修改crosscompile.cmake的编译器设置。配置x265源码,使用指定的NDK路径,并在配置界面修改相关选项。随后,修改编译规则,编译并安装x265,调整pc描述文件并更新PKG_CONFIG_PATH。最后,修改FFmpeg配置脚本启用x265支持,编译安装FFmpeg,将生成的so文件导入Android工程,调整gradle配置以确保顺利运行。
1100 1
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
|
存储 缓存 JavaScript
不要过度封装!封装一个最简单的Axios!
前言 axios 是目前最优秀的 HTTP 请求库之一,虽然 axios 已经封装的非常好了,我们可以直接拿过来用。但是在实际的项目中,我们可能还需要对 axios 在封装一下,以便我们更好的管理项目和各个借口。 但是,目前网上有特别多的针对于 axios 在项目中的封装。不得不说,很多大佬封装得非常全面,方方面面都考虑到了。但是我们的每个真的都需要那些封装吗?显然不是的,网上的很多封装其实都显得有点过度封装了! 本篇文章实现最简单 Axios 封装,让小伙伴们扩展起来容易一些。
6073 0
不要过度封装!封装一个最简单的Axios!
|
网络协议 编译器 Linux
FFMPEG音视频开发: 发布RTSP流(采用EasyDarwin作为流媒体服务器)
FFMPEG音视频开发: 发布RTSP流(采用EasyDarwin作为流媒体服务器)
1257 1
FFMPEG音视频开发: 发布RTSP流(采用EasyDarwin作为流媒体服务器)
|
算法 数据安全/隐私保护
室内障碍物射线追踪算法matlab模拟仿真
### 简介 本项目展示了室内障碍物射线追踪算法在无线通信中的应用。通过Matlab 2022a实现,包含完整程序运行效果(无水印),支持增加发射点和室内墙壁设置。核心代码配有详细中文注释及操作视频。该算法基于几何光学原理,模拟信号在复杂室内环境中的传播路径与强度,涵盖场景建模、射线发射、传播及接收点场强计算等步骤,为无线网络规划提供重要依据。
|
SpringCloudAlibaba Java 持续交付
【构建一套Spring Cloud项目的大概步骤】&【Springcloud Alibaba微服务分布式架构学习资料】
【构建一套Spring Cloud项目的大概步骤】&【Springcloud Alibaba微服务分布式架构学习资料】
1118 0
引用 AspNetCoreRateLimit => StatusCode cannot be set because the response has already started.
引用 AspNetCoreRateLimit => StatusCode cannot be set because the response has already started.
376 0
|
Linux Docker 容器
使用Docker来安装ElasticSearch,并且配置ik分词器
使用Docker来安装ElasticSearch,并且配置ik分词器
795 0
|
XML JSON API
Python3 新一代Http请求库Httpx使用(详情版)(上)
Python3 新一代Http请求库Httpx使用(详情版)
2101 0
|
存储 算法 程序员
25【软件基础】面向对象分析与设计思想总结
`面向对象的本质`:通过对象之间的协作完成功能。
1226 0
|
前端开发 Java
springboot默认跳转/error页面变更
springboot默认跳转/error页面变更
660 0

热门文章

最新文章

下一篇
开通oss服务