Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin. bilgi
Ne
Bir mesajdan bilgi çıkarır (örneğin URI Yolu, Sorgu Param, Başlık, Form Param, Değişken, XML Yükü veya JSON Yükü) ve bu içeriği önceden tanımlanmış normal ifadelere göre değerlendirir. Belirtilen normal ifadelerden herhangi biri doğru olarak değerlendirilirse mesaj tehdit olarak değerlendirilir ve reddedilir.
Videolar
Normal İfade Koruması politikası hakkında daha fazla bilgi edinmek için aşağıdaki videoları izleyin.
Video | Açıklama |
---|---|
SQL yerleştirme saldırılarına karşı koruma (Yeni Edge) | New Edge deneyimi kullanıcı arayüzündeki Normal İfade Koruması politikasını kullanarak SQL yerleştirme saldırılarına karşı koruma sağlayın. |
SQL yerleştirme saldırılarına karşı koruma (Klasik Edge) | Klasik Edge kullanıcı arayüzündeki Normal İfade Koruması politikasını kullanarak SQL yerleştirme saldırılarına karşı koruma sağlayın. |
Sana Özel
GitHub
GitHub'daki normal ifade koruma örneği, bir sorgu parametresi aracılığıyla yayınlanan olası SQL yerleştirme saldırılarının nasıl yakalanacağını gösterir. Ayrıca örnek, bilgisayar korsanlarının yanıttan faydalı bilgiler elde etmesini önlemek için genel bir 400 hata durumu ayarlamaya yönelik iyi bir uygulamayı göstermektedir.
JavaScript, saldırı koruması içerir
<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>
Yukarıdaki örnekte, JavaScript dahil saldırıları için JSON yüklerini değerlendirmek amacıyla RegularExpressionProtection politikasının nasıl kullanılacağı gösterilmektedir. Özellikle <JSONPath>
/<Expression>
tarafından ayıklanan içerik, <JSONPath>
/<Pattern>
içindeki normal ifadeye göre değerlendirilir.
<JSONPath>
/<Pattern>
içindeki normal ifade XML'den ayrılmış karakterler (", &, ', < veya .) içeriyorsa politika XML yapılandırma dosyasına eklemeden önce bunu XML olarak kodlamanız gerekir. Örneğin, yukarıdaki örnekte <\s*script\b[^>]*>[^<]+<\s*\/\s*script\s*>
normal ifadesi <\s*script\b[^>]*>[^<]+<\s*\/\s*script\s*>
olarak XML olarak kodlanmıştır.
Ayrıca, normal ifadenizde eğik çizgi (/) varsa <JSONPayload>
escapeSlashCharacter
özelliğini true
şeklinde ayarlayarak bunları kod dışına almanız gerekir.
Büyük/küçük harfe duyarlı olmayan eşleştirme
Bu, büyük/küçük harfe duyarlı olmayan eşleştirmeler yapmak için yaygın bir kullanım alanıdır. (?i)
yapısını kullanarak bunu normal ifadede nasıl yapabileceğinize dair bir örneği burada bulabilirsiniz. Bu örnekte, DELETE
, delete
ve Delete
doğru olarak değerlendirilir.
<Pattern>[\s]*(?i)((delete)|(exec)|(drop\s*table)|(insert)|(shutdown)|(update)|(\bor\b))</Pattern>
Normal İfade Koruması politikası hakkında
Apigee Edge, belirli kalıpların ardından gelen içerik düzeyindeki yaygın tehditleri tespit etmek için çalışma zamanında API trafiğine göre değerlendirilebilecek normal ifadeler yapılandırmanıza olanak tanır.
Normal ifade veya kısaca regex, bir dizede bir kalıp belirten dizelerden oluşan bir gruptur. Normal ifadeler, içeriğin kalıplar için programlı bir şekilde değerlendirilmesini sağlar. Normal ifadeler örneğin, bir e-posta adresini değerlendirerek doğru yapılandırıldığından emin olmak için kullanılabilir. Daha fazla bilgi için Java Eğiticileri'nde Normal İfadeler bölümüne bakın.
NormalExpressionProtection'ın en yaygın kullanımı, JSON ve XML yüklerinin kötü amaçlı içerik açısından değerlendirilmesidir.
Hiçbir normal ifade tüm içerik tabanlı saldırıları ortadan kaldıramaz ve derinlemesine savunmayı etkinleştirmek için birden fazla mekanizma birleştirilmelidir. Bu bölümde, içerikleri hariç tutmak için önerilen bazı kalıplar açıklanmaktadır.
Örnek hariç tutma kalıpları
Normal ifadeler, politikanın XML yapılandırma dosyasında XML olarak kodlanmış olmalıdır.
Ad | Normal İfade |
---|---|
SQL Yerleştirme |
[\s]*((delete)|(exec)|(drop\s*table)|(insert)|(shutdown)|(update)|(\bor\b)) |
Sunucu Tarafı Dahil Etme Yerleştirme |
<!--#(include|exec|echo|config|printenv)\s+.* Kodlanmış XML: <!--#(include|exec|echo|config|printenv)\s+.* |
XPath Kısaltılmış Söz Dizimi Yerleştirme |
(/(@?[\w_?\w:\*]+(\[[^]]+\])*)?)+ |
XPath Genişletilmiş Söz Dizimi Yerleştirme |
/?(ancestor(-or-self)?|descendant(-or-self)?|following(-sibling)) |
JavaScript Yerleştirme |
<\s*script\b[^>]*>[^<]+<\s*/\s*script\s*> Kodlanmış XML: <\s*script\b[^>]*>[^<]+<\s*/\s*script\s*> |
Java İstisnası Ekleme |
.*?Exception in thread.* |
XML veya JSON yükü olan bir istekte Content-Type başlığını ayarlama
Normal İfade Koruması politikasının yükü aşağıdaki öğeleri içerebilir:
-
<XMLPayload>
öğesi: Bilgilerin bir XML yükünden ayıklanması ve sağlanan normal ifadeye göre değerlendirilmesi gerektiğini belirtir.Politikada
<XMLPayload>
kullanırsanız isteğinContent-Type
başlığı,application/xml
veyatext/xml
gibi bir XML içerik türü olmalıdır. -
<JSONPayload>
öğesi: Bilgilerin bir JSON yükünden ayıklanması ve sağlanan normal ifadeye göre değerlendirilmesi gerektiğini belirtir.Politikada
<JSONPayload>
kullanırsanız isteğinContent-Type
başlığı,application/json
gibi bir JSON içerik türü olmalıdır.
Genelde XML veya JSON'yi kabul edecek bir API tasarlarsınız. Bununla birlikte, API'nin her ikisini de kabul ettiği bir senaryo olabilir. Ardından hem <XMLPayload>
hem de <JSONPayload>
öğelerini kullanan bir Normal İfade Koruması politikası tanımlayabilirsiniz.
Content-Type
başlığının değerine göre belirli bir istek için yalnızca bir öğe uygulanır.
Öğe referansı
Öğe referansı, regularExpressionProtection politikasının öğelerini ve özelliklerini açıklar.
<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> özellikleri
<RegularExpressionProtection async="false" continueOnError="false" enabled="true" name="Regular-Expression-Protection-1">
Aşağıdaki tabloda, tüm politika üst öğelerinde ortak olan özellikler açıklanmaktadır:
Özellik | Açıklama | Varsayılan | Varlık |
---|---|---|---|
name |
Politikanın dahili adı. İsteğe bağlı olarak, politikayı yönetim kullanıcı arayüzü proxy düzenleyicisinde farklı bir doğal dil adıyla etiketlemek için |
Yok | Gerekli |
continueOnError |
Bir politika başarısız olduğunda hata döndürülmesi için Bir politika başarısız olduktan sonra bile akış yürütülmesinin devam etmesi için |
false | İsteğe bağlı |
enabled |
Politikayı uygulamak için Politikayı devre dışı bırakmak için |
true | İsteğe bağlı |
async |
Bu özellik kullanımdan kaldırıldı. |
false | Kullanımdan kaldırıldı |
<DisplayName> öğesi
Politikayı, yönetim kullanıcı arayüzü proxy düzenleyicisinde farklı bir doğal dil adıyla etiketlemek için name
özelliğine ek olarak kullanın.
<DisplayName>Policy Display Name</DisplayName>
Varsayılan |
Yok Bu öğeyi çıkarırsanız politikanın |
---|---|
Varlık | İsteğe bağlı |
Tür | Dize |
<Source> öğesi
Bilginin çıkarılması gereken mesajı belirtir.
<Source>
öğesi atlanırsa değer varsayılan olarak message
olur. Örneğin, <Source>message</Source>
. message
değerine ayarlandığında politika, bir istek akışına eklendiğinde istek mesajını kaynak olarak kullanır. Benzer şekilde, politika bir yanıt akışına eklendiğinde yanıt mesajını kullanır.
Kaynak mesaj çözümlenemezse veya mesaj olmayan bir türe çözümlenirse politika bir hata döndürür.
<Source>response</Source>
Varsayılan: | Yok |
Bulunma: | İsteğe bağlı |
Tür: | Dize |
<ignoreUnresolvedVariables> öğesi
Politikanın, çözümlenemeyen bir değişkenle karşılaştığında hata döndürüp döndürmediğini belirler.
false
(varsayılan) değerine ayarlanırsa çözümlenemez bir değişkenle karşılaşıldığında politika hata döndürür. true
olarak ayarlanırsa çözülmemiş değişken, boş dize (Null) olarak değerlendirilir.
<IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
Varsayılan: | false |
Bulunma: | İsteğe bağlı |
Tür: | Boole |
<URIPath> öğesi
Bilgilerin istek URI'sı yolundan çıkarılması ve sağlanan normal ifadelere göre değerlendirilmesi gerektiğini belirtir. Eşleşecek bir normal ifade kalıbı belirten en az bir <Pattern>
öğesi sağlamanız gerekir.
<URIPath> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </URIPath>
Varsayılan: | Yok |
Bulunma: | İsteğe bağlı |
Tür: | Yok |
<QueryParam> öğesi
Bilgilerin istek sorgu parametresinden ayıklanması ve sağlanan normal ifadelere göre değerlendirilmesi gerektiğini belirtir. Eşleşecek bir normal ifade kalıbı belirten en az bir <Pattern>
öğesi sağlamanız gerekir.
<QueryParam name="a-query-param"> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </QueryParam>
Varsayılan: | Yok |
Bulunma: | İsteğe bağlı |
Tür: | Yok |
Özellikler
Özellik | Açıklama | Varsayılan | Varlık |
---|---|---|---|
ad | Sağlanan normal ifadelere göre değerlendirme için bilgilerin çıkarılması gereken istek sorgu parametresinin adı. | Yok | Gerekli |
<Header> öğesi
Bilgilerin istek ve yanıt başlıklarından çıkartılması ve sağlanan normal ifadelere göre değerlendirilmesi gerektiğini belirtir. Eşleşecek bir normal ifade kalıbı belirten en az bir <Pattern>
öğesi sağlamanız gerekir.
<Header name="a-header"> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </Header>
Varsayılan: | Yok |
Bulunma: | İsteğe bağlı |
Tür: | Yok |
Özellikler
Özellik | Açıklama | Varsayılan | Varlık |
---|---|---|---|
ad |
Sağlanan normal ifadelere göre değerlendirilmek üzere bilgilerin ayıklanması gereken istek ve yanıt başlığı adı. |
Yok | Gerekli |
<FormParam> öğesi
Bilgilerin istek formu parametresinden ayıklanması ve sağlanan normal ifadelere göre değerlendirilmesi gerektiğini belirtir. Eşleşecek bir normal ifade kalıbı belirten en az bir <Pattern>
öğesi sağlamanız gerekir.
<FormParam name="a-form-param"> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </FormParam>
Varsayılan: | Yok |
Bulunma: | İsteğe bağlı |
Tür: | Yok |
Özellikler
Özellik | Açıklama | Varsayılan | Varlık |
---|---|---|---|
ad |
Sağlanan normal ifadelere göre değerlendirilmek üzere bilgilerin çıkarılması gereken istek formu parametresinin adı. |
Yok | Gerekli |
<Variable> öğesi
Bilginin verilen değişkenden ayıklanması ve sağlanan normal ifadelere göre değerlendirilmesi gerektiğini belirtir.
<Variable name="request.content"> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </Variable>
Varsayılan: | Yok |
Bulunma: | İsteğe bağlı |
Tür: | Yok |
Özellikler
Özellik | Açıklama | Varsayılan | Varlık |
---|---|---|---|
ad |
Sağlanan normal ifadelerle karşılaştırmalı değerlendirme yapmak için bilgilerin ayıklanması gereken değişkenin adı. |
Yok | Gerekli |
<XMLPayload> öğesi
Bilgilerin XML yükünden çıkarılması ve sağlanan normal ifadelere göre değerlendirilmesi gerektiğini belirtir.
<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>
Varsayılan: | Yok |
Bulunma: | İsteğe bağlı |
Tür: | Yok |
<XMLPayload>/<Namespaces> öğesi
XPath değerlendirmesinde kullanılacak ad alanlarını belirtir.
<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>
Varsayılan: | Yok |
Bulunma: | İsteğe bağlı |
Tür: | Dize |
<XMLPayload>/<Namespaces>/<Namespace> öğesi
XPath değerlendirmesinde kullanılacak her bir ad alanını belirtir.<Namespaces> <Namespace prefix="apigee">http://www.apigee.com</Namespace> </Namespaces>
Varsayılan: | Yok |
Bulunma: | İsteğe bağlı |
Tür: | Dize |
Özellikler
Özellik | Açıklama | Varsayılan | Varlık |
---|---|---|---|
önek |
Belirli bir ad alanının nitelenmesine yardımcı olacak bir ön ek sağlar. |
Yok | Gerekli |
<XMLPayload>/<XPath> öğesi
Değerlendirilecek XPath'i belirtir.<XPath> <Expression>/apigee:Greeting/apigee:User</Expression> <Type>string</Type> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </XPath>
Varsayılan: | Yok |
Bulunma: | İsteğe bağlı |
Tür: | Yok |
<XMLPayload>/<XPath>/<Expression> öğesi
Değişken için tanımlanan XPath ifadesini belirtir. Yalnızca XPath 1.0 ifadeleri desteklenir. Örneğin<Expression>/company/employee[@age>=$request.header.age]</Expression>
, yaşı request.header.age
özelliğinde belirtilen değerden büyük veya bu değere eşit olan çalışanların ayrıntılarını ayıklar.<XPath> <Expression>/apigee:Greeting/apigee:User</Expression> <Type>string</Type> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </XPath>
Varsayılan: | Yok |
Bulunma: | İsteğe bağlı |
Tür: | Dize |
<XMLPayload>/<XPath>/<Type> öğesi
Veri türünü belirtir.<XPath> <Expression>/apigee:Greeting/apigee:User</Expression> <Type>string</Type> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </XPath>
Varsayılan: | dize |
Bulunma: | İsteğe bağlı |
Tür: | Dize |
Geçerli değerler: |
Dize. |
<XMLPayload>/<XPath>/<Pattern> öğesi
Normal ifade modelini tanımlar. <Pattern>
öğenizdeki bir normal ifade XML'den ayrılmış karakterler (", &, ', < veya .) içeriyorsa bu ifadeyi eklemeden önce XML olarak kodlamanız gerekir.
<XPath> <Expression>/apigee:Greeting/apigee:User</Expression> <Type>string</Type> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </XPath>
Varsayılan: | Yok |
Bulunma: | Gerekli |
Tür: | Dize |
<JSONPayload> öğesi
Bilgilerin bir JSON yükünden ayıklanması ve sağlanan normal ifadelere göre değerlendirilmesi gerektiğini belirtir.
<JSONPayload> <JSONPath> <Expression>$.store.book[*].author</Expression> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </JSONPath> </JSONPayload>
Varsayılan: | Yok |
Bulunma: | İsteğe bağlı |
Tür: | Yok |
Özellikler
Özellik | Açıklama | Varsayılan | Varlık |
---|---|---|---|
escapeSlashCharacter |
|
true | İsteğe bağlı |
<JSONPayload>/<JSONPath>/<Expression> öğesi
Değişken için tanımlanan JSONPath ifadesini belirtir.
<JSONPath> <Expression>$.store.book[*].author</Expression> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </JSONPath>
Varsayılan: | Yok |
Bulunma: | İsteğe bağlı |
Tür: | Dize |
<JSONPayload>/<JSONPath>/<Pattern> öğesi
Normal ifade modelini tanımlar. <Pattern>
öğenizdeki normal ifade, XML'den ayrılmış karakterler (", &, ', < veya .) içeriyorsa söz konusu ifadeyi eklemeden önce XML olarak kodlamanız gerekir.
<JSONPath> <Expression>$.store.book[*].author</Expression> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </JSONPath>
Varsayılan: | Yok |
Bulunma: | Gerekli |
Tür: | Dize |
Hata referansı
Bu bölümde, bu politika bir hatayı tetiklediğinde Edge tarafından ayarlanan hata kodları,
döndürülen mesajlar ve hata değişkenleri açıklanmaktadır. Hataları ele almak için hata kuralları geliştirip geliştirmediğinizi bilmek önemlidir. Bir hatayı yakalamak ve kendi özel hatanızı oluşturmak istiyorsanız politika kök öğesinde continueOnError="true"
özelliğini ayarlayın.
Daha fazla bilgi için
Politika hataları hakkında bilmeniz gerekenler ve Hataları işleme bölümlerine bakın.
Edge politikalarından döndürülen hatalar, Hata kodu referansı bölümünde açıklanan tutarlı bir biçimde olur.
Çalışma zamanı hataları
Politika yürütüldüğünde bu hatalar ortaya çıkabilir.
Hata Kodu | Message |
---|---|
ExecutionFailed | NormalExpressionProtection Adım Tanımı {0} yürütülemedi. Neden: {1} |
InstantiationFailed | regularExpressionProtection StepDefinition {0} örneklendirmesi başarısız oldu |
NonMessageVariable | {0} değişkeni bir Mesaj oluşturmuyor |
SourceMessageNotAvailable | {0} iletisi, RegularExpressionProtection StepDefinition için kullanılamıyor {1} |
ThreatDetected | {0} içinde Normal İfade Tehdidi Algılandı: normal ifade: {1} giriş: {2} |
VariableResolutionFailed | {0} değişkeni çözümlenemedi |
Dağıtım hataları
Hata Kodu | Message | Düzelt |
---|---|---|
CannotBeConvertedToNodeset | RegularExpressionProtection {0}: xpath {1} işleminin sonucu düğüm kümesine dönüştürülemez. Bağlam {2} | build |
DuplicatePrefix | RegularExpressionProtection {0}: Yinelenen ön ek {1} | build |
EmptyJSONPathExpression | NormalExpressionProtection {0}: Boş JSONPath ifadesi | build |
EmptyXPathExpression | NormalExpressionProtection {0}: Boş XPath ifadesi | build |
InvalidRegularExpression | RegularExpressionProtection {0}: Geçersiz Normal İfade {1}, Bağlam {2} | build |
JSONPathCompilationFailed | NormalExpressionProtection {0}: jsonpath {1} derlenemedi. Bağlam {2} | build |
NONBlankPrefixMappedToBlankURI | NormalExpressionProtection {0}: Boş olmayan ön ek {1}, boş uri ile eşlenemez | build |
NoPatternsToEnforce | NormalExpressionProtection {0}: {1} içinde zorunlu kılınacak kalıp yoktur | build |
NothingToEnforce | RegularExpressionProtection {0}: URIPath, QueryParam, Header, FormParam, XMLPayload, JSONPayload'un en az biri zorunludur | build |
XPathCompilationFailed | NormalExpressionProtection {0}: xpath {1} derlenemedi. Bağlam {2} | build |
Hata değişkenleri
Bu değişkenler, bu politika bir hatayı tetiklediğinde ayarlanır. Daha fazla bilgi için Politika hataları hakkında bilmeniz gerekenler bölümüne bakın.
Değişkenler | Konum | Örnek |
---|---|---|
fault.name="fault_name" |
fault_name, yukarıdaki tabloda listelenen hatanın adıdır. | fault.name Matches "ThreatDetected" |
regularexpressionprotection.policy_name.failed |
policy_name, hataya neden olan politikanın kullanıcı tarafından belirtilen adıdır. | regularexpressionprotection.Regular-Expressions-Protection-1.failed = true |