我在正则表达式上耗费了大量时间,我认为这些表达式简洁准确地表示了我想要允许的资源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'
答案 0 :(得分:1)
一个问题中有这么多问题。我建议你拆分它。此外,您的问题非常广泛。对于高质量的答案来说,这不是最好的格式,但这里也是如此。
实际上,您将手指放在正确的位置:使用XACML的基于属性的良好编写访问控制策略可能不应使用正则表达式。当您用于制定决策的属性值未规范化时,通常使用正则表达式。例如,想象您想要将电话号码与北卡罗来纳州罗利(919区号)匹配。您将使用正则表达式(或者更简单地使用stringIsIn
)。但事实上,你应该做的是给定电话号码返回区号的功能,或者 - 更好的是 - 给出电话号码的政策信息返回它所属的城镇。
我为Axiomatics客户编写了很多政策,而且我唯一需要使用regexp-match的时候是数据很脏且没有规范化。
反对使用regexp-match的另一个论点是它使政策更难理解。你想保持简单,例如。
如果一个人拥有该记录,或者如果他们拥有该记录,则可以查看该病历 记录由受抚养人拥有。
这是有意义的,人性化的。 Regexp不是。
在同一类别中,您可以添加属性选择器,在XACML中使用此功能来定义XPath表达式以从XML内容中提取信息。
根据定义,XACML解析器是XML解析器,仅验证文档的结构。这就是XML解析的工作原理。这就是DTD(或XSD)的工作原理。如果使用无效值,则不会收到警告。例如,在XACML中,如果您使用伪数据类型,例如bla:fake:NotBoolean,然后针对XACML模式的普通XML解析器不会抱怨。
您需要实施其他逻辑。我很确定SunXACML引擎会给你这个。或者,Axiomatics引擎将。它会抱怨存在未知数据类型,结合算法或函数。
在任何情况下,解析器都不会告诉您策略是否有意义。如果您编写的目标指示> 1且a< 1(这将永远不会发生),则解析器不会告诉您存在无效表达式。从它的角度看它并非无效。
如果我没记错的话,HerasAF已经很老了。我可以选择以下任何一项: