1. why
spring security 是强大的高度可定制的 身份验证 和 访问控制 应用级框架。
常见的漏洞包含:
身份验证失效,会话固定,跨站脚本xss请求伪造,CSRF注入敏感数据泄漏缺乏方法访问控制。
身份验证失效:
不能仅仅验证用户是否登陆,而要验证检索数据的用户是否是合法用户。
会话固定:
允许攻击者通过重复使用先前生成的会话ID来冒充有效用户。所以每次请求的 token 最好是可变的。
跨站脚本(xss):
允许将客户端脚本注入到服务器公开的 Web 服务中,从而允许其他用户运行这些服务。恶意脚本等等。
跨站请求伪造(CSRF):
注入攻击:
注入客户端脚本、SQL注入、XPath注入、操作系统命令注入、LDAP注入等等。要对用户的行为进行限制,输入内容进行校验,不能让他们有对系统进行损害的操作。比如 mybatis sql 注入,linux 命令 cd 到上一个目录,删除其他用户目录文件等等。
处理敏感数据的暴漏:
机密数据的泄漏,比如访问用户的时候,返回什么信息。本人登陆的时候可以返回用户名,手机号等等,但是其他相关用户只能看到它的用户名。公开的一些文件和数据集,不允许进行写操作等等。一些异常信息,可能会暴漏代码结构等等。
使用具有已知漏洞的依赖:
比如我们使用的包版本包含漏洞,那么我们就要及时更新来修复漏洞。
通过 spring security 来解决以上的问题。
2. demo
OAuth2授权流程:
用户访问应用程序中的用例,需要调用后端资源,必须获得访问权限 token ,发送用户凭据或刷新令牌。
如果凭据或者刷新令牌正确,授权服务器返回一个访问令牌给客户端。
向资源服务器请求的标头使用访问令牌时调用所需的资源。
一般401用于失败的身份验证,403意味着服务器识别了调用者请求,但是没有调用需要的权限。
spring security身份验证过程中各种组件之间的关系:
请求被过滤器拦截(authentication filter)——> 认证委托给(authentication manager)——> manager 使用(authentication provider)来实现身份验证——>provider 找到用户的详细信息,并使用密码校验验证密码——>认证结果返回给过滤器——>有关身份验证的实体详细信息存储在 security 上下文中。
3. 管理用户
- 处理密码
- 身份验证
- 实践:小型安全web应用程序
- 配置授权:闲置访问
- 配置授权:应用限制
- 实施过滤器
- 应用CSRF保护和CORS
- 实践:职责分离
- OAuth2如何工作
- OAuth2:实现授权服务器
- OAuth2:实现资源服务器
- 使用JWT和加密签名
- 全局方法安全性:授权前和授权后
- 全局方法安全性:授权前和过滤后
- 实践:Oauth2应用程序
- 用于反应式应用程序的Spring Security
- Spring Security 测试