我正在为web应用程序设计一个安全模型,根据用户的权限和权限限制对应用程序某些部分的访问。这些权限和权限被组合成可以分配给每个用户的角色。
但是,我需要创建一个系统管理员角色,让一个特殊的用户能够完全访问所有的东西。为了解决这个问题,我可以从两方面着手:
选项1提出了一些问题:它可能很乏味,而且容易被忽略,因为应用程序的每个区域都有创建、读取、更新、写入和更多的权限。我必须将所有可能的应用程序区域组合到表中的权限中,这样才能使角色具有完全访问权限。
选项2提出了自己的问题:系统管理员旁路被硬编码到每个需要限制的区域。如果要更改系统管理员角色的名称(例如,主用户),那么我必须随时随地更新代码。但是,这个选项意味着我不需要担心不断更新角色表,这样系统管理员就可以获得访问新内容的权限。
我正在构建企业级软件,因此无论我选择哪种选项,它都必须是可伸缩的。
是的,我知道这是非常主观的,如果只是按原样处理。但我相信一定有一些良好的实践安全设计模式,其中一种方式是推荐的另一种。有些事情我现在无法预见,而其他人可能已经遇到了。我甚至希望有一些链接到有关这方面的想法和良好的前进道路。
发布于 2015-06-03 18:40:24
如果你把授权因素加到一个能做出所有安全决策的函数上怎么样?打电话就像isAccessAllowed(user, FOO_OPERATION, <misc data>)一样。然后,您的管理检查是isAccessAllowed函数开始时的一个条件。
实现这样的系统还允许您更改安全后端,而不必重写应用程序。它还很好地将安全代码与应用程序代码分离开来。
发布于 2015-06-03 18:09:39
我在您的场景中通常所做的(也许我们将称之为选项3)是,只允许sysadmin角色访问系统中特定于该角色的部分。不要在其他地方检查sysadmin角色。然后,如果您希望任何特定用户能够访问整个系统,请为该用户提供完全访问所需的所有角色。这样做的好处是:在每次添加新功能时,不需要进行繁琐的更新,您不必在多个地方检查多个角色,如果您决定只让某人访问sysadmin部分而不访问站点的其他部分,则可以。
例如,假设站点有4个不同的部分:
现在,每个人被赋予1-4个角色,根据他们可以访问的站点的哪些部分。在您的例子中,扮演“系统管理员”的人将被赋予所有4个角色,这样他们就可以访问站点上的所有内容。
该方法允许对谁可以访问哪些部分进行最严格的控制,并且在向站点添加新角色或区段时,不必更改任何现有代码。
发布于 2015-06-03 19:41:53
您不能在您的角色表DB中设置一个触发器,以确保在添加任何创建、读取、更新、写入条目时都会自动添加必要的SysAdmin权限吗?也就是说,您的选项1,但与自动化,以确保您不必手动记住添加必要的权限。与触发器不同,您还可以有一个屏蔽过程,例如,在DB上每小时运行一次,以确保SysAdmin用户拥有所有权限?
https://security.stackexchange.com/questions/90773
复制相似问题