shiro框架

权限管理*

    为什么需要权限管理
1、安全性:误操作、人为破坏、数据泄露等,比如对数据库的操作,普通的开发人员对数据的操作只有查询等操作,而DBA可以对数据库进行最高权限的操作。
2、数据隔离:不同权限能看到及操作不同的数据,比如对应部门的领导只能看到该部门下的员工数据。
3、明确职责:运营和客服等不同角色,Leader和dev等不同级别。比如去哪网等这些网上商城,客服可以看到所有的订单信息,而运营只能看到他们负责的那些商户的信息。客服可以看到客户购买商品后的反馈情况,运营能看到店铺的交易额等数据而客服就看不到

权限管理核心
1、用户-权限:用户绑定权限,使用在人员少,功能固定或者特别简单的系统,mysql使用的就是这种权限。
2、RBAC(Role-Based Access Control):用户-角色-权限,基于角色的权限访问控制,适用于所有的场景。user、role和permission是多对多的关系,一个用户可以有多个角色,一个角色可以有多个用户,可以很方便灵活的切换用户的角色和权限。而且可以衍生出组的概念,这个组下的所有用户都拥有相同的角色,比如经理组,该组下的成员都拥有相同的角色。可以直接对该组进行授权

shiro框架简介

1.3、理想的权限管理
1、能实现角色级权限:基于RBAC模型实现
2、实现功能级、数据级权限:该用户是否有权限去使用某功能或者对某数据有什么操作方式
3、提供可视页面:提供页面可以操作用户、角色、权限,可以对其进行修改等操作,方便我们对系统进行维护
1.4、相关操作界面
1、权限管理界面:权限模块的概念,支持对权限的增删改查
2、角色管理界面:对角色的增删改查
3、用户管理界面:用户的增删改查,希望对group概念的实现,将用户放到部门里,对部门进行增删改查
4、角色和权限关系维护界面:每个角色已经配置的权限
5、用户和角色关系维护界面:每个角色已经包含的用户等可以在页面上进行修改
这些页面最好使用树形结构展开显示

目前主流的权限管理框架有SparingSecurity和Apache的Shiro
1.5.1、SpringSecurity
Spring Security是一个灵活和强大的身份验证和访问控制框架,以确保基于Spring的Java Web应用程序的安全。它是一个轻量级的安全框架,它确保基于Spring的应用程序提供身份验证和授权支持。它与Spring MVC有很好地集成,并配备了流行的安全算法实现捆绑在一起。安全主要包括两个操作“认证”与“验证”(有时候也会叫做权限控制)。“认证”是为用户建立一个其声明的角色的过程,这个角色可以一个用户、一个设备或者一个系统。“验证”指的是一个用户在你的应用中能够执行某个操作。在到达授权判断之前,角色已经在身份认证过程中建立了
1.5.1.1、SpringSecurity核心组件
Web/Http 安全:这是最复杂的部分。通过建立 filter 和相关的 service bean 来实现框架的认证机制。当访问受保护的 URL 时会将用户引入登录界面或者是错误提示界面。
业务对象或者方法的安全:控制方法访问权限的。
AuthenticationManager:处理来自于框架其他部分的认证请求。
AccessDecisionManager:为 Web 或方法的安全提供访问决策。会注册一个默认的,但是我们也可以通过普通 bean 注册的方式使用自定义的 AccessDecisionManager。
AuthenticationProvider:AuthenticationManager 是通过它来认证用户的。
UserDetailsService:跟 AuthenticationProvider 关系密切,用来获取用户信息的

1.5.2、Apache Shiro
Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码学和会话管理。使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序
1.5.2.1、Shiro核心组件
subject:主体,可以是用户也可以是程序,主体要访问系统,系统需要对主体进行认证、授权。
securityManager:安全管理器,主体进行认证和授权都是通过securityManager进行,是shiro的心脏。
realm:域,领域,相当于数据源,通俗意义的DAO层,通过realm存取认证、授权相关数据

1.5.3、两者比较
Shiro比Spring更容易使用,实现和最重要的理解
Spring Security却有更好的社区支持
Apache Shiro在Spring Security处理密码学方面有一个额外的模块
SpringSecurity 对spring 结合较好,如果项目用springmvc ,使用起来很方便。但是如果项目中没有用spring,那就不要考虑它了。
Shiro 功能强大、且简单、灵活。是Apache 下的项目比较可靠,且不跟任何的框架或者容器绑定,可以独立运行。
总的来说Shiro就可以满足我们的需求了。
1.6、系统安全性解决方案
Web 应用的安全性包括用户认证(Authentication)和用户授权(Authorization)两个部分。用户认证指的是验证某个用户是否为系统中的合法主体,这个主体可以是用户、设备也可以是其他系统。也就是说用户能否访问该系统。用户认证一般要求用户提供用户名和密码。系统通过校验用户名和密码来完成认证过程。用户授权指的是验证某个用户是否有权限执行某个操作。在一个系统中,不同用户所具有的权限是不同的。比如对一个文件来说,有的用户只能进行读取,而有的用户可以进行修改。一般来说,系统会为不同的用户分配不同的角色,而每个角色则对应一系列的权限。

二、Shiro

2.1、概述
Shiro 可以非常容易的开发出足够好的应用,其不仅可以用在 JavaSE 环境,也可以用在 JavaEE 环境。Shiro 可以帮助我们完成:认证、授权、加密、会话管理、与 Web 集成、缓存等。这不就是我们想要的嘛,而且 Shiro 的 API 也是非常简单;其基本功能点如下图所示
在这里插入图片描述
Authentication:身份认证 / 登录,验证用户是不是拥有相应的身份;
Authorization:授权,即权限验证,验证某个已认证的用户是否拥有某个权限;即判断用户是否能做事情,常见的如:验证某个用户是否拥有某个角色。或者细粒度的验证某个用户对某个资源是否具有某个权限;
Session Manager:会话管理,即用户登录后就是一次会话,在没有退出之前,它的所有信息都在会话中;会话可以是普通JavaSE 环境的,也可以是 Web 环境的;
Cryptography:加密,保护数据的安全性,如密码加密存储到数据库,而不是明文存储;
Web Support:Web 支持,可以非常容易的集成到 Web 环境;
Caching:缓存,比如用户登录后,其用户信息、拥有的角色 / 权限不必每次去查,这样可以提高效率;
Concurrency:shiro 支持多线程应用的并发验证,即如在一个线程中开启另一个线程,能把权限自动传播过去;
Testing:提供测试支持;
Run As:允许一个用户假装为另一个用户(如果他们允许)的身份进行访问;
Remember Me:记住我,这个是非常常见的功能,即一次登录后,下次再来的话不用登录了。

记住一点,Shiro 不会去维护用户、维护权限;这些需要我们自己去设计 / 提供;然后通过相应的接口注入给 Shiro 即可

2.2、Shiro的优势

从 2003 年至今,框架选择方面的情况已经改变了不少,但今天仍有令人信服的理由让你选择 Shiro。其实理由相当多,Apache Shiro:

1、易于使用 - 易用性是这个项目的最终目标。应用安全有可能会非常让人糊涂,令人沮丧,并被认为是“必要之恶”【译注:比喻应用安全方面的编程】。若是能让它简化到新手都能很快上手,那它将不再是一种痛苦了。

2、广泛性 - 没有其他安全框架可以达到 Apache Shiro 宣称的广度,它可以为你的安全需求提供“一站式”服务。

3、灵活性 - Apache Shiro 可以工作在任何应用环境中。虽然它工作在 Web、EJB 和 IoC 环境中,但它并不依赖这些环境。Shiro 既不强加任何规范,也无需过多依赖。

4、Web 能力 - Apache Shiro 对 Web 应用的支持很神奇,允许你基于应用 URL 和 Web 协议(如 REST)创建灵活的安全策略,同时还提供了一套控制页面输出的 JSP 标签库。

5、可插拔 - Shiro 干净的 API 和设计模式使它可以方便地与许多的其他框架和应用进行集成。你将看到 Shiro 可以与诸如 Spring、Grails、Wicket、Tapestry、Mule、Apache Camel、Vaadin 这类第三方框架无缝集成。

6、支持 - Apache Shiro 是 Apache 软件基金会成员,这是一个公认为了社区利益最大化而行动的组织。项目开发和用户组都有随时愿意提供帮助的友善成员。

2.3、外部看Shiro
Shiro的核心概念有三个:Subject,SecurityManager 和 Realms
在这里插入图片描述
2.3.1、Subject
主体,代表了当前 “用户”,这个用户不一定是一个具体的人,与当前应用交互的任何东西都是 Subject,如网络爬虫,机器人等;即一个抽象概念;所有 Subject 都绑定到 SecurityManager,与 Subject 的所有交互都会委托给 SecurityManager;可以把 Subject 认为是一个门面;SecurityManager 才是实际的执行者;


                
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: Shiro框架是一个用于身份验证和授权的Java安全框架。然而,Shiro框架存在一个被称为Shiro rememberMe反序列化漏洞(Shiro-550)的安全漏洞。这个漏洞允许攻击者通过篡改rememberMe的cookie值来执行远程代码执行(RCE)攻击。具体来说,攻击者可以通过解码、解密和反序列化rememberMe的cookie值来执行恶意代码。这个漏洞已经被广泛利用,并且有一些开源工具可以用于检测和利用这个漏洞,比如ShiroScan、Shiro_exploit等。\[2\]\[3\]为了保护应用程序免受这个漏洞的影响,建议及时升级Shiro框架到最新版本,并采取其他安全措施,比如限制rememberMe的使用、使用安全的密钥等。 #### 引用[.reference_title] - *1* [工具|渗透测试之5种工具分享(Shiro插件、CTFR、JR-scan、dirsearch-Web等)](https://blog.csdn.net/zhangge3663/article/details/116449243)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Shiro历史漏洞复现 - Shiro-550](https://blog.csdn.net/weixin_44971640/article/details/128536910)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值