1

例如,使用包含两个条件的 AND 函数的 XACML 之间有什么区别。一个条件是时间在 1-6 范围内并且日期等于 23/07/2015

另一个 XACML 将有两条规则,一条规则是时间范围 1-6,另一条规则日期等于 23/07/2015。

我的意思是,它们是如何工作的?第一个,AND 函数必须为真才能获得许可效果。第二个呢?是否会检查这两个规则中的一个是否为真并给予许可效果,或者两个规则都必须像第一个规则一样为真?

4

1 回答 1

2

首先,让我们退后一步,刷新我们的记忆。XACML 中有 3 个结构元素:

  • PolicySet可以包含PolicySetPolicy元素
  • Policy可以包含Rule元素。
  • Rule其中包含所需的效果(Permit 或 Deny)。

ARule包含一个Target元素和一个Condition定义规则何时应用的元素。

仅当 a和评估都为真时, ARule才会应用并返回其效果,即如果 a 中的所有匹配项都是正确的,并且如果最终的所有部分都评估为 True。TargetConditionTargetCondition

让我们举个例子:

  • 规则 1:如果 current-time>1pm 并且 current-time<6pm 并且 date==23/07/2015 则返回 Permit。

ALFA 中的代码是:

policy parent{
    apply firstApplicable
    rule example{
        permit
        condition currentTime>"13:00:00":time && 
                  currentTime<"18:00:00":time && 
                  currentDate=="2015-07-23":date
    }       
}

如果条件中的所有匹配项评估为真,则该规则将仅适用并且仅返回其效果,在这种情况下为许可。

如果我们使用 2 个规则来表达相同的逻辑呢?那会发生什么?让我们将条件拆分为 2 个规则:

policy parent{
    apply firstApplicable
    rule checkTime{
        permit
        condition currentTime>"13:00:00":time && 
                  currentTime<"18:00:00":time
    }       
    rule checkDate{
        permit
        condition currentDate=="2015-07-23":date
    }
}

那会发生什么?结果不一样。事实上,如果一个策略有 2 个子规则,它如何确定要考虑哪一个?这是组合算法介入的地方。组合算法在策略级别和策略集级别定义。有关完整列表和详细信息,请参见此处。

在上面的例子中,我们使用

apply firstApplicable

这意味着如果规则说允许,那么甚至不会考虑对第二个规则进行评估。换句话说,不会检查日期约束。因此,这 2 条规则的集合并不等同于我们写的原始条件。

我们仍然可以修改这 2 条规则,使它们确实像条件一样工作 - 或几乎一样。一种这样的方法是扭转检查并使规则成为否定规则:如果时间超出 1-6 范围,则拒绝。如果日期是“2015-07-23”,则拒绝。只有这样才能定义允许访问的许可规则。重做的例子变成了 ALFA:

policy parent{
    apply firstApplicable
    rule checkTime{
        deny
        condition currentTime<="13:00:00":time || 
                  currentTime>="18:00:00":time
    }       
    rule checkDate{
        deny
        condition not(currentDate=="2015-07-23":date)
    }
    rule allowAccess{
        permit
    }
}

然而,底线是:你想表达什么?区分时间检查和日期检查是否重要?作为2条规则更有意义吗?单一规则?这完全取决于你。

要编辑示例策略,您可以从此处下载 ALFA 插件

高温高压

于 2014-12-29T18:34:20.977 回答