Bozuk (parse edilemeyen) JSON / XML / form gövdelerini engelleyebilir miyim?
Kısa cevap
Evet. JSON, Xml ve Form sekmelerinin ortak kuralındaki Block Invalid JSON Contents, Block Invalid XML Contents ve Block Invalid Form Contents kutuları işaretliyken, Content-Type ile JSON, XML ya da form olduğunu bildirip çözümlenemeyen gövde Content Integrity kategorisinde 24 puanlık ihlal üretir. Kutu işaretli değilken bozuk gövde engellenmez, ham içerik olarak Raw sekmesinin imza taramasından geçer. Any paths varsayılanında kutu Xml için işaretli, JSON ve Form için işaretsizdir; sayfa tipinde açılan ortak kural formu bu değerlerle dolu gelir. Form'da denetimin asıl konusu bozuk multipart yapısıdır; tarayıcının boş bıraktığı dosya alanı (filename="") da çözümleme hatası sayıldığından isteğe bağlı dosya alanı olan formlar dosya seçilmeden gönderildiğinde de ihlal oluşur. Denetim Blocking ve Monitor modlarında çalışır ve Checks penceresindeki Structure Checks anahtarına bağlıdır.
Sorun: Bozuk Gövdeler Uygulamaya Ulaşıyor
Content-Type: application/json bildirip geçerli JSON olmayan, ya da sınırları bozuk multipart gövdeler, gövde denetimlerini atlatmak ya da uygulamanın çözümleyicisinde hata üretmek için kullanılabilir. Bildirdiği türe uymayan gövdelerin uygulamaya ulaşmadan reddedilmesi isteniyor.
Çözüm: İki Yöntem
İki yöntem aynı kutuyu ayarlar; biri seçilir.
| Durumunuz | Uygun yöntem |
|---|---|
| Ayarı arayüzden yapmak istiyorum | Yöntem 1: Ortak kuralda Block invalid kutusu |
| Betik ya da komut satırıyla yapmak istiyorum | Yöntem 2: WEB-CLI |
Yöntem 1: Ortak Kuralda Block Invalid Kutusu Önerilen
- Nasıl çalışır Gövde
Content-Type'a göre JSON, XML ya da form olarak çözümlenir; çözümleme başarısız olursa kutu işaretliyse ihlal yazılır. - Nerede açılır Left Monitor Panel → WAF-Protected vServices → vService → WAF Management → N page types → kural → JSON / Xml / Form → Add Common Rule for …
- GereksinimStructure Checks açık
- vService tipi WAF açık HTTP vService
- Kapsam JSON:
…/jsonve+jsontürleri · Xml:…/xmlve+xmltürleri · Form:application/x-www-form-urlencodedvemultipart/form-data
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 Block Invalid … Contents kutuları formda ve panelde gizlenir ve uygulanmaz.
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). Bütün path'ler için uygulanacaksa Any Paths satırı seçilir.
JSON, Xml ya da Form sekmesine tıklanır.
Tablonun üstündeki Add Common Rule for … tıklanır; kural 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.
Block Invalid JSON Contents (ya da Block Invalid XML Contents, Block Invalid Form Contents) kutusu işaretlenir. Aynı formdaki Block All … Contents kutusu bu türdeki bütün gövdeleri engeller; yalnızca bozuk gövdeler hedefleniyorsa işaretsiz bırakılır (Bir sayfada JSON veya XML gövdesini tamamen yasaklayabilir miyim (Block All JSON Contents / Block All XML Contents)?).
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 JSON türünde bozuk gövde gönderilir.
Komut: curl -s -o /dev/null -w "%{http_code}\n" -H "Content-Type: application/json" -d '{"ad":' https://www.example.com/api/kayit
418Event Logs kaydının Attacks sekmesine bakılır.
Attack area: JSON · Attack name: Block invalid JSON contentsYöntem 2: WEB-CLI
- Nasıl çalışır Kutu WEB-CLI ile
--jsonBlockInvalid,--xmlBlockInvalidya da--formBlockInvalidalanına 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ı
addyazılmayan alanlara komutun varsayılanlarını yazar;…BlockAllve…BlockInvalidvarsayılanı açıktır
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 json: (all keys) görünen satır JSON ortak parçasıdır:
waf rule-parts list poolId <vService> hostGroupId defaultHost ruleId <kural>waf rule-parts update poolId <vService> hostGroupId defaultHost ruleId <kural> id <parça> --jsonBlockInvalid trueBütün JSON gövdelerinin engellenmemesi için --jsonBlockAll false verilir; diğer alanlar komutun varsayılanlarıyla yazılır (jsonKeyCount ≤ 1024, jsonDepth ≤ 8, valueLength 0–1024):
waf rule-parts add poolId <vService> hostGroupId defaultHost ruleId <kural> loc json --jsonBlockAll false --jsonBlockInvalid trueDoğrulama
Parça yeniden görüntülenir.
Komut: waf rule-parts show poolId <vService> hostGroupId defaultHost ruleId <kural> <parça>
jsonBlockInvalid satırı görünür, jsonBlockAll satırı görünmezSık Yapılan Hatalar
Content-Type'ı JSON olmayan bozuk gövdeyi bu denetimin yakalamasını beklemek. Gövde, bildirilen türe göre çözümlenir; türü JSON, XML ya da form olmayan gövdeler Raw sekmesinin denetimlerine kalır (Raw sekmesi ne inceler; parse edilemeyen içerik ne olur?).- İşlenebilir boyutu aşan gövdeyi bozuk sanmak. Gövde işleme sınırını aşan ya da zamanında tamamlanmayan gövde hiç çözümlenmez; bu durumu Raw sekmesindeki Block Unparsed Contents belirler (Block Unparsed Contents ile Block Unexpected Parser Errors arasındaki fark nedir?).
- Block invalid ile Block all'u karıştırmak. Block Invalid … Contents yalnızca çözümlenemeyen gövdeleri, Block All … Contents o türdeki bütün gövdeleri engeller.
- WEB-CLI'da
addile varsayılanlara güvenmek.addkomutu…BlockAllalanını da açık yazar;--jsonBlockAll falseverilmezse sayfaya gelen bütün JSON gövdeleri engellenir.
Dokümantasyonda nasıl yapılır
