查看 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><\s*script\b[^>]*>[^<]+<\s*\/\s*script\s*> </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 編碼為
<\s*script\b[^>]*>[^<]+<\s*\/\s*script\s*>
。
另外,如果您的規則運算式含有正斜線 (/),您就必須逸出
方法是設定<JSONPayload>
escapeSlashCharacter
屬性設為 true
。
比對時不區分大小寫
不區分大小寫的比對是常見的用途。這個例子說明瞭
您可在規則運算式中使用建構 (?i)
完成這項動作。在本
舉例來說,DELETE
、delete
和 Delete
會
會傳回 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 編碼格式: <!--#(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 編碼格式: <\s*script\b[^>]*>[^<]+<\s*/\s*script\s*> |
Java 例外狀況插入 |
.*?Exception in thread.* |
在含有 XML 或 JSON 酬載的要求中設定 Content-Type 標頭
規則運算式保護政策的酬載可包含以下內容 元素:
-
<XMLPayload>
元素:指定需要從中擷取資訊來源 XML 酬載,並根據提供的規則運算式進行評估。如果您在政策中使用
<XMLPayload>
, 要求的Content-Type
標頭必須是 XML 內容類型,例如application/xml
或text/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>
<RegularExpressionProtection> 屬性
<RegularExpressionProtection async="false" continueOnError="false" enabled="true" name="Regular-Expression-Protection-1">
下表說明所有政策父項元素的共同屬性:
屬性 | 說明 | 預設 | 存在必要性 |
---|---|---|---|
name |
政策的內部名稱。 視需要使用 |
不適用 | 必填 |
continueOnError |
如果設為「 如果設為 |
false | 選用 |
enabled |
如要強制執行政策,請設為 設為 |
true | 選用 |
async |
此屬性已淘汰。 |
false | 已淘汰 |
<DisplayName>元素
除 name
屬性外,一併使用
管理 UI Proxy 編輯器,使用不同的自然語言名稱。
<DisplayName>Policy Display Name</DisplayName>
預設 |
不適用 如果省略這個元素,政策的 |
---|---|
存在必要性 | 選用 |
類型 | 字串 |
<Source>元素
表示需要從哪些訊息擷取資訊。
省略 <Source>
元素時,值會預設為
message
。例如 <Source>message</Source>
。設為
message
,政策附加要求時會使用要求訊息做為來源
流程同樣地,政策會在附加回應流程時使用回應訊息。
如果無法解析來源訊息,或無法解析為非訊息類型,就會顯示政策 傳回錯誤。
<Source>response</Source>
預設: | 不適用 |
所在地: | 選用 |
類型: | 字串 |
<IgnoreUnresolvedVariables>元素
判斷政策在遇到以下變數時是否會傳回錯誤: 無法解決
如果設為 false
(預設值),當無法解析時,政策會傳回錯誤
變數。如果設為 true
,系統會將未解析的變數視為空白
string (Null)。
<IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
預設: | false |
所在地: | 選用 |
類型: | 布林值 |
<URIPath>元素
指定需要從要求 URI 路徑擷取並評估資訊
與所提供的規則運算式相互比對您至少必須提供一個
<Pattern>
元素,指定要比對的規則運算式模式。
<URIPath> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </URIPath>
預設: | 不適用 |
所在地: | 選用 |
類型: | 不適用 |
<QueryParam>元素
指定需要從要求查詢參數中擷取資訊,並
會根據提供的規則運算式進行評估您至少必須提供一個
<Pattern>
元素,指定要比對的規則運算式模式。
<QueryParam name="a-query-param"> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </QueryParam>
預設: | 不適用 |
所在地: | 選用 |
類型: | 不適用 |
屬性
屬性 | 說明 | 預設 | 存在必要性 |
---|---|---|---|
名稱 | 需要擷取其資訊的要求查詢參數名稱 評估作業是否符合所提供的規則運算式 | 不適用 | 必填 |
<Header>元素
指定系統需要從要求和回應標頭擷取資訊,並
會根據提供的規則運算式進行評估您至少必須提供一個
<Pattern>
元素,指定要比對的規則運算式模式。
<Header name="a-header"> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </Header>
預設: | 不適用 |
所在地: | 選用 |
類型: | 不適用 |
屬性
屬性 | 說明 | 預設 | 存在必要性 |
---|---|---|---|
名稱 |
需要擷取資訊的要求與回應標頭名稱 以便根據所提供的規則運算式進行評估 |
不適用 | 必填 |
<FormParam>元素
指定需要從要求表單參數中擷取並評估資訊
與所提供的規則運算式相互比對您至少必須提供一個
<Pattern>
元素,指定要比對的規則運算式模式。
<FormParam name="a-form-param"> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </FormParam>
預設: | 不適用 |
所在地: | 選用 |
類型: | 不適用 |
屬性
屬性 | 說明 | 預設 | 存在必要性 |
---|---|---|---|
名稱 |
需要擷取其資訊的要求表單參數名稱 評估作業是否符合所提供的規則運算式 |
不適用 | 必填 |
<Variable>元素
指定需要從指定變數中擷取和評估資訊 指定的規則運算式
<Variable name="request.content"> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </Variable>
預設: | 不適用 |
所在地: | 選用 |
類型: | 不適用 |
屬性
屬性 | 說明 | 預設 | 存在必要性 |
---|---|---|---|
名稱 |
為評估作業需要擷取資訊的變數名稱 與所提供的規則運算式相互比對 |
不適用 | 必填 |
<XMLPayload>元素
指定需要從 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>
預設: | 不適用 |
所在地: | 選用 |
類型: | 不適用 |
<XMLPayload>/<Namespaces>元素
指定要用於 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>
預設: | 不適用 |
所在地: | 選用 |
類型: | 字串 |
<XMLPayload>/<Namespaces>/<Namespace>元素
將各個命名空間 用於 XPath 評估中<Namespaces> <Namespace prefix="apigee">http://www.apigee.com</Namespace> </Namespaces>
預設: | 不適用 |
所在地: | 選用 |
類型: | 字串 |
屬性
屬性 | 說明 | 預設 | 存在必要性 |
---|---|---|---|
前置字串 |
提供前置字串,協助限定特定命名空間。 |
不適用 | 必填 |
<XMLPayload>/<XPath>元素
指定 XPath 。<XPath> <Expression>/apigee:Greeting/apigee:User</Expression> <Type>string</Type> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </XPath>
預設: | 不適用 |
所在地: | 選用 |
類型: | 不適用 |
<XMLPayload>/<XPath>/<Expression> 元素
指定為變數定義的 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>
預設: | 不適用 |
所在地: | 選用 |
類型: | 字串 |
<XMLPayload>/<XPath>/<Type> 元素
指定資料類型,<XPath> <Expression>/apigee:Greeting/apigee:User</Expression> <Type>string</Type> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </XPath>
預設: | 字串 |
所在地: | 選用 |
類型: | 字串 |
有效值: |
字串。有效值包括 |
<XMLPayload>/<XPath>/<Pattern> 元素
定義規則運算式模式。如果
您的 <Pattern>
元素包含 XML 保留字元 ("、&、'、< 或
.),您必須先將該網址進行 XML 編碼,才能予以加上。
<XPath> <Expression>/apigee:Greeting/apigee:User</Expression> <Type>string</Type> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </XPath>
預設: | 不適用 |
所在地: | 必填 |
類型: | 字串 |
<JSONPayload>元素
指定需要從 JSON 酬載中擷取資訊,並依照 規則運算式。
<JSONPayload> <JSONPath> <Expression>$.store.book[*].author</Expression> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </JSONPath> </JSONPayload>
預設: | 不適用 |
所在地: | 選用 |
類型: | 不適用 |
屬性
屬性 | 說明 | 預設 | 存在必要性 |
---|---|---|---|
escapeSlashCharacter |
設為 |
true | 選用 |
<JSONPayload>/<JSONPath>/<Expression>元素
指定為變數定義的 JSONPath 運算式。
<JSONPath> <Expression>$.store.book[*].author</Expression> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </JSONPath>
預設: | 不適用 |
所在地: | 選用 |
類型: | 字串 |
<JSONPayload>/<JSONPath>/<Pattern> 元素
定義規則運算式模式。如果您的
<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} | build |
DuplicatePrefix | regexProtection {0}:前置字元重複 {1} | build |
EmptyJSONPathExpression | regexProtection {0}:空白 JSONPath 運算式 | build |
EmptyXPathExpression | regexProtection {0}:空白的 XPath 運算式 | build |
InvalidRegularExpression | regexProtection {0}:無效的規則運算式 {1},內容 {2} | build |
JSONPathCompilationFailed | regexProtection {0}:無法編譯 jsonpath {1}。內容{2} | build |
NONEmptyPrefixMappedToEmptyURI | regexProtection {0}:非空白前置字串 {1} 無法對應至空白 URI | build |
NoPatternsToEnforce | regexProtection {0}:{1} 中沒有可強制執行的模式 | build |
NothingToEnforce | RegularExpressionProtection {0}:至少須有一個 URIPath、QueryParam、Header、FormParam、XMLPayload 和 JSONPayload | build |
XPathCompilationFailed | regexProtection {0}:無法編譯 xpath {1}。內容{2} | build |
錯誤變數
系統會在這項政策觸發錯誤時設定這些變數。詳情請參閱「政策錯誤的注意事項」。
Variables | 地點 | 範例 |
---|---|---|
fault.name="fault_name" |
fault_name 是錯誤的名稱,如上表所列。 | fault.name Matches "ThreatDetected" |
regularexpressionprotection.policy_name.failed |
policy_name 是擲回錯誤的政策使用者指定的名稱。 | regularexpressionprotection.Regular-Expressions-Protection-1.failed = true |