CORS和CSRF
CORS和CSRF
什么是CORS?
CORS是一个W3C标准,全称是"跨域资源共享",他允许浏览器向夸源服务器,发出XMLHTTPRequest请求,从而克服了AJAX只能同源使用的限制.
什么是CSRF?
名为跨站请求伪造,指攻击者盗用了你的身份,以你的名义发送恶意请求,CSRF主流防御方式是在后端生成表单的时候生成遗传随机token,内置到表单里成为一个字段,同时,将此串token置入session中.每次表单提交到后端时都会检查这两个值是否一致,以此来判断此次表单提交是否是可信的.提交过一次之后,如果这个页面没有生成CSRF token,那么token将会被清空,如果有新的需求,那么token会被更新.
攻击者可以伪造POST表单提交,但是他没有后端生成的内置于表单的token,session中没有token都无济于事.

如何去解决CSRF跨域请求伪造问题?
防止CSRF攻击的步骤
- 在客户端向后端服务器请求页面数据时, 后端会在响应的token中设置csrf_token的值
- 在前端的From表单中也添加了一个隐藏的字段, 这个字段的值也是csrf_token
- 在用户点击提交的时候, 会带上表单中的csrf_token和cookie中的csrf_token一起发送到后端服务器
- 后端服务器接收前端发送过来的请求
- 从cookie中取出csrf_token
- 从From表单中取出隐藏的csrf_token值
- 对这两个token值进行对比
- 如果比对之后这连个值一样, 则表示这个是正常的请求, 如果对比之后发现这两个值不一样, 则说明这个是不正常的请求, 服务器端不需要做处理
CORS和CSRF的更多相关文章
- 关于 Spring Security OAuth2 中 CORS 跨域问题
CORS 是一个 W3C 标准,全称是”跨域资源共享”(Cross-origin resource sharing).它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了 AJA ...
- springboot之Jwt验证
简介 什么是JWT(Json Web Token) jwt是为了在网络应用环境间传递声明而执行的一种基于json的开放标准.该token被设计紧凑且安全的,特别适用于SSO场景. jwt的声明一般被用 ...
- Spring Security 理解小记
JWT 框架图如下, 来自博客https://blog.csdn.net/shehun1/article/details/45394405 个人觉得还不错.. 在开发中Spring boot 启用 加 ...
- Spring Boot+Spring Security+JWT 实现 RESTful Api 权限控制
摘要:用spring-boot开发RESTful API非常的方便,在生产环境中,对发布的API增加授权保护是非常必要的.现在我们来看如何利用JWT技术为API增加授权保护,保证只有获得授权的用户才能 ...
- Developing JSF applications with Spring Boot
Developing JSF applications with Spring Boot Spring Boot can leverage any type of applications, not ...
- Spring Security 案例实现和执行流程剖析
Spring Security Spring Security 是 Spring 社区的一个顶级项目,也是 Spring Boot 官方推荐使用的安全框架.除了常规的认证(Authentication ...
- Spring Boot + Spring Cloud 实现权限管理系统 (Spring Security 版本 )
技术背景 到目前为止,我们使用的权限认证框架是 Shiro,虽然 Shiro 也足够好用并且简单,但对于 Spring 官方主推的安全框架 Spring Security,用户群也是甚大的,所以我们这 ...
- 搭建django
虚拟环境配置 pip install virtualenv 一般需要安装一个管理工具:pip install virtualenvwrapper-win 只有它可以使用workon 创建虚拟环境:mk ...
- Spring Boot + Spring Cloud 实现权限管理系统 后端篇(二十五):Spring Security 版本
在线演示 演示地址:http://139.196.87.48:9002/kitty 用户名:admin 密码:admin 技术背景 到目前为止,我们使用的权限认证框架是 Shiro,虽然 Shiro ...
随机推荐
- java实现ssh登录linux服务器并下发命令
依赖jar包:jsch-0.1.55.jar commons-io-2.5.jar import com.jcraft.jsch.ChannelExec; import com.jcraft.js ...
- learning java Paths Path
import java.nio.file.Path; import java.nio.file.Paths; public class PathTest { public static void ma ...
- hibernate的API
程序源码: import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transa ...
- packr 方便的潜入静态资源文件到golang 二进制文件中
类似的工具以前有介绍过statik,今天使用的工具是packr 也是很方便的golang tools 安装 go get -u github.com/gobuffalo/packr/packr 或者我 ...
- 使用terraform 生成自签名证书
terraform 是一个很不错的基础设施工具,我们可以用来做关于基础设施部署的事情,可以实现基础设施即代码 以下演示一个简单的自签名证书的生成(使用tls provider) main.tf 文件 ...
- zabbix显示 get value from agent failed:cannot connetct to xxxx:10050:[4] interrupted system call
在阿里云上部署的两台云主机,从server上 agent.ping不通agent10050端口,在agent上使用firewalld-cmd 添加了10050端口还不行,关闭了防火墙和selinux也 ...
- [RN] React Native 常用命令行
[RN] React Native 常用命令行 1.查看当前版本 react-native --version 或 react-native -v 2.创建指定版本的React Native项目 1) ...
- Kubernetes Pod概述
Pod简介 Pod是Kubernetes创建或部署的最小/最简单的基本单位,一个Pod代表集群上正在运行的一个进程. 一个Pod封装一个应用容器,Pod代表部署的一个单位. Pods提供两种共享资源: ...
- 【转】Android ROM分析(1):刷机原理及方法
一.刷机原理 android系统启动的时候,首先会进行一些诸如硬件自检之类的操作,这些操作完成以后(至少它应该知道当前的机器有没有电),会检查一下当前手机按键的状态(接下来就是所谓刷机模式切换了,不同 ...
- python opencv PyQt5
import cv2 import numpy as np import sys from PyQt5.QtGui import * from PyQt5.QtCore import * from P ...