首页 > 其他分享 >如何防范CSRF(跨域请求伪造)?

如何防范CSRF(跨域请求伪造)?

时间:2023-06-05 20:56:53浏览次数:46  
标签:跨域 JWT token session cookie CSRF 伪造 请求

1、什么是CSRF?

跨域请求伪造指的是第三方诱导用户点击含攻击信息的网站,利用用户在目标网站的凭证冒充用户进行操作。

 

 2、如何解决?

方法一:同源检测

HTTP 请求头 Referrer 字段是浏览器默认带上,含义是发送请求的页面地址,比如同样是删除相册的操作http://www.photo.com/del?id=xxx;如果是从相册自己页面发送出来,Referrre的值是http://www.photo.com/index.html(以首页举例),如果是从黑客页面发送出来的Referrer的值是http://www.hacker.com/index.html(以首页举例),所以后端只要通过Referrrer做白名单判断就能防这种常见的CSRF攻击。

方法二:token

传统的cookie和session会把用户信息存储在客户端的Cookie里,浏览器在请求服务端接口时会自动在Cookie头中带上用户信息。而JWT令牌可以存储在localStorage,和Cookie不同的是它不会自动在请求中携带令牌,需要通过代码来实现。前端在请求头里添加token,并且后端设置拦截器进行验证token,这样就能防止CSRF攻击。

3、JWT实现原理

对比传统的session认证方式,JWT的优势是:

1、JWT Token数据量小,传输速度也很快。因为JWT Token是以JSON加密形式保存在客户端

2、不需要在服务端保存会话信息,也就是说不依赖于cookie和session,所以没有了传统session认证的弊端,特别适用于分布式微服务

3、单点登录友好:使用Session进行身份认证的话,由于cookie无法跨域,难以实现单点登录。但是,使用token进行认证的话, token可以被保存在客户端的任意位置的内存中,不一定是cookie,所以不依赖cookie,不会存在这些问题

JWT由3部分组成:标头(Header)、有效载荷(Payload)和签名(Signature)。在传输的时候,会将JWT的3部分分别进行Base64编码后用.进行连接形成最终传输的字符串

签名哈希部分是对上面两部分数据签名,需要使用base64编码后的header和payload数据,通过指定的算法生成哈希,以确保数据不会被篡改。首先,需要指定一个密钥(secret)。该密码仅仅为保存在服务器中,并且不能向用户公开。然后,使用header中指定的签名算法(默认情况下为HMAC SHA256)根据以下公式生成签名

 

标签:跨域,JWT,token,session,cookie,CSRF,伪造,请求
From: https://www.cnblogs.com/coooookie/p/17458903.html

相关文章

  • Vue 跨域配置
    在package.json同级目录下新建文件vue.config.js;内容如下:module.exports={//自行复制黏贴devServer:{proxy:{'/api':{//以/api开头的地址会被替换成下面的targettarget:'http://191.196.21.1:8080/',//接口真实地址......
  • SpringBoot2.x跨域问题(CrossOrigin失效问题)
    方法一SpringBoot版本的不同,CrossOrigin失效了,正确配置如下:@CrossOrigin(originPatterns="*",allowCredentials="true",maxAge=3600)方法二如果以上方法还是不生效,最后的终极方法可以进行硬编码进行跨域设置:对需要跨域的接口,进行Response对象设置可跨域URL设置(*代表......
  • CSRF和SSRF漏洞
    1、CSRF概念和原理跨站请求伪造(英语:Cross-siterequestforgery),也被称为one-clickattack或者sessionriding,通常缩写为CSRF或者XSRF,是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。跟跨网站脚本(XSS)相比,XSS利用的是用户对指定网站的信任,CSRF利......
  • Angular 应用解决跨域访问的问题
    在前后台分离的应用中,Angular与Java是一对好搭档。但是如果是分开部署应用,则势必会遇到跨域访问的问题。什么是跨域启动应用之后,有些浏览器会提示如下告警信息:No'Access-Control-Allow-Origin'headerispresentontherequestedresource.Origin'http://localhost:4200'i......
  • 跨域资源共享 CORS
    概述如果需要在前端与不同域的后端进行通信,可以在后端配置CORS,允许指定的域名访问后端资源。开始通过配置合适的响应头,可以明确指定允许的来源域、请求方法和头部信息。Node.jsapp.all('*',function(req,res,next){res.header("Access-Control-Allow-Origin","*");......
  • vue解决跨域方法
    什么是跨域  跨域指浏览器不允许当前页面的所在的源去请求另一个源的数据。源指协议,端口,域名。只要这个3个中有一个不同就是跨域。这里列举一个经典的列子:#协议跨域http://a.baidu.com访问https://a.baidu.com;#端口跨域http://a.baidu.com:8080访问http://a.baidu.com:80;#域......
  • proxifier 设置代理转发 对于IP地址的转发 也可以指定 这下C2裸IP的伪造可以做了
    proxifier支持应用名或者IP端口直接转发:如下是示例   例如在恶意代码分析实战的实验里,看到恶意软件使用svchost发送网络请求:  我的proxifier设置如下:  然后使用nc伪造c2即可!80的可以用inetsim。 ......
  • Ajax跨域问题2
    1. ajax跨域接上2 方案3:jQuery封装的jsonp   37- 牛人们写的jQuery库,已经对jsonp进行了封装。大家可以直接拿来用。- 用之前需要引入jQuery库的js文件。(这里的jQuery库咱们就不再封装了,咱们直接用jQuery写好的jsonp方式。)- jQuery中的jsonp其实就是我们方案2的高度封装,底层......
  • 前端 React + vite + Typescript 后端 java + springmvc + jwt 跨域 解决方案
    首先后端配置跨域:web.xml文件: <!--配置跨域--><filter><filter-name>header</filter-name><filter-class>org.zhiyi.config.Cross</filter-class></filter><filter-mapping><......
  • Vue+.net core 7 api跨域
    nginx的不说,直接说在项目中配置的。重点:前端要配代理,后端要设置返回的头文件信息。双管齐下1、前端在项目中的vue.config.js配置中进行设置module.exports={publicPath:'/',outputDir:'dist',//发布输入文件assetsDir:'static',//需要/demo目录下放打包后......