Security 访问控制列表最佳实践-ACL-为攻击站点的用户设置负面角色 上下文

Security 访问控制列表最佳实践-ACL-为攻击站点的用户设置负面角色 上下文,security,acl,zend-acl,Security,Acl,Zend Acl,我刚刚读了关于Zend ACL的文章 问题: 我在一台服务器上运行三个Zend应用程序 我的前端应用程序 我的前端成员应用程序 我的后端应用程序(网站所有者的管理员) 在应用程序中,我考虑使用两种类型的ACL 应用程序范围的ACL—“应用程序ACL的”权限只是“访问”(或者称之为“读取”)(或者甚至是“发送HttpRequests”)) 帐户范围-将所有其他权限留给个人“帐户ACL” 我认为这将使阻止垃圾邮件发送者和其他攻击者变得更容易 if (UserActivityScoresHi

我刚刚读了关于Zend ACL的文章

问题: 我在一台服务器上运行三个Zend应用程序

  • 我的前端应用程序
  • 我的前端成员应用程序
  • 我的后端应用程序(网站所有者的管理员)
在应用程序中,我考虑使用两种类型的ACL

  • 应用程序范围的ACL—“应用程序ACL的”权限只是“访问”(或者称之为“读取”)(或者甚至是“发送HttpRequests”))
  • 帐户范围-将所有其他权限留给个人“帐户ACL”
我认为这将使阻止垃圾邮件发送者和其他攻击者变得更容易

if (UserActivityScoresHighProbabilityOfHacking_Specification->IsSatisfiedBy(User))
 {
 User->addrole(Attacker)
 }
也许有这样的规则:

我的前端应用程序访问控制
  • Name=攻击者
  • 唯一权限=无
  • 从继承权限=不适用

  • 姓名=客人
  • 唯一权限=SendHTTPRequests
  • 从继承权限=不适用

  • 姓名=成员
  • 唯一权限=SendHTTPRequests
  • 从=来宾继承权限

  • 姓名=管理员
  • 唯一权限=(所有权限)
  • 从继承权限=不适用
其他应用程序将有更严格的规则来拒绝客人访问等等


因此,要回答的问题是: 将“攻击者”(负面角色)角色分配给用户是否让您觉得是明智之举


或者这与一般的最佳实践相反?

用户共享一个公共IP地址并不少见,所以我不确定通过IP禁止用户有多实际


如果是填写表单类型的东西,最好用验证码来阻止垃圾邮件发送者。

我看到的基于用户所做/拥有的分配角色的问题是,它在代码中硬编码规则。示例中的隐式规则是:

deny user access when user has property/behavior X
了解这一点的一种方法是,问问自己,如果你想调整它,会发生什么。假设您发现可疑行为有点过于严格,并且希望容忍更多,那么您必须进入file.php并对其进行更改

我认为最好的办法是研究规则的断言部分:

根据您的具体需求,这些可能是一个很好的解决方案

编辑:回复评论-> 我理解你的观点。我认为这说明了为什么RBAC将被更强大的访问控制(如基于属性的访问控制)所取代。这将允许基于规则的用户和受控制对象/资源的属性。 理想情况下,您希望访问控制中包含尽可能多的权限决策逻辑。当您将角色隐式地分配给用户时,一些决策将超出访问控制范围(例如,哪个用户将成为管理员主要取决于网站所有者等因素)。但是您希望尽量减少acl之外的决策,因为它添加了一个不受acl控制的访问层。因此,决定谁将担任特定角色通常是隐含的,并且不在acl范围内。但仍然是访问控制的核心,由一些逻辑决定,最好在程序中保留尽可能多的逻辑,以负责处理这个域。
希望这段漫无边际的话有意义:-)

经过几天的思考……以下是我对上述问题的回答:

将“攻击者”(负面角色)角色分配给用户是否让您觉得是明智之举

我的答覆是: 不,这是一件非常愚蠢的事。

为什么? 除了koen和Robert Harvey提出的问题

ACL允许角色被继承,因此如果两个角色适用于一种情况,则具有积极和消极角色将导致更大的复杂性和冲突

我的意思是“积极”,意思是:

  • “只有当某人担任此角色时,才允许他做某事”
与以下意义上的“负面”相反:

  • “只有当某人不担任此角色时,才允许他做某事”
因此,如果你打算添加一个角色来定义“黑客”,那么最好将其保持在正面(通过否定负面),即“不是黑客”。 或者将角色名称改为:“FriendlyUser”

所有积极因素:

  • +
    角色1:友好用户
  • +
    角色2:来宾
  • +
    角色3:成员
  • +
    角色4:管理员
与混合型相反:

  • -
    角色1:黑客
  • +
    角色2:来宾
  • +
    角色3:成员
  • +
    角色4:管理员

第二个角色列表更加混乱。

使用ACL基本上有两种理念:

  • 在启动时拒绝所有内容并且只有在检查黑名单/白名单/权限和所有需要的检查之后才允许访问资源

  • 启动时允许所有操作,然后拒绝访问敏感区域,只有在检查后才允许访问该区域

  • 我通常喜欢第一个。
    第二个更好,当你有小面积的保护和大部分公共区域。对每个呼叫进行检查会增加应用程序的重量。

    是。我知道你的IP地址是一个很糟糕的例子。我将根据已更改的条件规范将问题从:isInBlockedIpList(UserIP)更改为UserActivityScoreHighPoabilityOfHacking_规范您是否通过其帐户识别用户?如果你阻止他,他能创建一个新帐户吗?在这个例子中,“用户”是用在最宽松的意义上的。可能仅通过IP+缺少会话id+使用签名等其他因素来识别。我真的很想知道,如果指派一个像“垃圾邮件发送者”或“黑客”这样的角色给