3

我已经在正则表达式上花费了很多时间,我认为这些正则表达式简洁准确地表示了我想要允许的资源 URI 和操作字符串范围,但是对于每个看似有效的匹配,它都会返回一个拒绝。我还没有看到一个有用的、真实的(而不是 hello-world)XACML 正则表达式的例子,而且我见过的许多例子甚至没有转义 IP 地址中的点!

正则表达式在不同的上下文中意味着不同的东西,这就是为什么 Perl 正则表达式被专门称为这样的原因。通用术语“regexp”的使用没有告诉我任何信息,正如我看到的许多 XACML 示例没有告诉我任何可以扩展的信息一样。

我是否错过了 string-regexp-match 和/或 anyURI-regexp-match 的一组明确的规则或富有想象力的用途?

谢谢你容忍我的咆哮。

顺便说一句,我没有发现 XACML 的解析器只对丢失的 DTD 发出警告并继续解析真正的错误。

最后一个问题:build.gradle 的这个依赖摘录中是否有任何内容可能会阻止正则表达式匹配,即使是像我看到的为 XACML 记录的一些内容那样懦弱和简单的东西?

compile group: 'org.herasaf', name:"xacml-core", version: 'latest.integration'
4

1 回答 1

2

一个问题就这么多问题。我建议你把它分开。另外,您的问题非常广泛。不是获得高质量答案的最佳格式,但这里有。

1. 为什么要在 XACML 中使用正则表达式匹配函数?

实际上,您的定位是正确的:使用 XACML 编写良好的基于​​属性的访问控制策略可能不应该使用正则表达式。当您用于做出决策的属性值未标准化时,您通常会使用正则表达式。例如,假设您想将电话号码与北卡罗来纳州罗利(919 区号)匹配。您将使用正则表达式(或者更简单的 a stringIsIn)。但实际上,您应该做的要么是给定电话号码返回区号的函数,要么 - 更好的是 - 给定电话号码返回其所属城镇的策略信息。

我为 Axiomatics 客户编写了很多策略,而我唯一需要使用 regexp-match 的时候是数据脏且未标准化的情况。

反对使用 regexp-match 的另一个论点是它使策略更难理解。你想保持简单,例如

如果一个人拥有病历或该病历由受抚养人所有,则他们可以查看病历。

这是有意义的和人类可读的。正则表达式不是。

在同一类别中,您可以添加属性选择器,这是 XACML 中定义 XPath 表达式以从 XML 内容中提取信息的功能。

2. XACML 解析器

根据定义,XACML 解析器是仅验证文档结构的 XML 解析器。这就是 XML 解析的工作原理。这就是DTD(或XSD)的工作方式。如果您使用无效值,您将不会收到警告。例如,在 XACML 中,如果您使用假数据类型,例如 bla:fake:NotBoolean,那么针对 XACML 模式的纯 XML 解析器不会抱怨。

您需要实现额外的逻辑。我很确定 SunXACML 引擎会给你这个。或者,Axiomatics 引擎将。它会抱怨存在未知的数据类型,组合算法或函数。

无论如何,没有一个解析器会告诉您该策略是否有意义。如果您编写的目标是 a>1 AND a<1(这永远不会发生),则解析器不会告诉您存在无效的表达式。从它的角度来看,它并不是无效的。

如果我没记错的话,HerasAF 已经很老了。我会尝试以下任何一项:

  • SunXACML(Java / 开源 / 未积极维护),所有实现之母
  • ATT XACML Engine (Java / Open Source / new) 由 AT&T 编写的新实现
  • Axiomatics Policy Server (Java & .Net / Closed Source - Commercial / active) ABAC 和 XACML 的商业解决方案(免责声明:我在那里工作)。
于 2015-10-15T23:39:56.557 回答