Belirli bir header'ın varlığını zorunlu kılabilir miyim?
Kısa cevap
Evet. Sayfa tipinin Header sekmesindeki ortak kuralda Required Headers listesi Restrict konumuna alınıp başlık adı eklenir; başlığı taşımayan her istek Structure Policies kategorisinde 24 puanlık Required headers ihlali üretir. Başlığın bulunması yeterlidir, değeri boş olabilir; değerin biçimi o başlığa açılan değişken kuralındaki Header Value Pattern ile ayrıca denetlenir. Başlıklar küçük harfe indirilerek karşılaştırılır ve liste girdileri çevrilmez; ad x-api-key gibi küçük harfle yazılır. Denetim için Checks penceresinde Argument Checks açık olmalıdır. Öğrenme ve öğretme başlık değişikliklerini Any Paths kuralına yazar (Combine With Old Rules ile uygulanan Analysis & Learning hariç); path'e özel Header kuralı elle düzenlenir.
Sorun: Bir Başlık Olmadan Gelen İstekler Uygulamaya Ulaşıyor
Bir API path'i yalnızca belirli bir başlıkla (ör. API anahtarı ya da istemci sürümü) çağrılmalı; başlık eksikse istek uygulamaya ulaşmadan reddedilmeli. Başlığın yalnızca varlığı değil, değerinin biçimi de denetlenmek istenebilir.
Çözüm: İki Yöntem
İki yöntem aynı listeyi yazar; biri seçilir. Değerin biçimi de denetlenecekse Yöntem 1'deki ek adım uygulanır.
| Durumunuz | Uygun yöntem |
|---|---|
| Ayarı arayüzden yapmak istiyorum | Yöntem 1: Header ortak kuralı |
| Betik ya da komut satırıyla yapmak istiyorum | Yöntem 2: WEB-CLI |
Yöntem 1: Header Ortak Kuralı Önerilen
- Nasıl çalışır Sayfa tipinin Header ortak kuralına zorunlu başlık adı yazılır; başlığı taşımayan istek ihlal sayılır.
- Nerede açılır Left Monitor Panel → WAF-Protected vServices → vService → WAF Management → N page types → kural → Header → Add Common Rule for Header
- GereksinimArgument Checks açık; değer biçimi için ayrıca Structure Checks açık
- vService tipi WAF açık HTTP vService
- Öğrenmeyle ilişkisi Öğrenme ve öğretme başlık değişikliklerini Any paths kuralına yazar; path'e özel Header kuralını yalnızca Combine With Old Rules ile uygulanan Analysis & Learning genişletebilir
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).
Zorunluluğun uygulanacağı sayfa tipinin satırına tıklanır; detay paneli sağda açılır (panele erişim). Sayfa tipi yoksa önce eklenir (ör. /api/** glob path'i ile) (Yeni bir page type'ı elle nasıl eklerim?).
Panelin sekme şeridinde Header sekmesine tıklanır.
Tablonun üstündeki Add Common Rule for Header tıklanır; kural kendi Header ortak kuralına sahipse buton Edit Common Rule for Header olarak görünür (Add Common Rule for Header ekranı). Ekleme formu Any paths kuralının Header değerleriyle dolu açılır.
Required Headers anahtarı Restrict konumuna alınır ve başlık adı küçük harfle eklenir (x-api-key).
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.
Aynı sekmede değişken tablosunun üstündeki Add Argument Rule for Header tıklanır; Argument Name kutusuna başlık adı küçük harfle yazılır ve Header Value Pattern alanına beklenen biçim girilir (ör. ^[A-Za-z0-9]{32}$). Form Add ile kaydedilir. Bu denetim Structure Checks anahtarına bağlıdır (Bir parametrenin değerini uzunluk veya regex desenle kısıtlayabilir miyim (Value length / Value pattern)?).
Doğrulama
Host grubu Blocking modundayken başlık olmadan istek gönderilir.
Komut: curl -s -o /dev/null -w "%{http_code}\n" https://www.example.com/api/rapor
418-H "X-Api-Key: …" ile gönderildiğinde uygulamanın yanıtı döner; istemcinin yazdığı harf büyüklüğü önemsizdir. 418, Blocking Status Code varsayılanıdır.Event Logs kaydının Attacks sekmesine bakılır.
Attack area: Header@x-api-key · Attack name: Required headersYöntem 2: WEB-CLI
- Nasıl çalışır Başlık adı WEB-CLI ile kuralın Header ortak parçasındaki
headerMustArgslistesine yazılır. - 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ı
addyazılmayan alanlara komutun varsayılanlarını yazar (headerSize≤ 4096,headerKeyCount≤ 32,valueLength0–1024)
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 header: (all keys) görünen satır Header 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 başlıklardı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-keyBüyük başlıklı istekler engellenmesin diye toplam boyut sınırı komutta verilir:
waf rule-parts add poolId <vService> hostGroupId defaultHost ruleId <kural> loc header --headerSize.op "<=" --headerSize.val 65536 --headerMustArgs.0 x-api-keyDoğrulama
Parça yeniden görüntülenir.
Komut: waf rule-parts show poolId <vService> hostGroupId defaultHost ruleId <kural> <parça>
headerMustArgs satırında x-api-keySık Yapılan Hatalar
- Adı büyük harfle yazmak. Liste girdileri küçük harfe çevrilmez;
X-Api-Keyyazılırsa zorunluluk hiçbir istekte sağlanmaz ve her istek ihlal üretir. - Zorunluluğu Any paths kuralına koymak. Any paths kuralının Header ortak kuralı, kendi Header kuralı olmayan bütün path'lere uygulanır; başlığı taşımayan tarayıcı ve izleme istekleri de engellenir. Zorunluluk yalnızca ilgili sayfa tipine yazılır.
- Zorunluluğu değişken kuralında aramak. Değişken kuralı başlığın değerini denetler, varlığını denetlemez; başlık gelmezse değişken kuralı hiç çalışmaz.
- Path'e özel Header kuralının öğrenmeyle gevşeyeceğini beklemek. Başlık öğrenmesi Any paths kuralına yazılır (yalnızca Combine With Old Rules ile uygulanan Analysis & Learning sayfa tipinin kendi Header kuralını genişletebilir); sayfa tipinin kendi Header ortak kuralından kaynaklanan ihlaller o kural elle düzenlenerek giderilir.
Dokümantasyonda nasıl yapılır
