首页 > 解决方案 > XACML 正则表达式不匹配

问题描述

我们有一个包含很多规则的 XACML 文件,我们不想处理所有规则。我们正在尝试添加一个不会适用于所有规则且仅适用于某些规则的 Target 标签。

我们尝试使用正则表达式"abc:def:gh:1234.*"并希望仅处理与该表达式匹配的属性的规则

但是有这种模式的规则不匹配,我们想匹配这种模式

"abc:def:gh:1234:test"

"abc:def:gh:1234-test"

只有此字符串模式与 "abc:def:gh:1234.Test"4 之后的任何内容与“。”匹配。正在匹配

我们只需要检查字符串的开头并尝试过

"^abc:def:gh:1234"

我们也尝试过包含

"abc:def:gh:1234"

但没有一个正则表达式有效,非常感谢任何对正则表达式的帮助

<Target>
  <AnyOf>
    <AllOf>
      <Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-regexp-match">
        <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">abc:def:gh:1234.*</AttributeValue>
        <AttributeDesignator AttributeId="jpmc:resource:resource-id" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
      </Match>
    </AllOf>
  </AnyOf>
</Target>

标签: regexregex-negationxacmlabac

解决方案


您应该避免使用正则表达式(通常),尤其是在 XACML 中。XACML 策略旨在易于阅读。尝试使用以下任何功能(表示法):

  • 字符串相等
  • stringEndsWith
  • stringStartsWith
  • 字符串包含

或者,您应该处理/规范化策略执行点 (PEP) 或策略信息点 (PIP) 中的值。Axiomatics(我工作的地方)有一个 Groovy PIP,它可以让你做这些事情并保持你的策略干净。


推荐阅读