Apigee Edge belgelerini görüntülüyorsunuz.
.
Git:
Apigee X belgeleri. bilgi
normalExpressionProtection politikası, veya akış değişkenlerindeki çalışma zamanı ayarını artırır. Bu politikayı genellikle SQL veya JavaScript yerleştirme gibi içerik tehditleri ya da hatalı biçimlendirilmiş istek parametreleriyle ilgili kontroller gerçekleştirme e-posta adresleri veya URL'ler gibi.
Normal ifadeler; istek yolları, sorgu parametreleri, form parametreleri, üstbilgileri, XML öğeleri (XPath kullanılarak tanımlanan XML yükünde), JSON nesne özellikleri (JSON JSONPath kullanılarak tanımlanan yük).
Aşağıdaki örnek RegularExpressionProtection politikası, arka ucu SQL'den korur ekleme saldırıları:
<!-- /antipatterns/examples/greedy-1.xml --> <RegularExpressionProtection async="false" continueOnError="false" enabled="true" name="RegexProtection"> <DisplayName>RegexProtection</DisplayName> <Properties/> <Source>request</Source> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <QueryParam name="query"> <Pattern>[\s]*(?i)((delete)|(exec)|(drop\s*table)| (insert)|(shutdown)|(update)|(\bor\b))</Pattern> </QueryParam> </RegularExpressionProtection>
Antipattern
Varsayılan miktar belirleyiciler (*
, +
ve ?
) şurada açgözlü:
mümkün olan en uzun diziyle eşleşmeye başlarlar. Eşleşme bulunamadığında,
kademeli olarak geri izleyin. Modelle eşleşen sonuç dizesi
olduğu için, açgözlü niteleyiciler kullanmak gerektiğinden daha fazla zaman alabilir. Bu, özellikle
yük büyükse (onlar veya yüzlerce KB cinsinden) doğru olmalıdır.
Aşağıdaki örnek ifadede, açgözlü olan birden fazla .*
örneği kullanılıyor
operatörler:
<Pattern>.*Exception in thread.*</Pattern>
Bu örnekte, normalExpressionProtection politikası öncelikle mümkün olan en uzun
dizi; yani dizenin tamamı. Eşleşme bulunmazsa politika geri izler.
aşama aşama. Eşleşen dize yükün başına veya ortasına yakınsa, dize olarak
.*
gibi açgözlü bir niceleyici, isteksiz olana kıyasla çok daha fazla zaman ve işlem gücü alabilir
.*?
gibi niteleyiciler ya da (daha az yaygın) gibi
.*+
.
İsteksiz miktar belirleyiciler (ör. X*?
, X+?
, X??
) deneyerek başlar
baştaki tek bir karakteri eşleştirmek ve yavaş yavaş karakterleri eklemek için kullanılır.
Pozitif miktar belirleyiciler (ör. X?+
, X*+
, X++
)
yalnızca bir kez ekleyin.
Yukarıdaki kalıp için aşağıdaki örnek metni inceleyin:
Hello this is a sample text with Exception in thread with lot of text after the Exception text.
Bu durumda açgözlü .*
kullanımı başarılı değildir. Desen
.*Exception in thread.*
eşleşme için 141 adım gerekiyor. Deseni kullandıysanız
.*?Exception in thread.*
(isteksiz bir miktar belirleyici kullanır) olursa sonuç
55 adım olmalı.
Etki
*
NormalExpressionProtection politikası şunlara neden olabilir:
- Orta düzeyde yük boyutu için API istekleri için genel gecikmede artış (1 MB'a kadar)
- RegularExpressionProtection politikasının yürütülmesinin tamamlanması için daha uzun süre
- Büyük yüke (>1 MB) sahip API istekleri, Uç Yönlendiricide önceden tanımlanmış zaman aşımı süresi geçen
- Yüksek işleme hızı nedeniyle Mesaj İşlemcilerinde yüksek CPU kullanımı. diğer API isteklerini etkileme
En iyi uygulama
.*
NormalExpressionProtection politikası Bunun yerine.*?
veya.*+
gibi iyelik belirleyiciler (daha az yaygın) yerlerde yapmasını sağlar.