安全漏洞防护
XSS
概念
跨站脚本(Cross-site scripting,通常简称为XSS)
是一种网站应用程序的安全漏洞攻击,是代码注入的一种。它允许恶意用户将代码注入到网页上,其他用户在观看网页时就会受到影响。这类攻击通常包含了 HTML 以及用户端脚本语言。
XSS 攻击示例:
假如有下面一个 textbox
<input type="text" name="address1" value="value1from" />
认证设计
认证和授权
什么是认证
认证 (Authentication) 是根据凭据验明访问者身份的流程。即验证“你是你所说的那个人”的过程。
身份认证,通常通过用户名/邮箱/手机号以及密码匹配来完成,也可以通过手机/邮箱验证码或者生物特征(如:指纹、虹膜)等其他因素。在某些应用系统中,为了追求更高的安全性,往往会要求多种认证因素叠加使用,这就是我们经常说的多因素认证。
常见的认证方式
- 用户名、密码认证
- 手机和短信验证码认证
- 邮箱和邮件验证码认证
- 人脸识别、指纹识别等生物因素认证
- 令牌认证
- OTP 认证
- Radius 网络认证
授权设计
授权模式
最简单的授权形式可能是根据是否已对发出请求的实体进行身份验证来授予或拒绝访问权限。 如果请求者可证明自己是所自称的身份,则可访问受保护的资源或功能。
常见的授权模式有以下几种:
- ACL:ACL 即 通过访问控制列表。ACL 进行的授权涉及到维护明确的特定实体列表,这些实体有权或无权访问资源或功能。 ACL 提供对身份验证即授权的精细控制,但管理工作会随着实体数量的增加而变得困难。
- RBAC:RBAC 即 基于角色的权限控制(Role-Based Access Control)。RBAC 应该是最常见的授权模式。 使用 RBAC 时,会对角色进行定义,以说明实体可执行的活动类型。 应用程序开发人员向角色而非单个实体授予访问权限。 然后,管理员可再将角色分配给不同的实体,从而控制哪些实体有权访问哪些资源和功能。在高级 RBAC 实现中,可将角色映射到权限集合,其中权限描述了可执行的细化操作或活动。 然后,会将角色配置为权限组合。 通过将授予给为实体分配的各种角色的权限进行相交,计算实体的总体权限集。
- ABAC:ABAC 即 基于属性的访问控制 是一种更精细的访问控制机制。在此方法中,规则应用于实体、所访问的资源和当前环境。 这些规则用于确定对资源和功能的访问级别。 例如,可能只允许拥有管理员身份的用户在工作日上午 9 点至下午 5 点期间访问使用元数据标记“仅限工作时间的管理员”标识的文件。 在这种情况下,通过检查用户的属性(状态为管理员)、资源属性(文件上的元数据标记)以及环境属性(当前时间)来确定访问权限。
- ABAC 的优点:可通过规则和条件评估实现更精细的动态访问控制,而无需创建大量特定的角色和 RBAC 分配。
Shiro 快速入门
Shiro 是一个安全框架,具有认证、授权、加密、会话管理功能。
一、Shiro 简介
Shiro 特性
核心功能:
- Authentication - 认证。验证用户是不是拥有相应的身份。
- Authorization - 授权。验证某个已认证的用户是否拥有某个权限;即判断用户是否能做事情,常见的如:验证某个用户是否拥有某个角色。或者细粒度的验证某个用户对某个资源是否具有某个权限。
- Session Manager - 会话管理。即用户登录后就是一次会话,在没有退出之前,它的所有信息都在会话中。会话可以是普通 JavaSE 环境的,也可以是如 Web 环境的。
- Cryptography - 加密。保护数据的安全性,如密码加密存储到数据库,而不是明文存储。
Spring Security 快速入门
快速开始
核心 API
设计原理
Spring Security 对于 Servlet 的支持基于过滤链(FilterChain
)实现。
Spring 提供了一个名为 DelegatingFilterProxy
的 Filter
实现,该实现允许在 Servlet 容器的生命周期和 Spring 的 ApplicationContext
之间进行桥接。 Servlet 容器允许使用其自己的标准注册 Filters,但它不了解 Spring 定义的 Bean。 DelegatingFilterProxy
可以通过标准的 Servlet 容器机制进行注册,但是可以将所有工作委托给实现 Filter 的 Spring Bean。
权限认证综述
认证
认证是指根据声明者所特有的识别信息,确认声明者的身份。认证在英文中对应于 identification 这个单词。
最常见的认证实现方式是通过用户名和密码,但认证方式不限于此。下面都是当前常见到的认证技术:
- 身份证
- 用户名和密码认证
- 用户手机认证:手机短信、手机二维码扫描、手势密码
- 用户邮箱认证
- 基于时间序列和用户相关的一次性口令
- 用户的生物学特征认证:指纹、语音、眼睛虹膜
- 用户的大数据识别认证
- 等等
编码和加密
关键词:
Base64
、消息摘要
、数字签名
、对称加密
、非对称加密
、MD5
、SHA
、HMAC
、AES
、DES
、DESede
、RSA
Base64 编码
Base64 原理
SpringBoot 之安全快速入门
QuickStart
(1)添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>