規則運算式運算式

查看 Apigee Edge 說明文件。
前往 Apigee X說明文件
資訊

結果

從訊息中擷取資訊 (例如 URI 路徑、查詢參數、標頭、表單參數、 變數、XML 酬載或 JSON 酬載),並據此評估內容 運算式。如果任何指定的規則運算式判定為 true,郵件就會視為 而遭到拒絕。

影片

請觀看以下影片,進一步瞭解規則運算式保護政策。

影片 說明
安全防護 不受 SQL 插入攻擊 (New Edge) 使用以下項目的規則運算式保護政策,防範 SQL 插入攻擊: 全新 Edge 體驗 UI
安全防護 不受 SQL 插入攻擊 (傳統版 Edge) 使用以下項目的規則運算式保護政策,防範 SQL 插入攻擊: 傳統版 Edge UI

範例

GitHub

規則運算式保護功能 GitHub 上的範例說明如何攔截透過 查詢參數。這個範例也說明瞭將一般 400 錯誤設定 錯誤狀態,以便防止駭客從回應中取得任何實用資訊。

JavaScript 包含攻擊防護

<RegularExpressionProtection name="JsonPathRegExProtection">
    <DisplayName>Regular Expression Protection 1</DisplayName>
    <Source>request</Source>
    <JSONPayload escapeSlashCharacter="true">
       <JSONPath>
          <Expression>$</Expression>
          <Pattern>&lt;\s*script\b[^&gt;]*&gt;[^&lt;]+&lt;\s*\/\s*script\s*&gt;
          </Pattern>
          <Pattern>n\s*\\\\\s*slash</Pattern>
          <Pattern>n\s*\/\s*slash</Pattern>
          <Pattern>n\s*\\"\s*quotes</Pattern>
          <Pattern>n\s*\\b\s*space</Pattern>
          <Pattern>n\s*\\f\s*forwardfeed</Pattern>
          <Pattern>n\s*\\n\s*newline</Pattern>
          <Pattern>n\s*\\r\s*carria</Pattern>
          <Pattern>n\s*\\t\s*tab</Pattern>
          <Pattern>n\s*\\uFFFF\s*hex</Pattern>
       </JSONPath>
    </JSONPayload>
 </RegularExpressionProtection>

上方範例說明如何使用 RegularExpressionProtection 政策來評估 JavaScript 的 JSON 酬載包括攻擊。具體來說,這是 <JSONPath>/<Expression> 會根據 <JSONPath>/<Pattern> 中的規則運算式。

如果網頁的規則運算式 <JSONPath>/<Pattern> 包含 XML 保留字元 例如 ("、&、'、< 或 .),您必須先對其進行 XML 編碼,才能將之加入政策 XML 中 設定檔以上述範例中,規則運算式 「<\s*script\b[^>]*>[^<]+<\s*\/\s*script\s*>」已 XML 編碼為 &lt;\s*script\b[^&gt;]*&gt;[^&lt;]+&lt;\s*\/\s*script\s*&gt;

另外,如果您的規則運算式含有正斜線 (/),您就必須逸出 方法是設定<JSONPayload> escapeSlashCharacter 屬性設為 true

比對時不區分大小寫

不區分大小寫的比對是常見的用途。這個例子說明瞭 您可在規則運算式中使用建構 (?i) 完成這項動作。在本 舉例來說,DELETEdeleteDelete 會 會傳回 true。

<Pattern>[\s]*(?i)((delete)|(exec)|(drop\s*table)|(insert)|(shutdown)|(update)|(\bor\b))</Pattern>

關於規則運算式保護政策

Apigee Edge 可讓您設定規則運算式, 在執行階段中針對 API 流量進行評估,以找出遵循的常見內容分級威脅 特定模式

規則運算式 (簡稱 regex) 是一組字串 這個類別能在字串中指定模式規則運算式可讓內容以程式輔助方式呈現 會評估哪個符記例如,規則運算式可用來評估電子郵件地址 確保結構正確詳情請參閱「一般 運算式

RegularExpressionProtection 最常見的用途是評估 JSON 和 XML 惡意內容的酬載

沒有任何規則運算式可以消除所有以內容為基礎的攻擊,而且多項機制應該 進而實現縱深防禦本節將說明 但排除內容

排除範例 圖案

規則運算式必須在政策的 XML 設定檔中採用 XML 編碼。

名稱 規則運算式
SQL 注入
[\s]*((delete)|(exec)|(drop\s*table)|(insert)|(shutdown)|(update)|(\bor\b))
伺服器端納入插入
<!--#(include|exec|echo|config|printenv)\s+.*

採用 XML 編碼格式:

&lt;!--#(include|exec|echo|config|printenv)\s+.*
XPath 縮寫語法插入
(/(@?[\w_?\w:\*]+(\[[^]]+\])*)?)+
XPath 展開語法插入
/?(ancestor(-or-self)?|descendant(-or-self)?|following(-sibling))
JavaScript 插入
<\s*script\b[^>]*>[^<]+<\s*/\s*script\s*>

採用 XML 編碼格式:

&lt;\s*script\b[^&gt;]*&gt;[^&lt;]+&lt;\s*/\s*script\s*&gt;
Java 例外狀況插入
.*?Exception in thread.*

在含有 XML 或 JSON 酬載的要求中設定 Content-Type 標頭

規則運算式保護政策的酬載可包含以下內容 元素:

  • <XMLPayload> 元素:指定需要從中擷取資訊來源 XML 酬載,並根據提供的規則運算式進行評估。

    如果您在政策中使用 <XMLPayload>, 要求的 Content-Type 標頭必須是 XML 內容類型,例如 application/xmltext/xml

  • <JSONPayload> 元素:指定需要擷取的資訊 並根據提供的規則運算式進行評估

    如果您在政策中使用 <JSONPayload>, 要求的 Content-Type 標頭必須是 JSON 內容類型,例如 application/json

一般來說,您會設計 API 來接受 XML 或 JSON。不過, API 接受這兩種 API接著,您可以建立規則運算式保護政策 同時使用 <XMLPayload><JSONPayload> 元素。 視 Content-Type 標頭。

元素參照

元素參考可說明 RegularExpressionProtection 的元素和屬性 政策。

<RegularExpressionProtection async="false" continueOnError="false" enabled="true" name="Regular-Expression-Protection-1">
   <DisplayName>Regular Expression Protection 1</DisplayName>
   <Source>response</Source>
   <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
   <URIPath>
     <Pattern>REGEX PATTERN</Pattern>
     <Pattern>REGEX PATTERN</Pattern>
   </URIPath>
   <QueryParam name="a-query-param">
     <Pattern>REGEX PATTERN</Pattern>
     <Pattern>REGEX PATTERN</Pattern>
   </QueryParam>
   <Header name="a-header">
     <Pattern>REGEX PATTERN</Pattern>
     <Pattern>REGEX PATTERN</Pattern>
   </Header>
   <FormParam name="a-form-param">
     <Pattern>REGEX PATTERN</Pattern>
     <Pattern>REGEX PATTERN</Pattern>
   </FormParam>
   <Variable name="request.content">
     <Pattern>REGEX PATTERN</Pattern>
     <Pattern>REGEX PATTERN</Pattern>
   </Variable>
   <XMLPayload>
     <Namespaces>
       <Namespace prefix="apigee">http://www.apigee.com</Namespace>
     </Namespaces>
     <XPath>
       <Expression>/apigee:Greeting/apigee:User</Expression>
       <Type>string</Type>
       <Pattern>REGEX PATTERN</Pattern>
       <Pattern>REGEX PATTERN</Pattern>
     </XPath>
   </XMLPayload>
   <JSONPayload>
     <JSONPath>
       <Expression>$.store.book[*].author</Expression>
       <Pattern>REGEX PATTERN</Pattern>
       <Pattern>REGEX PATTERN</Pattern>
     </JSONPath>
    </JSONPayload>
</RegularExpressionProtection>

&lt;RegularExpressionProtection&gt; 屬性

<RegularExpressionProtection async="false" continueOnError="false" enabled="true" name="Regular-Expression-Protection-1">

下表說明所有政策父項元素的共同屬性:

屬性 說明 預設 存在必要性
name

政策的內部名稱。name 屬性的值可以 包含英文字母、數字、空格、連字號、底線和半形句號。此值不能 超過 255 個半形字元

視需要使用 <DisplayName> 元素,為政策加上標籤: 管理使用者介面 Proxy 編輯器,使用不同的自然語言名稱。

不適用 必填
continueOnError

如果設為「false」,系統會在政策失敗時傳回錯誤。這是可預期的情況 大多數政策的行為

如果設為 true,即使政策已發生,流程執行作業仍會繼續執行 失敗。

false 選用
enabled

如要強制執行政策,請設為 true

設為 false 即可停用政策。這項政策不會 仍會強制執行 政策。

true 選用
async

此屬性已淘汰。

false 已淘汰

&lt;DisplayName&gt;元素

name 屬性外,一併使用 管理 UI Proxy 編輯器,使用不同的自然語言名稱。

<DisplayName>Policy Display Name</DisplayName>
預設

不適用

如果省略這個元素,政策的 name 屬性值會是

存在必要性 選用
類型 字串

&lt;Source&gt;元素

表示需要從哪些訊息擷取資訊。

省略 <Source> 元素時,值會預設為 message。例如 <Source>message</Source>。設為 message,政策附加要求時會使用要求訊息做為來源 流程同樣地,政策會在附加回應流程時使用回應訊息。

如果無法解析來源訊息,或無法解析為非訊息類型,就會顯示政策 傳回錯誤。

<Source>response</Source>
預設: 不適用
所在地: 選用
類型: 字串

&lt;IgnoreUnresolvedVariables&gt;元素

判斷政策在遇到以下變數時是否會傳回錯誤: 無法解決

如果設為 false (預設值),當無法解析時,政策會傳回錯誤 變數。如果設為 true,系統會將未解析的變數視為空白 string (Null)。

<IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
預設: false
所在地: 選用
類型: 布林值

&lt;URIPath&gt;元素

指定需要從要求 URI 路徑擷取並評估資訊 與所提供的規則運算式相互比對您至少必須提供一個 <Pattern> 元素,指定要比對的規則運算式模式。

<URIPath>
  <Pattern>REGEX PATTERN</Pattern>
  <Pattern>REGEX PATTERN</Pattern>
</URIPath>
預設: 不適用
所在地: 選用
類型: 不適用

&lt;QueryParam&gt;元素

指定需要從要求查詢參數中擷取資訊,並 會根據提供的規則運算式進行評估您至少必須提供一個 <Pattern> 元素,指定要比對的規則運算式模式。

<QueryParam name="a-query-param">
  <Pattern>REGEX PATTERN</Pattern>
  <Pattern>REGEX PATTERN</Pattern>
</QueryParam>
預設: 不適用
所在地: 選用
類型: 不適用

屬性

屬性 說明 預設 存在必要性
名稱 需要擷取其資訊的要求查詢參數名稱 評估作業是否符合所提供的規則運算式 不適用 必填

&lt;Header&gt;元素

指定系統需要從要求和回應標頭擷取資訊,並 會根據提供的規則運算式進行評估您至少必須提供一個 <Pattern> 元素,指定要比對的規則運算式模式。

<Header name="a-header">
  <Pattern>REGEX PATTERN</Pattern>
  <Pattern>REGEX PATTERN</Pattern>
</Header>
預設: 不適用
所在地: 選用
類型: 不適用

屬性

屬性 說明 預設 存在必要性
名稱

需要擷取資訊的要求與回應標頭名稱 以便根據所提供的規則運算式進行評估

不適用 必填

&lt;FormParam&gt;元素

指定需要從要求表單參數中擷取並評估資訊 與所提供的規則運算式相互比對您至少必須提供一個 <Pattern> 元素,指定要比對的規則運算式模式。

<FormParam name="a-form-param">
   <Pattern>REGEX PATTERN</Pattern>
   <Pattern>REGEX PATTERN</Pattern>
</FormParam>
預設: 不適用
所在地: 選用
類型: 不適用

屬性

屬性 說明 預設 存在必要性
名稱

需要擷取其資訊的要求表單參數名稱 評估作業是否符合所提供的規則運算式

不適用 必填

&lt;Variable&gt;元素

指定需要從指定變數中擷取和評估資訊 指定的規則運算式

<Variable name="request.content">
   <Pattern>REGEX PATTERN</Pattern>
   <Pattern>REGEX PATTERN</Pattern>
</Variable>
預設: 不適用
所在地: 選用
類型: 不適用

屬性

屬性 說明 預設 存在必要性
名稱

為評估作業需要擷取資訊的變數名稱 與所提供的規則運算式相互比對

不適用 必填

&lt;XMLPayload&gt;元素

指定需要從 XML 酬載中擷取資訊,並依照 規則運算式。

<XMLPayload>
   <Namespaces>
      <Namespace prefix="apigee">http://www.apigee.com</Namespace>
   </Namespaces>
   <XPath>
      <Expression>/apigee:Greeting/apigee:User</Expression>
      <Type>string</Type>
      <Pattern>REGEX PATTERN</Pattern>
      <Pattern>REGEX PATTERN</Pattern>
   </XPath>
</XMLPayload>
預設: 不適用
所在地: 選用
類型: 不適用

&lt;XMLPayload&gt;/&lt;Namespaces&gt;元素

指定要用於 XPath 評估作業的命名空間。

<XMLPayload>
   <Namespaces>
      <Namespace prefix="apigee">http://www.apigee.com</Namespace>
   </Namespaces>
   <XPath>
      <Expression>/apigee:Greeting/apigee:User</Expression>
      <Type>string</Type>
      <Pattern>REGEX PATTERN</Pattern>
      <Pattern>REGEX PATTERN</Pattern>
   </XPath>
</XMLPayload>
預設: 不適用
所在地: 選用
類型: 字串

&lt;XMLPayload&gt;/&lt;Namespaces&gt;/&lt;Namespace&gt;元素

將各個命名空間 用於 XPath 評估中
<Namespaces>
   <Namespace prefix="apigee">http://www.apigee.com</Namespace>
</Namespaces>
預設: 不適用
所在地: 選用
類型: 字串

屬性

屬性 說明 預設 存在必要性
前置字串

提供前置字串,協助限定特定命名空間。

不適用 必填

&lt;XMLPayload&gt;/&lt;XPath&gt;元素

指定 XPath 。
<XPath>
   <Expression>/apigee:Greeting/apigee:User</Expression>
   <Type>string</Type>
   <Pattern>REGEX PATTERN</Pattern>
   <Pattern>REGEX PATTERN</Pattern>
</XPath>
預設: 不適用
所在地: 選用
類型: 不適用

&lt;XMLPayload&gt;/&lt;XPath&gt;/&lt;Expression&gt; 元素

指定為變數定義的 XPath 運算式。僅限 XPath 1.0 運算式 支援。例如: <Expression>/company/employee[@age>=$request.header.age]</Expression> 擷取年齡大於或等於 request.header.age
<XPath>
   <Expression>/apigee:Greeting/apigee:User</Expression>
   <Type>string</Type>
   <Pattern>REGEX PATTERN</Pattern>
   <Pattern>REGEX PATTERN</Pattern>
</XPath>
預設: 不適用
所在地: 選用
類型: 字串

&lt;XMLPayload&gt;/&lt;XPath&gt;/&lt;Type&gt; 元素

指定資料類型,
<XPath>
   <Expression>/apigee:Greeting/apigee:User</Expression>
   <Type>string</Type>
   <Pattern>REGEX PATTERN</Pattern>
   <Pattern>REGEX PATTERN</Pattern>
</XPath>
預設: 字串
所在地: 選用
類型: 字串
有效值:

字串。有效值包括 stringbooleanintlongfloatdoublenodeset

&lt;XMLPayload&gt;/&lt;XPath&gt;/&lt;Pattern&gt; 元素

定義規則運算式模式。如果 您的 <Pattern> 元素包含 XML 保留字元 ("、&、'、< 或 .),您必須先將該網址進行 XML 編碼,才能予以加上。

<XPath>
   <Expression>/apigee:Greeting/apigee:User</Expression>
   <Type>string</Type>
   <Pattern>REGEX PATTERN</Pattern>
   <Pattern>REGEX PATTERN</Pattern>
</XPath>
預設: 不適用
所在地: 必填
類型: 字串

&lt;JSONPayload&gt;元素

指定需要從 JSON 酬載中擷取資訊,並依照 規則運算式。

<JSONPayload>
   <JSONPath>
      <Expression>$.store.book[*].author</Expression>
      <Pattern>REGEX PATTERN</Pattern>
      <Pattern>REGEX PATTERN</Pattern>
   </JSONPath>
</JSONPayload>
預設: 不適用
所在地: 選用
類型: 不適用

屬性

屬性 說明 預設 存在必要性
escapeSlashCharacter

設為 true 即可逸出規則運算式中的所有正斜線 (/) 字元 <JSONPath>/<Pattern> 中的運算式。

true 選用

&lt;JSONPayload&gt;/&lt;JSONPath&gt;/&lt;Expression&gt;元素

指定為變數定義的 JSONPath 運算式。

<JSONPath>
   <Expression>$.store.book[*].author</Expression>
   <Pattern>REGEX PATTERN</Pattern>
   <Pattern>REGEX PATTERN</Pattern>
</JSONPath>
預設: 不適用
所在地: 選用
類型: 字串

&lt;JSONPayload&gt;/&lt;JSONPath&gt;/&lt;Pattern&gt; 元素

定義規則運算式模式。如果您的 <Pattern> 元素包含 XML 保留字元 ("、&、'、< 或 .)。 必須先進行 XML 編碼,才能新增

<JSONPath>
   <Expression>$.store.book[*].author</Expression>
   <Pattern>REGEX PATTERN</Pattern>
   <Pattern>REGEX PATTERN</Pattern>
</JSONPath>
預設: 不適用
所在地: 必填
類型: 字串

錯誤參考資料

本節說明這項政策觸發錯誤時,傳回的錯誤代碼和訊息,以及 Edge 設定的錯誤變數。如果您正在開發錯誤規則來處理錯誤,請務必瞭解這項資訊。如要擷取錯誤並引發自訂錯誤,請為政策根元素設定 continueOnError="true" 屬性。詳情請參閱「 政策錯誤須知」和「處理錯誤」。

Edge 政策傳回的錯誤遵循一致的格式,詳情請參閱錯誤代碼參考資料

執行階段錯誤

執行政策時,可能會發生這些錯誤。

錯誤代碼 訊息
ExecutionFailed 無法執行 RegularExpressionProtection StepDefinition {0}。原因:{1}
InstantiationFailed 無法將 RegularExpressionProtection StepDefinition {0} 例項化
NonMessageVariable 變數「{0}」無法解析為訊息
SourceMessageNotAvailable {0} 訊息不適用於 RegularExpressionProtection StepDefinition{1}
ThreatDetected 在 {0} 中偵測到規則運算式威脅:規則運算式:{1} 輸入:{2}
VariableResolutionFailed 無法解析變數「{0}」

部署錯誤

錯誤代碼 訊息 修正
CannotBeConvertedToNodeset regexProtection {0}:xpath {1} 的結果無法轉換為 nodeset。 內容{2}
DuplicatePrefix regexProtection {0}:前置字元重複 {1}
EmptyJSONPathExpression regexProtection {0}:空白 JSONPath 運算式
EmptyXPathExpression regexProtection {0}:空白的 XPath 運算式
InvalidRegularExpression regexProtection {0}:無效的規則運算式 {1},內容 {2}
JSONPathCompilationFailed regexProtection {0}:無法編譯 jsonpath {1}。內容{2}
NONEmptyPrefixMappedToEmptyURI regexProtection {0}:非空白前置字串 {1} 無法對應至空白 URI
NoPatternsToEnforce regexProtection {0}:{1} 中沒有可強制執行的模式
NothingToEnforce RegularExpressionProtection {0}:至少須有一個 URIPath、QueryParam、Header、FormParam、XMLPayload 和 JSONPayload
XPathCompilationFailed regexProtection {0}:無法編譯 xpath {1}。內容{2}

錯誤變數

系統會在這項政策觸發錯誤時設定這些變數。詳情請參閱「政策錯誤的注意事項」。

Variables 地點 範例
fault.name="fault_name" fault_name 是錯誤的名稱,如上表所列。 fault.name Matches "ThreatDetected"
regularexpressionprotection.policy_name.failed policy_name 是擲回錯誤的政策使用者指定的名稱。 regularexpressionprotection.Regular-Expressions-Protection-1.failed = true

結構定義

相關主題

JSON 威脅 保護政策

XML 威脅 保護政策