Skip to content
Smarter by Design.Simpler for Business

JSON ​

JSON Nedir? ​

JSON, içerik türü JSON olan istek gövdelerine uygulanan denetimleri gösterir. Sekme iki katmandan oluşur: üstte tüm JSON içeriğine uygulanan ortak kural (common rule), altta belirli anahtarlara özel kuralların listelendiği değişken tablosu (argument rules).

JSON Gövdesi Nedir?

JSON denetimleri, gövdesi olan ve içerik türü JSON'a işaret eden (application/json ile +json son ekli türler) isteklerde çalışır. Gövde çözümlenir ve anahtarlar ile değerler ağaç yapısında değerlendirilir: anahtarlar, iç içe seviyeler için . ile birleşen noktalı yollarla anılır (dizi indisleri yolu uzatmaz), ölçümler UTF-8 bayt cinsinden yapılır ve değer denetimleri yalnızca metin değerlere uygulanır (sayı ve mantıksal değerler kapsam dışıdır). Bu sekmedeki denetimlerin her biri, gövdenin belirli bir öğesini hedefler:

Örnek gövde:

json
{
  "user": {
    "name": "john",
    "roles": ["admin", "editor"]
  }
}
ÖğeÖrnekteki karşılığıİlgili denetimler
Anahtar adıuser, name, rolesJSON Key Length
Anahtar yoluuser.name, user.rolesAllowed JSON Keys, değişken kuralları
Metin değerlerjohn, admin, editorJSON Value Length, JSON Value Pattern, OWASP Check
Değer (yaprak) sayısı3JSON Key Count
İç içe derinlikEn derin değer olan admin için 3 (nesneler ve diziler birer seviye sayılır)JSON Depth

Ekrana Erişim ​

  1. Page Types listesinde kurala tıklanır; kuralın detay paneli sağda açılır.
  2. Panelin sekme şeridinden JSON sekmesine tıklanır.

Panelin başlık öğeleri ve sekme şeridinin davranışı için bkz. Path. Tablodaki değer gösterimleri de Path sekmesindekiyle aynı biçimi kullanır: kısıt yoksa No Restriction, tek yönlü kısıtlar ≤ n / ≥ n, aralıklar [a - b], açık/kapalı alanlar ✓ / - olarak görünür.

Detay Paneli - JSON SekmesiDetay Paneli - JSON Sekmesi

Devralma ve Rule Source

Kural kendi JSON denetimini tanımlamamışsa değerler, kural eşleşme önceliğine göre path'e uyan glob kuraldan veya Any Paths kuralından devralınır; tablonun sonundaki Rule Source satırı, denetimlerin geldiği kuralın path'ini gösterir (örneğin Any Paths). Kural kendi JSON denetimini tanımlıyorsa Rule Source satırı bulunmaz.

Add Common Rule for JSON Ekranı ​

Tablonun üzerindeki yeşil artı ikonlu Add common rule for JSON butonuna tıklandığında, kurala kendi JSON ortak denetimini tanımlayan form açılır; kayıtla birlikte devralma o kural için sona erer. Kural kendi JSON denetimine zaten sahipse aynı buton, kalem ikonlu Edit common rule for JSON (formu mevcut değerlerle açar) ve Delete common rule for JSON (ortak kuralı onay sorusu sormadan kaldırır) olarak görünür. Ekleme formu boş açılmaz; Any Paths kuralının ilgili denetim değerleriyle önceden doldurulmuş gelir. Any Paths kuralının kendisinde ise silme butonu bulunmaz: catch-all kuralın ortak denetimi kaldırılamaz.

Bu ekran aynı zamanda düzenleme ekranıdır: ortak denetim ister elle eklenmiş ister öğrenmeyle oluşturulmuş olsun, Edit common rule for JSON butonuyla açılan form aşağıdaki alanların aynısını kuralın mevcut değerleriyle gösterir.

Add Common Rule for JSON EkranıAdd Common Rule for JSON Ekranı

INFO

Virtual Host Group ​

Denetimin ekleneceği host grubu salt-okunur olarak gösterilir; panelin hangi grubun Page Types ekranından açıldığına göre belirlenir ve formdan değiştirilemez.

INFO

Path ​

Denetimin ekleneceği kuralın path'i gösterilir; form, detay paneli hangi kural için açıldıysa o kurala bağlıdır.

INFO

Area ​

Denetimin isteğin hangi bölümüne uygulandığını gösterir. Alan, formun açıldığı sekmeye kilitlidir: form JSON sekmesinden açıldığında JSON olarak gelir ve değiştirilemez.

INFO

Argument Name ​

Denetimin kapsamını gösterir. Ortak kural formunda bu alan Any Arguments olarak kilitlidir ve alanlar tüm JSON içeriğine uygulanır; belirli bir anahtara özel kural ise Add Argument Rule for JSON ekranından tanımlanır. JSON'da anahtar adı, iç içe seviyeler için . ile birleşen noktalı tam yol olarak yazılır (örneğin user.name).

Bir anahtarın kendi değişken kuralı varsa, o anahtarın değer denetimleri (JSON Value Length, JSON Value Pattern, OWASP Check, Detailed Log) tümüyle bu kuraldan alınır; ortak kuralın değer denetimleri o anahtara artık uygulanmaz. Bölüm geneli denetimler (JSON Key Length, JSON Key Count, JSON Depth, Allowed JSON Keys) ise uygulanmaya devam eder. Bir ada özel kural tanımlamak, o yolu Allowed JSON Keys listesine kendiliğinden eklemez.

INFO

JSON Key Length ​

Gövdedeki anahtar adlarının uzunluk kısıtı tanımlanır; her derinlikteki anahtarın kendi adı (yolun son parçası) UTF-8 bayt cinsinden ölçülür ve aynı ad bir kez değerlendirilir:

SeçenekAnlamı
No RestrictionUzunluk kısıtı uygulanmaz.
Less Than or Equal ToUzunluk, girilen değere eşit veya altında olmalıdır.
Equals ToUzunluk, girilen değere eşit olmalıdır.
Greater Than or Equal ToUzunluk, girilen değere eşit veya üstünde olmalıdır.
RangeUzunluk, girilen iki değer arasında (sınırlar dahil) olmalıdır.

Değer alanına yalnızca sayı girilebilir. Kısıta uymayan her anahtar adı, Structure Limits kategorisinde JSON Key Length ihlali olarak puanlanır ve saldırı kaydına düşer.

INFO

JSON Key Count ​

Gövdedeki değer (yaprak) sayısının kısıtı tanımlanır: sayılan şey anahtarlar değil, ağacın ucundaki skaler değerlerdir. Dizi elemanlarının her biri ayrı sayılır; nesne ve diziler sayıma girmez (örnekteki gövdede sayım 3'tür: john, admin, editor):

SeçenekAnlamı
No RestrictionSayı kısıtı uygulanmaz.
Less Than or Equal ToDeğer sayısı, girilen değere eşit veya altında olmalıdır.
Equals ToDeğer sayısı, girilen değere eşit olmalıdır.
Greater Than or Equal ToDeğer sayısı, girilen değere eşit veya üstünde olmalıdır.
RangeDeğer sayısı, girilen iki değer arasında (sınırlar dahil) olmalıdır.

Değer alanına yalnızca sayı girilebilir. Kısıta uymayan istek, Structure Limits kategorisinde JSON Key Count ihlali olarak puanlanır ve saldırı kaydına düşer.

INFO

Block All JSON Contents ​

İşaretlendiğinde, içerik türü JSON olan ve gövde taşıyan her istek, gövde çözümlenmeden Structure Policies kategorisinde Block All JSON Contents ihlali olarak puanlanır. JSON gövde kabul etmeyen path'ler için kullanılır.

INFO

Block Invalid JSON Contents ​

İşaretlendiğinde, JSON olarak çözümlenemeyen gövdeler Content Integrity kategorisinde Block Invalid JSON Contents ihlali olarak puanlanır. İşaretli değilken çözümlenemeyen gövde denetimsiz kalmaz; ham içerik olarak RAW imza taramasından geçirilir.

INFO

JSON Depth ​

Gövdenin iç içe derinlik kısıtı tanımlanır; değerin çevresindeki her nesne ve her dizi bir seviye sayılır (örneğin {"a":{"b":1}} gövdesinde derinlik 2, {"a":[{"b":1}]} gövdesinde 3'tür):

SeçenekAnlamı
No RestrictionDerinlik kısıtı uygulanmaz.
Less Than or Equal ToDerinlik, girilen değere eşit veya altında olmalıdır.
Equals ToDerinlik, girilen değere eşit olmalıdır.
Greater Than or Equal ToDerinlik, girilen değere eşit veya üstünde olmalıdır.
RangeDerinlik, girilen iki değer arasında (sınırlar dahil) olmalıdır.

Değer alanına yalnızca sayı girilebilir. Kısıta uymayan istek, Structure Limits kategorisinde JSON Depth ihlali olarak puanlanır ve saldırı kaydına düşer.

INFO

Allowed JSON Keys ​

İzin verilen anahtar yollarının listesi tanımlanır (pozitif liste). Adlar noktalı tam yol olarak, her derinlik için . kullanılarak girilir (örneğin user.name) ve büyük/küçük harfe duyarlı karşılaştırılır. Liste, yalnızca değer taşıyan yolları değil kapsayıcı yolları da içermelidir: örnekteki gövde için user, user.name ve user.roles yollarının tümü listede olmalıdır. Alan, No Restriction konumundayken tüm anahtarlara izin verilir; kısıt açıldığında listede olmayan her farklı yol (kapsayıcılar dahil), Structure Policies kategorisinde Allowed JSON Keys ihlali olarak puanlanır ve saldırı kaydına düşer.

JSON için zorunlu anahtar listesi bulunmaz; Query ve Form bölümlerindeki Required alanının JSON'da karşılığı yoktur. Bir anahtara özel değişken kuralı tanımlamak, o yolu bu listeye kendiliğinden eklemez.

INFO

JSON Value Length ​

Metin değerlerin uzunluk kısıtı tanımlanır. Kısıt, her metin değere ayrı ayrı, UTF-8 bayt cinsinden uygulanır; sayı ve mantıksal değerler denetlenmez:

SeçenekAnlamı
No RestrictionUzunluk kısıtı uygulanmaz.
Less Than or Equal ToDeğer uzunluğu, girilen değere eşit veya altında olmalıdır.
Equals ToDeğer uzunluğu, girilen değere eşit olmalıdır.
Greater Than or Equal ToDeğer uzunluğu, girilen değere eşit veya üstünde olmalıdır.
RangeDeğer uzunluğu, girilen iki değer arasında (sınırlar dahil) olmalıdır.

Değer alanına yalnızca sayı girilebilir. Kısıtı aşan her değer, Structure Limits kategorisinde JSON Value Length ihlali olarak puanlanır ve saldırı kaydına düşer.

INFO

OWASP Check ​

İşaretlendiğinde, çözümlenen gövdedeki her anahtar adı ve her metin değer ayrı ayrı OWASP imza taramasına tabi tutulur. İmza isabetleri, yapısal ihlallerden farklı olarak kendi puanlarıyla saldırı puanına birikerek katılır. Taramada vService'in OWASP Rules ekranında etkin olan imza seti kullanılır; imzaların dökümü için bkz. Signature & Rule Library.

OWASP Exclusions ​

Kutu işaretlendiğinde formda beliren bu alanla, taramadan hariç tutulacak OWASP kuralları çoklu seçimle belirlenir; kutu işaretli değilken alan görünmez, seçim yapılmadığında alanda Nothing chosen yazar. İstisna tanımlandığında, detay panelindeki OWASP Check satırında ✓ işaretinin yanında istisna sayısı gösterilir.

INFO

Detailed Log Varsayılan: İşaretsiz ​

İmza (OWASP) isabetlerinin günlük ayrıntısını yönetir; JSON için varsayılan olarak işaretli değildir. Açıkken Event Logs kaydında eşleşen içerik, çevresindeki bağlamla birlikte gösterilir; kapalıyken kayıt yine düşer ancak içerik yerine Detailed log disabled ibaresi görünür. Yapısal ihlallerin özet bilgisi bu ayardan bağımsız olarak her zaman yazılır.

INFO

JSON Value Pattern ​

Metin değerlerin uyması gereken düzenli ifade (regex) deseni tanımlanır. Denetim pozitiftir: değer desene uymadığında, Structure Policies kategorisinde JSON Value Pattern ihlali üretilir ve saldırı kaydında değerin kendisi görünür. Desen, değerin herhangi bir yerinde aranır; değerin tamamının eşleşmesi isteniyorsa desen ^ ve $ ile sınırlandırılmalıdır. Alanın yanındaki aA butonuyla eşleştirme büyük/küçük harf duyarsız yapılabilir; bu seçenek detay panelinde desenin yanında (-i) eki olarak görünür. Desen tanımlanmazsa değer içeriğine desen denetimi uygulanmaz.

INFO

Add ​

Add butonuna tıklanarak ortak kural ekleme işlemi tamamlanır; buton, formda hata kalmadığında etkinleşir. Ek bir onay penceresi veya dağıtım (deploy) adımı yoktur; WAF yapılandırması otomatik olarak yeniden üretilip uygulanır ve paneldeki değerler anında güncellenir.

Mod davranışı ve puanlama

Bu sekmedeki yapı denetimleri yalnızca Blocking ve Monitor modlarında çalışır; Learning modunda çalıştırılmaz, bunun yerine gözlenen trafikten kısıt önerileri öğrenilir. Yapısal ihlaller yüksek puanlıdır; varsayılan engelleme eşiğinde tek bir ihlal, Blocking modunda isteğin engellenmesi için yeterlidir (Monitor modunda saldırı olarak raporlanır ancak istek geçirilir). OWASP imza isabetleri ise kendi puanlarıyla birikerek eşiğe ulaşır.

Tamponu aşan gövdeler

Gövde denetim tamponuna sığmayacak kadar büyük olduğunda JSON denetimleri çalıştırılamaz; bu durumda davranışı RAW sekmesindeki Block Unparsed Contents ayarı belirler.

Add Argument Rule for JSON Ekranı ​

Ortak kuralın altındaki Argument tablosu, belirli anahtar yollarına özel değişken kurallarını listeler; tablonun arama kutusuyla yol üzerinden filtreleme yapılabilir. Kuralın kendi tanımladığı değişken kuralları kalın, devralınanlar italik gösterilir. Tablonun üzerindeki yeşil artı ikonlu Add argument rule for JSON butonuna tıklandığında, tek bir anahtar yoluna özel denetim tanımlayan form açılır.

Tablodaki bir satıra tıklandığında altında değişken kuralının detayı açılır; kuralın kendi değişken kuralında kalem ikonlu Edit (formu mevcut değerlerle açar) ve çöp kutusu ikonlu Delete (değişken kuralını onay sorusu sormadan kaldırır) butonları görünür. Devralınan satırlarda bu butonlar bulunmaz; devralınan kural yalnızca kaynağı olan kuraldan düzenlenebilir.

Path'e özel kurallarda ekleme formu boş açılmaz; denetim alanları Any Paths kuralının ortak JSON denetim değerleriyle önceden doldurulmuş gelir. Any Paths kuralının kendisinde ise form, alan varsayılanlarıyla açılır. Bu ekran aynı zamanda düzenleme ekranıdır: Edit butonuyla açılan form aşağıdaki alanların aynısını kuralın mevcut değerleriyle gösterir; düzenlemede, ekleme formundan farklı olarak Argument Name alanı da kilitlenir; kuralın hangi yola bağlı olduğu sonradan değiştirilemez. Query ve Header'daki tekrar sınırı alanının (Value Count) JSON karşılığı yoktur; formda bu alan bulunmaz.

Add Argument Rule for JSON EkranıAdd Argument Rule for JSON Ekranı

INFO

Virtual Host Group ​

Denetimin ekleneceği host grubu salt-okunur olarak gösterilir; panelin hangi grubun Page Types ekranından açıldığına göre belirlenir ve formdan değiştirilemez.

INFO

Path ​

Denetimin ekleneceği kuralın path'i gösterilir; form, detay paneli hangi kural için açıldıysa o kurala bağlıdır.

INFO

Area ​

Denetimin isteğin hangi bölümüne uygulandığını gösterir. Alan, formun açıldığı sekmeye kilitlidir: form JSON sekmesinden açıldığında JSON olarak gelir ve değiştirilemez.

INFO

Argument Name ​

Kuralın bağlanacağı anahtarın yolu tanımlanır. Kapsam seçici bu formda One Argument olarak kilitlidir; yol, yanındaki metin kutusuna girilir ve boş bırakılamaz (boş bırakılırsa Enter argument name hatası görünür). Yol, iç içe seviyeler için . ile birleşen noktalı tam yol olarak yazılır (örneğin user.name) ve büyük/küçük harfe duyarlı, birebir eşleştirilir; yalnızca son parçayı içeren bir giriş (name), iç içe anahtarı yakalamaz. Dizi indisleri yolu uzatmadığından, bir dizinin elemanları dizinin kendi yoluyla eşleşir: user.roles yoluna bağlı kural, dizideki her elemana uygulanır.

Aynı yola sahip ikinci bir değişken kuralı eklenemez; denemede part collision hatası döner. Düzenleme formunda bu alan değiştirilemez; kural başka bir yola taşınmak isteniyorsa silinip yeniden eklenmelidir.

INFO

JSON Value Length ​

Anahtarın metin değerlerinin uzunluk kısıtı tanımlanır. Kısıt, her metin değere ayrı ayrı, UTF-8 bayt cinsinden uygulanır; sayı ve mantıksal değerler denetlenmez:

SeçenekAnlamı
No RestrictionUzunluk kısıtı uygulanmaz.
Less Than or Equal ToDeğer uzunluğu, girilen değere eşit veya altında olmalıdır.
Equals ToDeğer uzunluğu, girilen değere eşit olmalıdır.
Greater Than or Equal ToDeğer uzunluğu, girilen değere eşit veya üstünde olmalıdır.
RangeDeğer uzunluğu, girilen iki değer arasında (sınırlar dahil) olmalıdır.

Değer alanına yalnızca sayı girilebilir. Kısıtı aşan her değer, Structure Limits kategorisinde JSON Value Length ihlali olarak puanlanır ve saldırı kaydına düşer.

INFO

OWASP Check Varsayılan: İşaretli ​

İşaretlendiğinde anahtarın adı ve her metin değeri ayrı ayrı OWASP imza taramasına tabi tutulur; varsayılan olarak işaretlidir. Kutu kaldırıldığında yol, anahtar adı ve değerleriyle birlikte imza taramasından tümüyle çıkar; sık yanlış pozitif üreten bir alanı taramadan muaf tutmanın yolu budur. Taramada vService'in OWASP Rules ekranında etkin olan imza seti kullanılır; imzaların dökümü için bkz. Signature & Rule Library.

OWASP Exclusions ​

Kutu işaretlendiğinde formda beliren bu alanla, taramadan hariç tutulacak OWASP kuralları çoklu seçimle belirlenir; kutu işaretli değilken alan görünmez, seçim yapılmadığında alanda Nothing chosen yazar. İstisnalar yalnızca bu yolun taramasına uygulanır; diğer anahtarlar ortak kuralın istisna listesini kullanmaya devam eder.

INFO

Detailed Log Varsayılan: İşaretsiz ​

İmza (OWASP) isabetlerinin günlük ayrıntısını yönetir; JSON için varsayılan olarak işaretli değildir. Açıkken Event Logs kaydında eşleşen içerik, çevresindeki bağlamla birlikte gösterilir; kapalıyken kayıt yine düşer ancak içerik yerine Detailed log disabled ibaresi görünür. Yapısal ihlallerin özet bilgisi bu ayardan bağımsız olarak her zaman yazılır.

INFO

JSON Value Pattern ​

Anahtarın metin değerlerinin uyması gereken düzenli ifade (regex) deseni tanımlanır. Denetim pozitiftir: değer desene uymadığında, Structure Policies kategorisinde JSON Value Pattern ihlali üretilir ve saldırı kaydında değerin kendisi görünür. Desen, değerin herhangi bir yerinde aranır; değerin tamamının eşleşmesi isteniyorsa desen ^ ve $ ile sınırlandırılmalıdır. Alanın yanındaki aA butonuyla eşleştirme büyük/küçük harf duyarsız yapılabilir; bu seçenek detay panelinde desenin yanında (-i) eki olarak görünür. Desen tanımlanmazsa değer içeriğine desen denetimi uygulanmaz.

INFO

Add ​

Add butonuna tıklanarak değişken kuralı ekleme işlemi tamamlanır; buton, formda hata kalmadığında etkinleşir. Ek bir onay penceresi veya dağıtım (deploy) adımı yoktur; WAF yapılandırması otomatik olarak yeniden üretilip uygulanır ve tablodaki değerler anında güncellenir.

Boş alan, ortak kuraldan devralma anlamına gelmez

Değişken kuralı kaydedildiğinde, yolun değer denetimleri tümüyle bu kuraldan alınır; ortak kuralın değer denetimleri o yola artık uygulanmaz. Formdaki ön-dolum yalnızca bir başlangıç kolaylığıdır: kayıttan sonra alanlar ortak kuraldan bağımsızdır ve boş bırakılan bir alan (örneğin JSON Value Pattern) ortak kuraldaki değere geri dönmez, o denetim için kısıt yok anlamına gelir. Bölüm geneli denetimler (JSON Key Length, JSON Key Count, JSON Depth, Allowed JSON Keys) ise değişken kuralından etkilenmez ve uygulanmaya devam eder; değişken kuralı bir yolu bu denetimlerden veya Allowed JSON Keys listesinden muaf tutamaz.

Devralma ve öğrenme

Değişken kuralları da kural eşleşme önceliğine göre devralınır: kural, bir yol için kendi değişken kuralını tanımlamamışsa path'e uyan glob kuralın veya Any Paths kuralının aynı yola sahip değişken kuralı geçerli olur. Devralınan kurallar tabloda italik listelenir; detayında Rule Source satırı, kuralın geldiği path'i gösterir. Kural aynı yol için kendi değişken kuralını tanımladığında devralınan kural o kural için geçersiz kalır.

Header'dan farklı olarak JSON denetimleri path bazlı öğrenilir. Öğrenme (Conditional Learning, AI Learning, Teacher ve Event Logs üzerinden öğretme), ihlalin gerçekleştiği yola sahip bir değişken kuralı varsa güncellemeleri o kurala işler; örneğin OWASP Exclusions listesine istisna eklenir veya uzunluk sınırı genişletilir. Yanlış pozitif üreten bir JSON Value Pattern ise daraltılmaz, tümüyle temizlenir. Yolun değişken kuralı yoksa değişiklik ortak kurala işlenir; öğrenme kendiliğinden yeni değişken kuralı oluşturmaz.