簡體   English   中英

XACML是否實現“ NOT EQUAL”功能?

[英]Does XACML implement a “NOT EQUAL” function?

掃描通過OASIS XACML V3規范我沒有找到一個邏輯功能[任何參考這里 ]實現一個“串不等於”操作。 缺少的功能是:

<Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-not-equal">

問題:是否有理由省略此功能,或者是否有通過代碼修改使規則分析師繞過這種情況的良好實踐?

簡短的回答:不。

XACML中的功能及其使用

在XACML中,有些函數可以在目標內部使用,而某些函數只能在內部條件使用。

您可以在目標中使用的所有功能也可以在條件中使用,但事實並非如此。

您可以在目標中使用的唯一功能是:

  • 僅接受兩個參數,
  • 第一個參數必須是靜態值
  • 第二個參數是一個屬性。
  • 返回一個布爾值

例如stringEquals("manager", role)可以在目標內部使用stringEquals("manager", role) stringEqualsurn:oasis:names:tc:xacml:1.0:function:string-equal的ALFA表示法。

這是示例Target的源代碼。

  <xacml3:Target>
    <xacml3:AnyOf>
      <xacml3:AllOf>
        <xacml3:Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
          <xacml3:AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">manager</xacml3:AttributeValue>
          <xacml3:AttributeDesignator Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject"  AttributeId="user.role" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
        </xacml3:Match>
      </xacml3:AllOf>
    </xacml3:AnyOf>
  </xacml3:Target>

為什么沒有字符串不等於?

首先要牢記一個屬性,例如角色實際上是一袋價值觀。 袋子可以是空的,具有一個值或具有多個值。

當您編寫stringEquals(“ manager”,role)時,您真正要說的是角色的值列表中至少有一個等於“ manager”值的值。 換句話說,如果您既是經理又是設計師,那么您的政策/規則將適用。

現在相反嗎? 什么是stringNotEquals(“ manager”,role)? 是否還會存在至少一個不等於管理者的值? 那么在那種情況下,如果我是經理和設計師,那么我就不是經理。 還是我

因為XACML默認情況下認為所有屬性都是多值的,所以您不能擁有一個名為stringNotEquals的函數。

那么我該如何表達負面案例呢?

但是,有一些解決方法。 您可以在某些情況下表示否定情況,例如通過執行以下操作(使用ALFA表示法):

not ( stringEquals(stringOneAndOnly(role),"manager") )

得到的XACML是:

 <xacml3:Condition >
      <xacml3:Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:not">
           <xacml3:Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
                <xacml3:Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-one-and-only">
                     <xacml3:AttributeDesignator Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject"  AttributeId="user.role" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                </xacml3:Apply>
                <xacml3:AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">manager</xacml3:AttributeValue>
           </xacml3:Apply>
      </xacml3:Apply>
 </xacml3:Condition>

我希望這有幫助...

臨時地,我通過將“ Match”語句更改為基於REGEX的邏輯來發現了一個旁路,該邏輯提供了實現以下功能的函數:“在字符串中不包含單詞XYZ”,如以下示例所示:

 <!-- Not Equal operator executed by the REGEX -->  
<Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-regexp-match">
 <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">^((?!XYZ).)*$</AttributeValue>

該代碼的結構不是很好,也不可讀,但是它提供了“ NOT EQUAL”所缺少的功能。 請讓我知道有更好的解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM