这是我参与「第四届青训营 」笔记创作活动的第2天
课程中介绍了一些常见的攻击和防御方式,这篇文章中记录一下在实际的web开发中有哪些常用手段来保证安全
web应用的开发,主要是为用户提供一套处理、管理与应用数据的平台。数据就是用户的最终的资产,而数据可以存储到数据库、文件、内存或其它介质上,为了使数据具有生产价值,我们需要依托于各种应用实现数据交换,通过数据的流动产生业务价值。比如在CMS(内容管理系统)中,我们需要通过系统将各种内容信息包括文件、表格、图片、视频等数据管理并为内容提供多样化、可适配、可维护的展示形式供使用;在OA(自动化办公平台)系统中,需要对日常办公各个环节进行流程化管理,实现工作的流程化与规范化。整个过程中都是用户面向系统。
web应用的安全问题关注点主要有两个方面,一是围绕用户对系统的访问,即认证,对访问系统用户身份的核实;二是围绕数据操作,即鉴权,对具有操作权限的主体进行校验。
下面会围绕着认证(Authentication)与授权(Authorization)两个方面展开,主要会聊到现在应用在用户认证上的主要形式,一些主流的协议以及技术实现。
1.认证形式
- 用户名和密码
- 手机号和验证码
- OTP(动态令牌认证系统)
- 第三方认证
- 二维码
- 指纹识别|人脸识别|语音识别
2.协议与规范
- 安全认证协议
- 权限访问模型
3.技术选择
Apache Shiro、Spring Security、Keycloak都是基于Servlet API实现,在web开发过程中比较容易集成,在这些框架包括了安全认证与鉴权两个模块,提供了丰富的功能与简单的API,在网上有大量的示例与技术文档为开发者提供帮助。
jCasbin没有实现身份认证的功能,但为丰富的鉴权模型提供了支持。