第六章
细粒度数据操作权限
很多系统对于黑客不堪一击。请看这样的示例:
1,
前台展现客户能查看的客户数据,而且用户能删除的客户数据,就是前台展现出来的数据;
2,
当用户选择某个用户,点击删除按钮,后台执行删除操作。
比如,请求后台删除的
url
是:
http://www.test.com/crm/customer.do?id=3
假设,
id=13
的客户在前台不显示(因为当前用户没有对该客户数据有删除权限),但用户输入
http://www.test.com/crm/customer.do?id=13
显然
id=13
的客户将被删除掉。
有开发者建议采用
id
值不要使用自增长型,而改用其他型,比如
hashcode
等。这也不大合适,可以使用爬虫轻松地将漏洞爬出来。
显然,仅仅通过界面层次控制数据级权限是不够的。
解决方案
数据级防火墙
显然,需要为业务系统构建一道数据级防火墙。该防火墙能够判断当前用户对请求的数据,是否有操作权限。如果没有操作权限,告知业务系统,且告知拒绝理由。
防火墙位置
后台业务方法被执行前,需要做个权限检查。检查通过后,才执行该操作,否则不予执行。
这种注入模式有
2
种,
1
,硬编码注入;
2
,
AOP
方法拦截。
硬编码注入,类似这样:
…
if( SecurityService.permit( user, customer, Privilege.DELETE_CUSTOMER ) ) {
customerService.delete( customer );
} else {
…
// 对该客户没有删除权限,转移到提示界面
}
…
AOP
方法拦截,通过给业务方法
annotation
签名。当该方法被执行时,自动触发权限判断逻辑。
public interface CustomerService {
/**
* @security id=DELETE_CUSTOMER
*/
public void delete( Customer customer, User user );
}
权限逻辑
大多业务系统,采用
if
else
逻辑判断,判定用户是否具有对某数据的操作权限。
这种细粒度的权限逻辑,无法或者说非常难使用某种模型来自动处理。因此大多系统采取硬编码模式实现权限逻辑。
本章介绍怎样使用
Metadmin
来管理权限逻辑。
如果使用
Metadmin
以下演示来自
metadmin
下载包里面包含的演示示例,可以在
www.metadmin.com
下载
Metadmin
安装程序包。
Metadmin
不通过编程,而是通过设计器快速设计出权限逻辑,并可在线测试权限逻辑。
怎样与系统集成
MetadminService
类,提供如下方法:
static Decision
|
permit
(int privilegeId,
User
user,
java.lang.Object businessData, java.util.Map context)
评估决策授权策略,返回决策结果。
|
表示对于
privilegeId
操作,
user
对于
businessData
业务数据是否有操作权限。
context
表示权限判定需要的业务数据,可以为
null
。
WebMetadminService
类,提供如下方法:
static boolean
|
permit
(HttpServletRequest req,
int privilegeId, java.lang.Object businessObject)
评估决策授权策略,返回决策结果。
|
static boolean
|
permit
(HttpServletRequest req,
int privilegeId, java.lang.Object businessObject,
java.util.Map context)
评估决策授权策略,返回决策结果。
|
WebMetadminService
为
MetadminService
为
Web
程序封装,从
HttpServletRequest
里面取出
user
,而不用显式地传值。
完整
JAVADOC
请浏览:
http://www.metadmin.com/doc/javadoc/index.html
示例程序,对删除员工进行权限判定代码如下:
if (WebMetadminService.permit(req, Privilege.DELETE_EMPLOYEE,
employee)) {
employeeManager.deleteEmployee(id);
}
employee
对象,是根据前台传入
id
参数从数据库查询出来的员工对象。
权限逻辑设置
上章例子设置:总公司用户能查询所有员工;分公司用户能查询本分公司及下属营业部员工;营业部员工能查询本营业部员工。
本例将员工删除权限修改一下:所有用户只能删除自己所在机构的员工,也就是总公司用户只能删除总公司员工;分公司用户只能删除分公司员工;营业部用户只能删除营业部员工。
Metadmin
对于这样的权限逻辑,只要新建“所有用户”用户分类,及“用户所在机构员工”业务数据分类,然后将该
2
种分类配对设置该“删除员工”权限即可。
首先,创建“所有用户”用户分类,打开设计器:
http://localhost:8080/mydemo/metadmin/designer
1.
在用户分类栏,新建分类,输入名称为“所有用户”;
2.
创建固定值
a
,设置其值为
1
;
3.
在表达式定义处,定义
Binary
表达式“
a=a
”。
这样,所有用户都会满足该条件。
然后,创建“用户所在机构员工”业务数据分类,打开设计器:
http://localhost:8080/mydemo/metadmin/designer
1.
在业务数据分类栏,新建分类,输入名称为“用户所在机构员工”;
2.
创建用户属性变量“
userCompanyId
”,其值等于用户的
companyId
属性;
3.
创建业务数据变量“
businessDataCompanyId”
,其值等于
Employee
对象的
companyId
属性;
4.
在表达式定义处,定义
Binary
表达式
userCompanyId==businessDataCompanyId
。
这样,只有当
user
对象和
employee
对象的
companyId
属性相等时,数据才属于该业务数据分类。如图示:
然后,将该分类配对设置给删除员工权限。如图示:
至此,权限逻辑设置完毕。业务代码里面集成的权限判断,将按照该逻辑执行。当权限判断逻辑发生变化,只要打开设计器重新设计权限逻辑即可。不需要修改代码,重新发布系统。
分享到:
相关推荐
在Java开发中,细粒度权限管理是一种重要的安全机制,它允许系统对用户访问资源进行精确控制,确保每个用户只能操作他们被授权的部分。Shiro是Apache组织提供的一款强大且易用的Java安全框架,它提供了身份认证、...
总之,基于RBAC的细粒度权限控制提供了一种有效且灵活的方式来管理Web应用的访问权限。它通过角色将用户和权限关联,减少了管理开销,增强了系统的安全性和适应性。随着企业需求的不断变化,RBAC模型已成为现代权限...
与粗粒度权限管理相比,细粒度权限管理提供了更加灵活和细致的权限控制方式。这意味着系统可以对应用请求的权限进行更细粒度的管理和分析,从而让用户在授权时可以选择性地赋予应用权限,而不是全有或全无的方式。...
这种方法与传统的粗粒度权限管理不同,后者通常只设置如“读取”、“写入”或“执行”等基本权限,而细粒度权限管理则可以对每个具体的操作进行授权,如“创建文件”、“编辑特定字段”或“查看特定记录”。...
基于SpringBoot+shiro实现数据库的细粒度动态权限管理系统 项目经过严格测试,确保可以运行!源码无需做任何更改! 基于SpringBoot+shiro实现数据库的细粒度动态权限管理系统 项目经过严格测试,确保可以运行!...
随着智能设备的普及和Android系统的广泛使用,这种粗粒度的权限管理机制的局限性逐渐显现,因此,细粒度权限管理机制的设计与实现显得尤为重要。 细粒度权限管理机制旨在解决粗粒度机制中的问题,它允许应用程序在...
共包含6大类20个细粒度要素的情感倾向.数据集分为训练、验证、测试A与测试B四部分。数据集中的评价对象按照粒度不同划分为两个层次,层次一为粗粒度的评价对象,例如评论文本中涉及的服务、位置等要素;层次二为细...
本次比赛我们提供了一个高质量的海量数据集,共包含6大类20个细粒度要素的情感倾向。参赛人员需根据标注的细粒度要素的情感倾向建立算法,对用户评论进行情感挖掘,组委将通过计算参赛者提交预测值和场景真实值之间...
7. **细粒度权限控制**:AppBoxPro强调细粒度权限管理,意味着不仅控制到用户和角色级别,还可以深入到具体的功能和数据记录层面,确保了权限分配的灵活性和安全性。 8. **源码分析**:拥有AppBoxPro的源码,开发者...
项目包含:100类大型细粒度飞机图像检测数据集(yolo标注格式),数据保存按照文件夹保存,经测试,可直接用作目标检测数据集,无需额外处理。 用于细粒度图像检测任务,FGVC数据 【数据总大小】341 MB 【数据集...
细粒度权限管理是数据级别的权限管理,例如部门经理可以访问本部门的员工信息,用户只可以看到自己的菜单,大区经理只能查看本辖区的销售订单。 在实现粗粒度权限管理时,可以将权限管理的代码抽取出来在系统架构...
这是一个基于Spring Security框架的细粒度权限管理系统,使用Java语言开发,同时包含JavaScript、CSS、HTML等多种编程语言。该项目共包含2447个文件,其中主要文件类型包括JavaScript、PNG图片、CSS、HTML、JAR包、...
《细粒度情感方面情感数据集:深度剖析与应用》 在当今的信息化社会,情感分析已经成为数据分析领域的重要分支,特别是在互联网评论、社交媒体等大数据环境中,用户的情感倾向往往能反映出产品或服务的真实口碑。本...
CP-ABE技术允许用户根据自己的权限访问加密数据,实现细粒度的访问控制。同时,通过转换键和代理重加密技术,大部分计算任务被转移到云服务器,减轻了移动设备的计算负担,减少了资源消耗。这意味着移动设备用户可以...
本次比赛我们提供了一个高质量的海量数据集,共包含6大类20个细粒度要素的情感倾向。参赛人员需根据标注的细粒度要素的情感倾向建立算法,对用户评论进行情感挖掘,组委将通过计算参赛者提交预测值和场景真实值之间...
### 细粒度权限管理与Root能力的分发和管理 #### 实验背景与目标 在计算机系统安全领域,权限管理是一项重要的技术措施,用于控制用户对于系统资源的访问级别。其中,细粒度权限管理和root能力的有效管理是确保...
本资源通过动态代理和注解技术实现了一种细粒度的权限管理方案,具体到每个方法的级别,这样可以确保用户只能执行他们被授权的操作。 首先,让我们深入了解一下动态代理。在Java中,动态代理主要通过`java.lang....
在IT行业中,权限管理是系统安全的重要组成部分,尤其在企业级应用中,对用户操作进行细粒度控制显得尤为重要。动态代理与注解的结合,为实现这种细粒度的权限管理提供了一种灵活且高效的方法。下面我们将深入探讨这...