regex - 当 XACML 谈到 "regexp-match"时,它指的是哪个正则表达式规则?

标签 regex authorization access-control xacml abac

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

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

我是否错过了一组明确的规则或字符串正则表达式匹配和/或任何 URI 正则表达式匹配的想象力来源?

感谢您容忍我的咆哮。

顺便说一句,我发现没有针对 XACML 的解析器仅针对缺少的 DTD 发出警告并继续解析真实错误。

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

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

最佳答案

一个问题中有这么多问题。我建议你把它分开。另外,你的问题很宽泛。不是高质量答案的最佳格式,但这里是。

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

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

我为 Axiomatics 客户编写了很多策略,我唯一必须使用正则表达式匹配的情况是数据脏且未规范化时。

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

A person can view a medical record if they own the record or if the record is owned by a dependent.

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

在同一类别中,您可以添加属性选择器,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 引擎(Java/开源/新)由 AT&T 编写的新实现
  • Axiomatics Policy Server(Java 和 .Net/闭源 - 商业/活跃)ABAC 和 XACML 的商业解决方案(免责声明:我在那里工作)。

关于regex - 当 XACML 谈到 "regexp-match"时,它指的是哪个正则表达式规则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33131489/

相关文章:

regex - 在 N 个字符后最接近的逗号处拆分一个长字符串并循环每个字符串

javascript - 重复一个可能不存在的匹配模式

java - 在 Jersey ResourceFilterFactory 中获取实际参数值

swift - 所需初始化的访问控制

php - 在 userfrosting 中将父组添加到用户组的最佳方法是什么?

Java - 将文本拆分为没有明显分隔符的数组

mysql - 需要正则表达式来查找 "xxxx",,,,, 的 "yyyy",,,, 并删除

mongodb - 通过 mongodb 中的字段与授权 token 授权资源(例如图像)访问?

c# - 通过外部(自定义)服务的 ASP 核心登录

javascript - 以更简单的方式为多个域访问控制允许来源