Parametre adı uzunluğu ve parametre sayısı için sınır koyabilir miyim?
Kısa cevap
Evet. Query, Header, JSON, Xml ve Form sekmelerinin ortak kuralında … key length alanı tek bir adın (anahtarın) uzunluğunu, … key count alanı ad sayısını kısıtlar (Query Key Length, Query Key Count); işleç olarak No Restriction, Less than or Equal to, Equals to, Greater than or Equal to ya da Range seçilir. Query, Header ve Form'da her farklı ad bir kez sayılır; JSON ve Xml'de key count gövdedeki yaprak değer sayısıdır, dizinin her elemanı ayrı sayılır. Uzunluk adın ham hâlinin bayt sayısıdır. Her ihlal Structure Limits kategorisinde 24 puandır ve Checks penceresindeki Structure Checks anahtarına bağlıdır. Path için karşılığı kuralın Path Length ve Path Depth alanlarıdır.
Sorun: Aşırı Uzun ya da Çok Sayıda Parametre Adı Geliyor
Bir sayfaya alışılmadık uzunlukta parametre adları ya da yüzlerce parametre içeren istekler geliyor (taşma denemeleri, parametre kirletme, kaynak tüketme). Uygulamanın gerçekte kullandığı ad uzunluğu ve ad sayısı biliniyorsa bunun dışındaki istekler reddedilmek isteniyor.
Çözüm: İki Yöntem
İki yöntem aynı alanları yazar; biri seçilir.
| Durumunuz | Uygun yöntem |
|---|---|
| Ayarı arayüzden yapmak istiyorum | Yöntem 1: Ortak kuralda key length ve key count |
| Betik ya da komut satırıyla yapmak istiyorum | Yöntem 2: WEB-CLI |
Yöntem 1: Ortak Kuralda Key Length ve Key Count Önerilen
- Nasıl çalışır Bölümün ortak kuralına ad uzunluğu ve ad sayısı kısıtı yazılır; kısıta uymayan her ad ya da istek ihlal sayılır.
- Nerede açılır Left Monitor Panel → WAF-Protected vServices → vService → WAF Management → N page types → kural → sekme → Add Common Rule for …
- GereksinimStructure Checks açık
- vService tipi WAF açık HTTP vService
- Etki alanı Yalnızca bu sayfa tipine eşleşen istekler; Any paths kuralındaki değerler, o bölüm için kendi ortak kuralı olmayan bütün path'lere uygulanır
Bölümlere göre ölçüm ve Any paths kuralının varsayılan değerleri (Query, JSON):
| Sekme | Key length neyi ölçer | Key count neyi sayar | Any paths varsayılanı (length · count) |
|---|---|---|---|
| Query | Her farklı parametre adının ham (URL kodlu) uzunluğu | Farklı parametre adı sayısı | 0–16384 · ≤ 1024 |
| Header | Her farklı başlık adının uzunluğu | Farklı başlık adı sayısı | 1–128 · ≤ 128 |
| JSON | Her farklı nesne anahtarının uzunluğu | Yaprak değer sayısı (dizi elemanları dahil) | 0–1024 · ≤ 65536 |
| Xml | Her farklı eleman ve attribute adının uzunluğu | Yaprak değer sayısı | 1–128 · ≤ 4096 |
| Form | Her farklı alan adının uzunluğu | Farklı alan adı sayısı | 0–524288 · ≤ 512 |
Varsayılanlar host grubu oluşturulurken yazılan şablondur; öğrenme ve elle yapılan değişiklikler bu değerleri değiştirir.
Adım adım yapılandırma
Structure Checks WAF açıldığında açık gelir; kapatıldıysa Left Monitor Panel → WAF-Protected vServices → vService → WAF Management sekmesinde Inspection & Blocking bölümündeki Checks kartının sağ üstündeki kalem ikonu tıklanır (Checks Edit ekranı).
Structure Checks açık konuma alınır. Anahtar kapalıyken key length ve key count alanları formda ve panelde gizlenir.
Edit tıklanır.
WAF Management sekmesinde host grubunun N page types satırına tıklanır (Page Types ekranına erişim).
Listede sayfa tipinin satırına tıklanır; kuralın detay paneli sağda açılır (panele erişim). Sayfa tipi yoksa önce eklenir (Yeni bir page type'ı elle nasıl eklerim?).
Kısıtlanacak bölümün sekmesine (Query, Header, JSON, Xml ya da Form) tıklanır.
Tablonun üstündeki Add Common Rule for … tıklanır; kural o bölüm için kendi ortak kuralına sahipse buton Edit Common Rule for … olarak görünür (Add Common Rule for Query ekranı). Ekleme formu Any paths kuralının o bölümdeki değerleriyle dolu açılır.
… key length (ör. Query Key Length) için işleç ve değer seçilir; Range seçildiğinde iki değer girilir ve sınırlar dahildir. … key count için de işleç ve değer seçilir. Üst sınır için Less than or Equal to kullanılır; Equals to tam eşitlik ister. Alanlara yalnızca sayı girilebilir.
Add (düzenlemede Edit) tıklanır; değişiklik ayrı bir dağıtım adımı olmadan uygulanır. Cluster kurulumunda varsayılan auto-sync ile eş cihaza da gönderilir; Manual Sync Mode açıksa eş cihaza elle gönderilir.
Path uzunluğu ve derinliği sayfa tipinin kendi alanlarıdır; glob path'li kurallarda ve Any paths kuralında Add / Edit formundan girilir, exact path'li kuralların formunda bu alanlar bulunmaz (Path Length ve Path Depth kısıtları ne işe yarar?).
Doğrulama
Kuralın ilgili sekmesinde … key length ve … key count satırlarına bakılır.
[1 - 64] ve ≤ 10 gibi girilen kısıtlarMonitor ya da Blocking modunda sınırı aşan bir istek gönderilir ve Event Logs kaydının Attacks sekmesine bakılır.
Attack name: Query key count; Description: 11>10Yöntem 2: WEB-CLI
- Nasıl çalışır Kısıtlar WEB-CLI ile kuralın ortak parçasına
.op,.valve.val2alanlarıyla yazılır. - Nerede açılır WEB-CLI →
waf rule-parts - Gereksinim WEB-CLI erişimi; Structure Checks açık (
waf options update poolId <vService> --syncWithDefaultFwRules false --structureChecks true) - vService tipi WAF açık HTTP vService
- Ön dolum farkı
addkomutu yazılmayan alanlara Any paths değerlerini değil komutun varsayılanlarını yazar
Adım adım yapılandırma
Varsayılan host grubunun kimliği defaultHost'tur; kural kimlikleri id sütununda listelenir:
waf fw-rules list poolId <vService> hostGroupId defaultHostAçıklama sütununda query: (all keys) görünen satır Query ortak parçasıdır:
waf rule-parts list poolId <vService> hostGroupId defaultHost ruleId <kural>İşleçler (<=, =, >=, -) çift tırnak içinde yazılır; - aralık için .val2 de verilir (loc query alanları):
waf rule-parts update poolId <vService> hostGroupId defaultHost ruleId <kural> id <parça> --queryKeyLength.op "-" --queryKeyLength.val 1 --queryKeyLength.val2 64 --queryKeyCount.op "<=" --queryKeyCount.val 10add yazılmayan alanlara komutun varsayılanlarını yazar (Query'de querySize en çok 8192, valueLength 0–1024; JSON, Xml ve Form'da …BlockAll açık). JSON, Xml ya da Form parçası eklenirken bütün gövdelerin engellenmemesi için --jsonBlockAll false (ya da --xmlBlockAll false, --formBlockAll false) verilir:
waf rule-parts add poolId <vService> hostGroupId defaultHost ruleId <kural> loc json --jsonBlockAll false --jsonKeyCount.op "<=" --jsonKeyCount.val 200Doğrulama
Parça yeniden görüntülenir.
Komut: waf rule-parts show poolId <vService> hostGroupId defaultHost ruleId <kural> <parça>
queryKeyLength.op, .val, .val2 ve queryKeyCount satırlarında yeni değerlerSık Yapılan Hatalar
- Equals to'yu "en fazla" sanmak. Equals to tam eşitlik ister; farklı uzunluktaki her ad ihlal sayılır. Üst sınır için Less than or Equal to seçilir.
- Any paths kuralında sıkı key count yazmak. Any paths değerleri, o bölüm için kendi ortak kuralı olmayan bütün path'leri etkiler; sıkı sınır sayfa tipine yazılır.
- JSON key count'u anahtar sayısı sanmak. JSON ve Xml'de yaprak değerler sayılır;
{"ids":[1,2,3]}gövdesi 3 sayılır (JSON'da yalnızca belirli anahtarların gelmesine izin verebilir miyim; iç içe anahtar yolları nasıl yazılır?). - Tekrarlanan parametreyi key count'ta aramak.
id=1&id=2tek ad sayılır; aynı adın tekrar sayısı … value count alanıyla sınırlanır (Aynı parametrenin kaç kez tekrarlanabileceğini sınırlayabilir miyim (Value count)?). - WEB-CLI'da JSON parçasını
addile varsayılanlarla eklemek.jsonBlockAllvarsayılanı açıktır; komutta--jsonBlockAll falseverilmezse sayfaya gelen bütün JSON gövdeleri engellenir.
Dokümantasyonda nasıl yapılır
