Zorunlu parametre tanımlayabilir miyim (Required Query Parameters / Required Headers / Required Form Fields)?
Kısa cevap
Evet. Sayfa tipinin Query, Header ve Form sekmelerindeki ortak kuralda Required Query Parameters, Required Headers ve Required Form Fields listeleri bulunur; liste Restrict konumuna alınıp adlar eklendiğinde, istekte bulunmayan her ad Structure Policies kategorisinde ayrı bir 24 puanlık ihlal üretir. Adın istekte bulunması yeterlidir, değeri boş olabilir. Sorgu dizesi hiç olmayan istekte zorunlu sorgu parametrelerinin hepsi eksik sayılır; Required Form Fields yalnızca form gövdesi taşıyan isteklerde denetlenir. Başlık adları küçük harfle yazılır. JSON ve Xml bölümlerinde zorunlu ad listesi yoktur. Denetim için Checks penceresinde Argument Checks açık olmalıdır.
Sorun: Zorunlu Bir Alan Olmadan Gelen İstekler Uygulamaya Ulaşıyor
Bir uç nokta yalnızca belirli bir sorgu parametresi, başlık ya da form alanıyla çağrılmalı (ör. API anahtarı başlığı, CSRF alanı); alan eksikse istek uygulamaya ulaşmadan reddedilmeli.
Çözüm: İki Yöntem
İki yöntem aynı listeyi yazar; biri seçilir.
| Durumunuz | Uygun yöntem |
|---|---|
| Ayarı arayüzden yapmak istiyorum | Yöntem 1: Ortak kuralda Required listesi |
| Betik ya da komut satırıyla yapmak istiyorum | Yöntem 2: WEB-CLI |
Yöntem 1: Ortak Kuralda Required Listesi Önerilen
- Nasıl çalışır Bölümün ortak kuralına zorunlu ad listesi yazılır; istekte bulunmayan her ad ayrı ihlal sayılır.
- Nerede açılır Left Monitor Panel → WAF-Protected vServices → vService → WAF Management → N page types → kural → Query / Header / Form → Add Common Rule for …
- GereksinimArgument Checks açık
- vService tipi WAF açık HTTP vService
- Etki alanı Yalnızca bu sayfa tipine eşleşen istekler; Any paths kuralına yazılan liste, o bölüm için kendi ortak kuralı olmayan bütün path'lere uygulanır
Adım adım yapılandırma
Argument 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ı).
Argument Checks açık konuma alınır.
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?).
Zorunlu adın türüne göre Query, Header ya da Form sekmesine tıklanır.
Tablonun üstündeki Add Common Rule for Query (ya da … for Header, … for Form) 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. Ekleme formu Any paths kuralının o bölümdeki değerleriyle dolu açılır.
Required Query Parameters, Required Headers ya da Required Form Fields anahtarı Restrict konumuna alınır ve her ad listeye ayrı bir öğe olarak eklenir:
| Bölüm | Adın yazımı |
|---|---|
| Query | İstekteki ham (URL kodlu) hâliyle, harfe duyarlı |
| Header | Küçük harfle (x-api-key); başlıklar küçük harfe indirilerek karşılaştırılır, liste girdileri çevrilmez |
| Form | urlencoded gövdede ham hâliyle, multipart gövdede alanın name değeriyle; harfe duyarlı |
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. Zorunluluğu kaldırmak için alan No Restriction konumuna alınır.
Doğrulama
Host grubu Blocking modundayken zorunlu başlık olmadan istek gönderilir; ardından başlıkla tekrarlanır.
Komut: curl -s -o /dev/null -w "%{http_code}\n" https://www.example.com/api/rapor
Başlıksız istek 418, başlıklı istek uygulamanın yanıtıvService'in Event Logs ekranında kayıt seçilip Attacks sekmesine bakılır.
Attack area: Header@x-api-key · Attack name: Required headersYöntem 2: WEB-CLI
- Nasıl çalışır Zorunlu ad listesi WEB-CLI ile kuralın ortak parçasına yazılır (
queryMustArgs,headerMustArgs,formMustArgs). - Nerede açılır WEB-CLI →
waf rule-parts - Gereksinim WEB-CLI erişimi; Argument Checks açık (
waf options update poolId <vService> --syncWithDefaultFwRules false --argumentChecks 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 (Any paths kuralı default rule olarak görünür):
waf fw-rules list poolId <vService> hostGroupId defaultHostAçıklama sütununda header: (all keys) (ya da query: …, form: …) görünen satır o bölümün ortak parçasıdır:
waf rule-parts list poolId <vService> hostGroupId defaultHost ruleId <kural>Çıktıdaki headerMustArgs.0, headerMustArgs.1 … satırları mevcut zorunlu adlardır:
waf rule-parts show poolId <vService> hostGroupId defaultHost ruleId <kural> <parça>--headerMustArgs.N o sıradaki mevcut adın yerine geçer; yeni ad ilk boş sıraya yazılır (liste boşsa 0):
waf rule-parts update poolId <vService> hostGroupId defaultHost ruleId <kural> id <parça> --headerMustArgs.0 x-api-keyadd yazılmayan alanlara komutun varsayılanlarını yazar: Header'da headerSize en çok 4096, headerKeyCount en çok 32; Form'da formBlockAll ve formBlockInvalid açık, formKeyCount en çok 32; iki bölümde de valueLength 0–1024 (bölge alanları). Form parçası eklenirken bütün form gövdelerinin engellenmemesi için --formBlockAll false verilir:
waf rule-parts add poolId <vService> hostGroupId defaultHost ruleId <kural> loc form --formBlockAll false --formMustArgs.0 csrfDoğrulama
Parça yeniden görüntülenir.
Komut: waf rule-parts show poolId <vService> hostGroupId defaultHost ruleId <kural> <parça>
headerMustArgs satırlarında zorunlu adlarSık Yapılan Hatalar
- Zorunlu başlığı Any paths kuralına yazmak. Any paths kuralının Header ortak kuralı, kendi Header kuralı olmayan bütün path'lere uygulanır; dış izleme servisleri ve tarayıcıdan gelen statik olmayan istekler de başlığı taşımadığı için engellenir. Zorunluluk path'e özel sayfa tipine yazılır.
- Başlık adını büyük harfle yazmak. Başlıklar küçük harfe indirilerek karşılaştırılır, liste girdileri çevrilmez;
X-Api-Keyhiçbir zaman sağlanmaz (Belirli bir header'ın varlığını zorunlu kılabilir miyim?). - Required form fields'ın GET isteklerini de denetlediğini sanmak. Denetim yalnızca
application/x-www-form-urlencodedya damultipart/form-datagövdesi çözümlenen isteklerde çalışır; gövdesiz istek bu listeden ihlal üretmez. - JSON API için zorunlu anahtar aramak. JSON ve Xml bölümlerinde zorunlu liste yoktur; gövdenin şekli Allowed JSON Keys ve değişken kurallarıyla kısıtlanır (JSON'da yalnızca belirli anahtarların gelmesine izin verebilir miyim; iç içe anahtar yolları nasıl yazılır?).
- WEB-CLI'da form parçasını
addile varsayılanlarla eklemek.formBlockAllvarsayılanı açıktır; komutta--formBlockAll falseverilmezse sayfaya gelen bütün form gövdeleri engellenir.
Dokümantasyonda nasıl yapılır
