HTTP Request Body
HTTP Request Body Koşulu Nedir?
HTTP Request Body koşulu, HTTP isteğinin gövde (body) içeriğini değerlendirerek trafik yönlendirme ve manipülasyon kararları almak için kullanılan bir koşul tipidir.
HTTP istek gövdesi, istemcinin (tarayıcı, mobil uygulama, API client vb.) sunucuya gönderdiği asıl verinin bulunduğu bölümdür. Başlıklardan sonra, bir boş satırın ardından gelen veri bölümüdür.
Bu koşul, POST, PUT, PATCH gibi gövde içeren HTTP isteklerini kontrol etmek için kullanılır.
WARNING
İstek gövdesini kontrol etmek, tüm gövdenin bellekte tutulmasını gerektirir. Bu nedenle Body Size to Parse(Bytes) ayarı ile kontrol edilecek gövde boyutu sınırlandırılmalıdır.
HTTP Request Body Koşulunun Önemi
Modern API'lerde ve web uygulamalarında istek gövdesi, kullanıcı verilerini, form içeriklerini ve API payload'larını taşır.
HTTP Request Body koşulu sayesinde;
- JSON/XML payload'ları içerik bazlı filtrelenebilir,
- Form verileri kontrol edilebilir,
- Hassas veri içeren istekler tespit edilebilir,
- Belirli pattern'lere sahip istekler farklı işlenebilir,
- Güvenlik filtreleri uygulanabilir.
HTTP Request Body vs HTTP Response Body
| Kriter | HTTP Request Body | HTTP Response Body |
|---|---|---|
| Yön | İstemci → Sunucu | Sunucu → İstemci |
| İçerik | Form, JSON, XML | HTML, JSON, Dosya |
| Değerlendirme | Request + Response aşaması | Yalnız Response aşaması |
Kullanılabildiği vService Tipleri
Koşul, hem istek (At Request) hem yanıt (At Response) aşamasında kullanılabilir; gövde istek anında okunur ve yanıt aşamasında da aynı değer üzerinden değerlendirilebilir.
Nasıl Eklenir?
Yeni bir HTTP Request Body Koşulu, TR7 web yönetim arayüzü üzerinden aşağıdaki adımlar izlenerek eklenebilir:
- Sol altta bulunan TR7 logosuna tıklanarak Configuration Menu açılır.
- Load Balancer → Conditions → Add adımları takip edilir.
- Criteria olarak HTTP request body seçilir.
- Koşula ait ilgili konfigürasyonlar yapılandırılır.
Addbutonuna tıklanarak koşul eklenir.
HTTP Request Body Koşulu Ekleme Formu
HTTP Request Body Koşulu Ekleme Formu
INFO
Condition Name
Oluşturulacak koşul için isteğe bağlı bir isim girilebilir.
Bu alan, özellikle aşağıdaki senaryolarda önemlidir:
- Aynı vService altında çok sayıda koşul tanımlandığında,
- Benzer kriterlere sahip koşulların ayırt edilmesi gerektiğinde,
- Koşulun hangi iş kuralını temsil ettiğinin hızlıca anlaşılması istendiğinde.
Bu alan boş bırakıldığında, TR7 ilgili koşulun içeriğini analiz ederek Condition Description alanında otomatik ve açıklayıcı bir isim oluşturur. Oluşturulan bu açıklama, koşul listelerinde isim olarak kullanılır.
INFO
Criteria Zorunlu
Koşulun tipini belirleyen alandır; aranabilir açılır listeden HTTP request body seçilir. Bu seçim, formda görüntülenecek alanları belirler. Kriter, koşul kaydedildikten sonra değiştirilemez: farklı bir kritere ihtiyaç duyulursa yeni bir koşul tanımlanır. Listedeki tüm kriterler ve kapsamları için Conditions sayfasındaki kriter kataloğuna bakılabilir.
INFO
Content Matching Method Varsayılan: Exact match
İçeriğin nasıl eşleştirileceğini belirler. Alan, formda etiketsiz bir açılır liste olarak Criteria'nın hemen altında görünür ve Exact match seçili açılır. Bu kriterde Is present seçeneği sunulmaz.
| Seçenek | Kod | Açıklama |
|---|---|---|
| Exact match | exactMatch | Değer birebir eşleşmelidir. |
| Start | start | Değer belirtilen metinle başlamalıdır. |
| End | end | Değer belirtilen metinle bitmelidir. |
| Includes | sub | Değer belirtilen metni içermelidir. |
| Regex | regex | Değer düzenli ifadeyle eşleşmelidir. |
Örnek Gövde Eşleştirmeleri:
| Yöntem | Query | Eşleşen Gövdeler |
|---|---|---|
| Includes | "admin" | JSON'da admin kelimesi |
| Regex | "role"\s*:\s*"admin" | JSON role:admin |
| Start | <?xml | XML belgeleri |
| Includes | password | Şifre içeren istekler |
INFO
Case Insensitive Varsayılan: Kapalı
Büyük/küçük harf duyarlılığını kontrol eder.
- Aktif:
example,EXAMPLE,Exampleaynı kabul edilir - Aktif Değil: Tam eşleşme gerekir (varsayılan)
TIP
URL path'leri ve header isimleri genellikle case-insensitive işlenmeli, değerler ise case-sensitive kalmalıdır.
INFO
Query Zorunlu
Eşleştirilecek olan değer bu alana girilir. Seçilen eşleştirme yöntemine göre:
- Exact match: Değerin birebir karşılığını kontrol eder.
- Start: Aranacak metin parçasının başlangıcını kontrol eder.
- End: Aranacak metin parçasının bitişini kontrol eder.
- Includes: Aranacak metin parçasının içinde geçme durumunu kontrol eder.
- Regex: Düzenli ifade deseni (Regex) ile kontrol eder.
Örnek değerler:
"admin":true: Admin yetkisi kontrolü<script>: XSS payload tespitiSELECT.*FROM: SQL injection regexpassword: Şifre alanı içeren istekler
INFO
Body Size to Parse(Bytes)
HTTP istek gövdesinin kaç byte'ının kontrol edileceği belirlenir; gövdenin yalnızca bu alanda belirtilen ilk N baytı incelenir, sonrası hiç değerlendirilmez.
| Değer | Açıklama |
|---|---|
| Minimum | 1 byte |
| Maksimum | 16384 bytes (16 KB) |
| Varsayılan | 1024 bytes (form açılış değeri; alan boş bırakılırsa sistem 4096 kullanır) |
TIP
Performans için mümkün olan en düşük değer kullanılmalıdır; aranan desen genellikle gövdenin başındadır.
WARNING
Gövde denetimi, vService üzerinde istek tamponlamayı gerektirir ve maliyeti vService genelinde oluşur: aynı vService'te birden fazla gövde koşulu varsa, istekler bu koşullar arasındaki en büyük Body size değerine kadar tamponlanır. 16 KB gibi yüksek bir değer tek bir koşul için bile verilse, o vService'teki tüm istekleri etkiler.
INFO
Condition Description
Girilen kriter ve değerler doğrultusunda TR7 tarafından otomatik olarak oluşturulur.
Bu açıklama;
- Koşulun hangi değer için geçerli olduğunu,
- Hangi kriter üzerinden çalıştığını,
- Listeleme ekranlarında koşulun hızlıca anlaşılmasını
sağlayacak şekilde sistem tarafından dinamik olarak üretilir.
INFO
Form Butonları
Add
Add butonuna tıklanarak koşul ekleme işlemi tamamlanır.
Add & Repeat
Add & Repeat butonu ile koşul ekleme işlemi tamamlanır ve farklı konfigürasyonlarla ilgili pencereden çıkılmadan yeni bir koşul daha eklenebilir.
Koşul Eklendi
Operasyonel Kullanım Önerileri
- Body Size'ı Optimize Edin. Gereksiz yere yüksek body size ayarlamayın. Aradığınız pattern genellikle gövdenin başında veya belirli bir bölümünde olacaktır.
- Güvenlik Taraması için Kullanın. SQL injection, XSS gibi saldırı pattern'lerini tespit etmek için regex kullanın.
- JSON/XML Yapısına Dikkat. JSON ve XML'de whitespace farklılıkları olabilir. Regex yazarken
\s*gibi esnek pattern'ler kullanın. - GET İsteklerinde Çalışmaz. GET istekleri genellikle gövde içermez. Bu koşul POST, PUT, PATCH gibi metodlarda anlamlıdır.
Canlı Ortamlarda Yaygın Kullanım Senaryoları
Aşağıdaki örnekler, ilgili koşulun gerçek sistemlerde en sık karşılaşılan kullanım senaryolarında nasıl uygulandığını göstermektedir. Bu senaryolar, canlı ortamlarda yaygın olarak tercih edilen ve sahada edinilmiş deneyimlere dayanan pratikleri temel alır.
Senaryo 1: SQL Injection Saldırı Tespiti ve Engelleme
Kullanım Amacı: HTTP istek gövdesinde SQL injection pattern'lerini tespit ederek veritabanı saldırılarını engellemek ve uygulama güvenliğini korumak.
Konfigürasyon: Content Matching Method → Regex · Case insensitive → işaretli · Query → (SELECT|INSERT|UPDATE|DELETE|DROP|UNION).*FROM · Body size to parse → 4096
Aksiyon Önerileri:
- ✅ Block → SQL injection pattern'i tespit edildiğinde istek 403 Forbidden ile engellenir.
Senaryo 2: XSS (Cross-Site Scripting) Saldırı Tespiti
Kullanım Amacı: HTTP istek gövdesinde XSS payload'larını tespit ederek client-side saldırıları engellemek ve kullanıcı güvenliğini sağlamak.
Konfigürasyon: Content Matching Method → Regex · Case insensitive → işaretli · Query → <script|javascript:|onerror=|onload= · Body size to parse → 4096
Aksiyon Önerileri:
- ✅ Show Content → XSS pattern'i tespit edildiğinde istek engellenir, "An unexpected request was made." redacted yanıtı gösterilir.
Senaryo 3: Hassas Veri İçeren İsteklerin Tespiti
Kullanım Amacı: İstek gövdesinde şifre, kredi kartı gibi hassas veri taşıyan istekleri tespit ederek şifrelenmemiş (HTTP) bağlantılardan gönderilmesini engellemek.
Konfigürasyon: Content Matching Method → Regex · Case insensitive → işaretli · Query → (password|credit_card|ssn|cvv) · Body size to parse → 8192
Aksiyon Önerileri:
- ✅ Block → Hassas veri HTTP protokolü üzerinden gönderiliyorsa istek engellenir, HTTPS zorunlu tutulur.
- ✅ Add HTTP Header →
X-Contains-PII: trueheader'ı eklenir, Kurum Servisi hassas veri varlığını bilir.
