Bir parametrenin değerini uzunluk veya regex desenle kısıtlayabilir miyim (Value length / Value pattern)?
Kısa cevap
Evet; değer iki düzeyde kısıtlanabilir. Bölümün ortak kuralındaki … value length ve … value pattern alanları (ör. Query Value Length, Query Value Pattern) kendi değişken kuralı olmayan bütün adların değerlerine uygulanır; tek bir ada açılan değişken kuralındaki aynı alanlar yalnızca o ada uygulanır ve o ad için ortak kuralın değer denetimlerinin yerine geçer. Uzunluk her değere ayrı ayrı, ham hâlinin bayt sayısı üzerinden uygulanır. Desen pozitif bir denetimdir: değer desene uymazsa Structure Policies kategorisinde 24 puanlık ihlal üretilir; desen değerin herhangi bir yerinde aranır, tam eşleşme için ^ ve $ gerekir, aA butonu büyük/küçük harf farkını kaldırır. JSON ve Xml'de yalnızca metin değerler denetlenir. Denetimler Checks penceresindeki Structure Checks anahtarına bağlıdır.
Sorun: Bir Parametre Beklenmeyen Değerler Alıyor
Sayısal bir kimlik alanına metin, kısa bir kod alanına uzun dizgeler geliyor. İmza taraması yalnızca bilinen saldırı desenlerini yakalar; değerin beklenen biçimde olup olmadığını denetlemez. Parametre bazında değerin uzunluğu ve biçimi sınırlanmak isteniyor.
Çözüm: Üç Yöntem
Yöntem 1 ve 2 kapsam bakımından farklıdır; ikisi aynı sekmede birlikte kullanılabilir. Yöntem 3, Yöntem 1'in komut satırı karşılığıdır.
| Durumunuz | Uygun yöntem |
|---|---|
| Yalnızca bir parametrenin değeri kısıtlanacak | Yöntem 1: Değişken kuralı |
| Bölümdeki bütün parametrelerin değerine ortak sınır konacak | Yöntem 2: Ortak kural |
| Betik ya da komut satırıyla yapmak istiyorum | Yöntem 3: WEB-CLI |
Yöntem 1: Değişken Kuralı Önerilen
- Nasıl çalışır Seçilen ad için kendi değer denetimleri tanımlanır; o adın değerleri yalnızca bu kuralla denetlenir.
- Nerede açılır Left Monitor Panel → WAF-Protected vServices → vService → WAF Management → N page types → kural → sekme → Add Argument Rule for …
- GereksinimStructure Checks açık
- vService tipi WAF açık HTTP vService
- Bölümler Query, Header, JSON, Xml, Form (Path ve Raw sekmelerinde değişken kuralı yoktur)
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 değer 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?).
Parametrenin bulunduğu bölümün sekmesine (Query, Header, JSON, Xml ya da Form) tıklanır.
Değişken tablosunun üstündeki Add Argument Rule for … tıklanır (Add Argument Rule for Query ekranı). Ad tabloda zaten kalın yazılıysa satıra tıklanıp Edit kullanılır; aynı adla ikinci kural eklenemez. Form, Any paths kuralının o bölümdeki ortak değerleriyle dolu açılır.
Argument Name kutusuna parametrenin adı yazılır: Query ve Form'da istekteki ham hâliyle, Header'da başlık adı küçük harfle (kayıtta da küçük harfe çevrilir; büyük harfle yazılan ad aynı başlık için ikinci bir kural oluşturabilir), JSON'da noktalı anahtar yolu (user.name), Xml'de eleman ya da attribute yolu (user._attr.type). Ad sonradan değiştirilemez.
… value length için işleç ve değer seçilir (ör. Less than or Equal to 8). … value pattern kutusuna desen yazılır (ör. ^[0-9]+$); büyük/küçük harf farkı önemsizse kutunun solundaki aA butonu etkinleştirilir. Desen kaydedilmeden derlenip doğrulanır, sağındaki test ikonuyla örnek değerlerde denenebilir (Özel kurallarda hangi regex söz dizimi destekleniyor (backreference, lookaround); kuralı kaydetmeden test edebilir miyim?). Formdaki diğer alanlar (OWASP Check, Detailed Log, … value count) da bu ad için geçerli olur; boş bırakılan alan o denetim için kısıt yok demektir.
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.
Doğrulama
Host grubu Blocking modundayken desene uymayan değerle istek gönderilir.
Komut: curl -s -o /dev/null -w "%{http_code}\n" "https://www.example.com/urun?id=12a"
418?id=12345678 geçer; ?id=123456789 uzunluk sınırını aştığı için engellenir. Monitor modunda istekler geçer, ihlal yalnızca kaydedilir.Event Logs kaydının Attacks sekmesine bakılır.
Attack area: Query@id · Attack name: Query value pattern; Description: 12aYöntem 2: Ortak Kural
- Nasıl çalışır Ortak kuraldaki değer alanları, bölümde kendi değişken kuralı olmayan bütün adların değerlerine uygulanı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
- Kapsam dışı Kendi değişken kuralı olan adlar (ör. Any paths kuralındaki varsayılan header kuralları)
Adım adım yapılandırma
Structure Checks açıkken (Yöntem 1, 1–3. adımlar) WAF Management sekmesinde host grubunun N page types satırına tıklanır.
Listede sayfa tipinin satırına tıklanır; detay paneli sağda açılır.
Bölümün sekmesine tıklanır.
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.
… value length ve … value pattern alanları doldurulur. Ortak kuraldaki desen bölümdeki bütün değerlere uygulanacağından yalnızca hepsinin uyacağı bir desen yazılır.
Add (düzenlemede Edit) tıklanır.
Doğrulama
Kuralın ilgili sekmesinde ortak kuralın … value length ve … value pattern satırlarına bakılır.
Girilen sınır ve desen; aA açıksa desenin yanında (-i)Yöntem 3: WEB-CLI
- Nasıl çalışır Yöntem 1'deki değişken kuralı WEB-CLI ile
--argalanı verilerek eklenir. - Nerede açılır WEB-CLI →
waf rule-parts add - 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ı Yazılmayan alanlara Any paths değerleri değil komutun varsayılanları yazılır (
valueLength0–1024,argOwaspaçık); büyük/küçük harf duyarsızlığı arayüzden açılır
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 defaultHostDesen tek tırnak içinde yazılır (her bölgede ortak alanlar). Aynı adla kural varsa komut reddedilir; o durumda waf rule-parts list ile parçanın kimliği bulunup update … id <parça> kullanılır:
waf rule-parts add poolId <vService> hostGroupId defaultHost ruleId <kural> loc query --arg id --valueLength.op "<=" --valueLength.val 8 --argRegex.input '^[0-9]+$'Doğrulama
Kuralın parçaları listelenir.
Komut: waf rule-parts list poolId <vService> hostGroupId defaultHost ruleId <kural>
query: idSık Yapılan Hatalar
^ve$yazmamak. Desen değerin herhangi bir yerinde aranır;[0-9]+deseniab12değerini de kabul eder.- Değişken kuralında diğer alanları boş bırakıp ortak sınırların sürdüğünü sanmak. Değişken kuralı o ad için ortak kuralın değer denetimlerinin yerine geçer; boş bırakılan … value count tekrar sınırını kaldırır (Kurallarda devralma ve "Rule Source" nasıl çalışır?).
- Desteklenmeyen regex yazmak. Geri referans ve lookaround desteklenmez; form deseni kaydetmeden önce WAF'ın trafikte kullandığı ayarlarla derler ve hatayı alanın altında gösterir. Değer kalıpları, özel kural desenlerinden farklı olarak
^[a-z]*$gibi boş değerle de eşleşebilen çapalı desenleri kabul eder (Özel kurallarda hangi regex söz dizimi destekleniyor (backreference, lookaround); kuralı kaydetmeden test edebilir miyim?). - Sayısal JSON değerine desen yazmak. JSON ve Xml'de uzunluk ve desen yalnızca metin değerlere uygulanır;
{"id":123}gövdesindeki sayı bu denetimlere girmez. - Sıkı deseni doğrudan Blocking modunda denemek. Yeni desen önce Monitor modunda izlenir; meşru değerler ihlal üretiyorsa desen genişletilir (WAF modları).
Dokümantasyonda nasıl yapılır
