spring security 简介
spring security 的核心功能主要包括:
认证 (你是谁)
授权 (你能干什么)
攻击防护 (防止伪造身份)
其核心就是一组过滤器链,项目启动后将会自动配置。最核心的就是 Basic Authentication Filter 用来认证用户的身份,一个在spring security中一种过滤器处理一种认证方式。
spring security 内置过滤器顺序及用途
1、ChannelProcessingFilter,使用它因为我们可能会指向不同的协议(如:Http,Https)
2、SecurityContextPersistenceFilter,负责从SecurityContextRepository 获取或存储 SecurityContext。SecurityContext 代表了用户安全和认证过的session
3、ConcurrentSessionFilter,使用SecurityContextHolder的功能,更新来自“安全对象”不间断的请求,进而更新SessionRegistry
4、认证进行机制,UsernamePasswordAuthenticationFilter,CasAuthenticationFilter,BasicAuthenticationFilter等等–SecurityContextHolder可能会修改含有Authentication这样认证信息的token值
5、SecurityContextHolderAwareRequestFilter,如果你想用它的话,需要初始化spring security中的HttpServletRequestWrapper到你的servlet容器中。
6、JaasApiIntegrationFilter,如果JaasAuthenticationToken在SecurityContextHolder的上下文中,在过滤器链中JaasAuthenticationToken将作为一个对象。
7、RememberMeAuthenticationFilter,如果还没有新的认证程序机制更新SecurityContextHolder,并且请求已经被一个“记住我”的服务替代,那么将会有一个Authentication对象将存放到这(就是 已经作为cookie请求的内容)。
8、AnonymousAuthenticationFilter,如果没有任何认证程序机制更新SecurityContextHolder,一个匿名的对象将存放到这。
9、ExceptionTranslationFilter,为了捕获spring security的错误,所以一个http响应将返回一个Exception或是触发AuthenticationEntryPoint。
10、FilterSecurityInterceptor,当连接被拒绝时,保护web URLS并且抛出异常。
SpringSecurity基本原理
SpringSecurity其实就是一组过滤器,请求和响应都会经过这些过滤器,在系统启动的时候,spring boot会自动配上
黄色:已经存储的认证信息
绿色:处理用户身份认证
橙色:捕获黄色抛出的异常
蓝色:决定当前请求是否通过之前某个过滤器的身份认证,不能通过就抛出异常,通过了会帮我们直接跳转
CSRF 攻击
CSRF 英文全称是 Cross-site request forgery,所以又称为“跨站请求伪造”,是指黑客引诱用户打开黑客的网站,在黑客的网站中,利用用户的登录状态发起的跨站请求。简单来讲,CSRF 攻击就是黑客利用了用户的登录状态,并通过第三方的站点来做一些坏事
通常当用户打开了黑客的页面后,黑客有三种方式去实施 CSRF 攻击。
- 自动发起get请求
- 自动发起post请求
- 引诱用户打开连接
如何防止SCRF攻击、
- 充分利用好 Cookie 的 SameSite 属性
- 验证请求的来源站点
- CSRF Token