当XACML谈到“正则表达式匹配”时,它指的是哪个正则表达式规则?

时间:2015-10-14 17:05:31

标签: regex authorization access-control xacml abac

我在正则表达式上耗费了大量时间,我认为这些表达式简洁准确地表示了我想要允许的资源URI和操作字符串范围,但它为每个看似有效的匹配返回Deny。我还没有看到一个有用的,真实的世界(而不是hello-world)XACML正则表达式的例子,而且我看到的许多甚至没有逃脱IP地址中的点!

正则表达式在不同的上下文中表示不同的东西,这就是为什么Perl正则表达式具体被称为这样的原因。使用通用术语“regexp”对我没有任何意义,正如我见过的许多XACML示例都没有告诉我任何用于扩展的内容。

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

感谢你容忍我的咆哮。

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

最后一个问题:build.gradle中的这个依赖项摘录中是否有任何内容可能阻止正则表达式匹配,即使是像我见过的XACML记录的那些wimpy和simpleminded一样?

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

1 个答案:

答案 0 :(得分:1)

一个问题中有这么多问题。我建议你拆分它。此外,您的问题非常广泛。对于高质量的答案来说,这不是最好的格式,但这里也是如此。

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

实际上,您将手指放在正确的位置:使用XACML的基于属性的良好编写访问控制策略可能不应使用正则表达式。当您用于制定决策的属性值未规范化时,通常使用正则表达式。例如,想象您想要将电话号码与北卡罗来纳州罗利(919区号)匹配。您将使用正则表达式(或者更简单地使用stringIsIn)。但事实上,你应该做的是给定电话号码返回区号的功能,或者 - 更好的是 - 给出电话号码的政策信息返回它所属的城镇。

我为Axiomatics客户编写了很多政策,而且我唯一需要使用regexp-match的时候是数据很脏且没有规范化。

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

  

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

这是有意义的,人性化的。 Regexp不是。

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

2。 XACML解析器

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

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

在任何情况下,解析器都不会告诉您策略是否有意义。如果您编写的目标指示> 1且a< 1(这将永远不会发生),则解析器不会告诉您存在无效表达式。从它的角度看它并非无效。

如果我没记错的话,HerasAF已经很老了。我可以选择以下任何一项:

  • SunXACML(Java /开源/未主动维护),所有实现的母亲
  • ATT XACML Engine(Java / Open Source / new)AT& T编写的新实现
  • Axiomatics Policy Server(Java& .Net / Closed Source - 商业/主动)ABAC和XACML的商业解决方案(免责声明:我在那里工作)。