URL Normalization
URL Normalization Aksiyonu Nedir?
URL Normalization aksiyonu, gelen HTTP isteklerindeki URL'leri standart bir formata dönüştürür. Bu aksiyon, farklı formatlarda gelen aynı kaynağa ait URL'leri normalleştirerek güvenlik, önbellekleme ve routing tutarlılığı sağlar.
Bu aksiyon yalnızca istek (request) aşamasında çalışır ve HTTP vService'lerde kullanılabilir.
/path/./to/../to/page
/path/to/%70age
URL Normalization Neden Gereklidir?
Aynı kaynağa işaret eden URL'ler farklı şekillerde yazılabilir. Bu durum güvenlik açıkları ve önbellekleme sorunlarına yol açabilir.
Örnek - Aynı Kaynağa Farklı URL'ler:
| URL | Normalleştirilmiş Hali |
|---|---|
/path/to/page | /path/to/page |
/path//to//page | /path/to/page |
/path/./to/../to/page | /path/to/page |
/path/to/%70age | /path/to/page |
URL normalizasyonu olmadan bu URL'ler farklı kaynaklar olarak işlenir ve:
- Kurum Servisi aynı kaynağı farklı adreslerle alır.
- Önbellek zehirlenmesine ve gereksiz önbellek girişlerine neden olabilir.
- Kurum Servisindeki adres tabanlı kurallar tutarsız sonuç verebilir.
URL Normalization Aksiyonunun Önemi
URL normalizasyonu, Kurum Servisine iletilen adreslerin tutarlılığı için önemli bir bileşendir.
URL Normalization aksiyonu;
- Dizin referanslarını (
/./,/../) Kurum Servisine iletmeden sadeleştirir, - Harf ve rakamların gereksiz yüzde kodlamasını çözer,
- Çift slash (
//) içeren adresleri tek biçime indirir, - Önbellek tutarlılığını sağlar,
- Kurum Servisi uygulamalarına tutarlı URL'ler iletir.
Bu nedenle URL Normalization aksiyonu, güvenli ve tutarlı trafik yönetimi için önemli bir araçtır.
Kullanılabildiği vService Tipleri
Çalışma Anı
Nasıl Eklenir?
Yeni bir URL Normalization Aksiyonu, 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 → Actions → Add adımları takip edilir.
- Aksiyon için benzersiz ve açıklayıcı bir isim girilir.
- Action Type olarak URL Normalization seçilir.
- Aksiyona ait ilgili konfigürasyonlar yapılandırılır.
- Conditions sekmesinden aksiyonun hangi koşul/koşullarda devreye gireceği belirlenir.
Addbutonuna tıklanarak aksiyon eklenir.
URL Normalization Aksiyonu Ekleme Formu
URL Normalization Aksiyonu Ekleme Formu
INFO
Hit Counter Varsayılan: Kapalı
Hit Counter, aksiyonun her çalışmasını sayar (aksiyonun kendi koşuluyla birlikte değerlendirilir; Deny gibi sonlandırıcı aksiyonlarda bile sayım kaybolmaz). Aksiyon bazlı hız ve toplamlar, vService panosundaki Action Hits sekmesinde ve canlı istatistik ekranında görüntülenir; listelerde ayrıca bir kolon olarak görünmez. Sayaç kümülatiftir; elle sıfırlama arayüzü yoktur: sayılan aksiyon kümesi değiştiğinde veya vService yeniden yüklendiğinde sıfırdan başlar, geçmiş ise panoda hız (hit/s) olarak korunur.
Yalnızca koşuldan bağımsız çalışan iki RFC seçeneği işaretlendiğinde yapılandırmaya kural satırı yazılmadığından sayaç da çalışmaz.
INFO
Set Variable on Hit
Aksiyon her çalıştığında değeri atanacak bir değişken adı girilebilir (isteğe bağlı; varsayılan boş). Ad; harf, rakam ve alt çizgiden oluşabilir (en fazla 32 karakter). Aksiyon tetiklendiğinde değişken 1 değerine atanır ve aynı vService'teki diğer koşul ve aksiyonlarda %TR7VAR(ad) akıllı değişkeniyle okunarak zincirleme davranışlar kurulabilir.
INFO
Normalization
Uygulanacak normalizasyon seçenekleri belirlenir. Birden fazla seçenek aynı anda seçilebilir; en az bir seçenek işaretlenmesi zorunludur.
Seçim sırası sonucu etkiler
Normalizasyon adımları, Normalization alanındaki etiketlerin görüntülendiği sıraya göre uygulanır. Yeni işaretlenen seçenek listenin sonuna eklenir; etiketler sürükle-bırak yöntemiyle yeniden sıralanabilir. Örneğin Decode percent-encoded characters seçeneğinin Re-evaluate path in accordance with two dot (..) seçeneğinden önce mi sonra mı çalışacağı bu sırayla belirlenir.
Kaydedilmiş sıra Edit ekranında aynı şekilde görüntülenir ve değiştirilebilir. Accept HTTP/1.0 GET/HEAD/DELETE request with payload (Condition independent) ve Accept headers not compatible with RFC7230 HTTP/0.9,HTTP/1.0 (Condition independent) seçenekleri bu sıralamadan etkilenmez; koşuldan bağımsız genel ayar olarak uygulanır.
Yüzde çözme yalnızca güvenli karakterleri kapsar
Decode percent-encoded characters seçeneği yalnızca harf, rakam ve -, ., _, ~ karakterlerinin yüzde kodlamasını çözer. %2F (eğik çizgi), %3F (soru işareti) gibi ayraç karakterleri çözülmez; %2E (nokta) ise çözülür. %25 çözülmediğinden çok katmanlı kodlama (%252F) hiç açılmaz.
Bozuk yüzde kodlaması içeren istekler reddedilmez; ilgili bölüm olduğu gibi bırakılır.
Seçenekler:
| Seçenek | Açıklama | Örnek |
|---|---|---|
| Decode percent-encoded characters | Harf, rakam ve -, ., _, ~ karakterlerinin yüzde kodlamasını çözer | %61dmin → admin |
| Make percent-encoded characters uppercase | Yüzde kodlamasını büyük harfe çevirir | %2f → %2F |
| URL Encode # character | Fragment karakterini encode eder | # → %23 |
| Strip # character | Fragment karakterini kaldırır | /page#section → /page |
| Merge slash characters | Çift slash'ları birleştirir | /path//to → /path/to |
| Re-evaluate path in accordance with one dot (.) | Tek nokta dizin referanslarını kaldırır | /path/./to → /path/to |
| Re-evaluate path in accordance with two dot (..) | Üst dizin referanslarını uygular; yolun başındaki /../ segmenti kaldırılmaz | /path/../to → /to |
| Sort query parameters by name | Query parametrelerini alfabetik sıralar | ?b=2&a=1 → ?a=1&b=2 |
| Accept HTTP/1.0 GET/HEAD/DELETE request with payload (Condition independent) | Body içeren GET/HEAD/DELETE isteklerini kabul eder | - |
| Accept headers not compatible with RFC7230 HTTP/0.9,HTTP/1.0 (Condition independent) | RFC7230 uyumsuz başlıkları kabul eder | - |
En Yaygın Kombinasyonlar
Adres sadeleştirme:
- Merge slash characters
- Re-evaluate path in accordance with one dot (.)
- Re-evaluate path in accordance with two dot (..)
- Decode percent-encoded characters
Önbellek tutarlılığı:
- Sort query parameters by name
- Make percent-encoded characters uppercase
INFO
Conditions
Bu alanda, ilgili aksiyonun hangi koşul veya koşullar sağlandığında devreye gireceği tanımlanır.
Bir veya birden fazla koşul eklenerek, and/or yapısı ile davranışın hedefli ve kontrollü şekilde uygulanması sağlanabilir.
Koşullar hakkında detaylı bilgi Conditions sayfasında yer alır.
WARNING
Bu alanda herhangi bir koşul tanımlanmazsa, ilgili aksiyon koşulsuz (Always) olarak çalışır. Bu durumda aksiyon, ilgili vService'e gelen tüm trafiğe uygulanır.
Canlı ortamlarda, koşul tanımlanmadan aksiyon kullanılması beklenmeyen durumlara (servis kesintilerine) yol açabilir. Bu nedenle aksiyon oluşturulurken mutlaka en az bir koşul tanımlanması önerilir.
INFO
Form Butonları
Add
Add butonuna tıklanarak aksiyon ekleme işlemi tamamlanır.
Add & Repeat
Add & Repeat butonu ile aksiyon ekleme işlemi tamamlanır ve farklı konfigürasyonlarla ilgili pencereden çıkılmadan yeni bir aksiyon daha eklenebilir.
Aksiyon Eklendi
RFC Uyumluluk Seçenekleri (Geriye Dönük Uyumluluk)
İki seçenek, eski veya standart dışı istemcilerle uyumluluk için tasarlanmıştır.
Accept HTTP/1.0 GET/HEAD/DELETE Request With Payload
- HTTP/1.0 spesifikasyonu GET, HEAD ve DELETE metodlarında body'ye izin vermez.
- Bazı eski istemciler bu kurala uymaz.
- Bu seçenek, bu tür isteklerin kabul edilmesini sağlar.
Accept Headers not Compatible with RFC7230 HTTP/0.9, HTTP/1.0
- RFC7230 HTTP başlık formatını tanımlar.
- Bazı eski sistemler bu standarda uymayan başlıklar gönderir.
- Bu seçenek, bu tür başlıkların kabul edilmesini sağlar.
WARNING
Bu seçenekler koşuldan bağımsız çalışır ve tüm vService trafiğini etkiler; yalnızca gerekli durumlarda kullanılır.
Normalizasyon güvenlik denetimlerinden SONRA çalışır
Bu aksiyonun ürettiği düzeltme, istek işleme akışının sonlarında uygulanır. Bunun iki önemli sonucu vardır:
- WAF, isteği normalize edilmemiş (ham) hâliyle denetler. Bu aksiyon WAF kurallarının atlatılmasını engellemez; kodlama veya dizin geçişi ile yapılan atlatma denemelerine karşı bir güvenlik katmanı olarak kullanılamaz.
- Koşullar da ham adresi okur. Bu aksiyondan sonra sıralanmış olsa bile Path ve Path + Query koşulları isteğin özgün hâlini değerlendirir;
/api//adminile/api/adminkoşullar açısından farklı kalır.
Aksiyonun asıl faydası, Kurum Servisine tutarlı bir adres iletilmesi ve önbellek anahtarlarının sadeleşmesidir. Erişim denetimi ve saldırı tespiti WAF ile koşullar üzerinden, adresin özgün hâline göre kurgulanmalıdır.
Operasyonel ve Güvenli Kullanım Önerileri
- Güvenlik için temel normalizasyonlar etkinleştirilir. Path traversal ve slash manipulation saldırılarına karşı koruma için şu seçenekler birlikte kullanılır: Merge slashes, Re-evaluate path (.), Re-evaluate path (..).
- Önbellek Tutarlılığı için Query Sıralama.
?a=1&b=2ve?b=2&a=1farklı önbellek girişleri oluşturabilir. Sort query parameters by name seçeneği bu sorunu çözer. - Uyumluluk seçenekleri dikkatli kullanılır. RFC uyumluluk seçenekleri güvenlik kontrollerini gevşetir; yalnızca eski sistemlerle entegrasyon gerektiğinde açılır.
- Güvenlik Denetimini Normalizasyona Dayandırmayın. WAF ve koşullar isteğin ham hâlini değerlendirir; bu aksiyon güvenlik kurallarından önce çalışmaz. Kodlama varyantlarına karşı koruma, WAF kuralları ve koşullarla ayrıca kurulmalıdır.
- Kurum Servisi davranışı test edilir. Normalizasyon sonrasında URL'lerin Kurum Servisi uygulaması tarafından doğru işlendiği doğrulanır.
Canlı Ortamlarda Yaygın Kullanım Senaryoları
Aşağıdaki örnekler, ilgili aksiyonun 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: Dizin Referanslarını Sadeleştirme
Problem: Saldırganlar path traversal teknikleri (../, ./, //) kullanarak directory yapısında gezinmeye ve yetkisiz dosyalara (/etc/passwd, web.config) erişmeye çalışıyorlar. WAF kuralları var ama saldırganlar URL encoding (%2e%2e%2f) ve slash manipulation (/admin//..//config) ile WAF'ı bypass ediyorlar.
Çözüm: URL normalizasyonuyla dizin referansları ve çift slash'lar sadeleştirilir ve Kurum Servisine sadeleştirilmiş adres iletilir.
Konfigürasyon:
- Normalization:
- Re-evaluate path in accordance with one dot (.)
- Re-evaluate path in accordance with two dot (..)
- Merge slash characters
- Conditions:
- Koşulsuz (tüm trafiğe uygulanır)
Sonuç:
- ✅ Dizin referansları → Ara
/../ve/./segmentleri sadeleştirilir; yolun başındaki/../segmenti kaldırılmaz. - ✅ Kurum Servisine tutarlı adres →
/images/../../../etc/passwdsadeleştirilerek iletilir; uygulama tarafındaki yol çözümlemesi tekilleşir. - ⚠️ Güvenlik → Bu sadeleştirme WAF denetiminden sonra yapılır; erişim engelleme WAF kurallarıyla sağlanmalıdır.
- ✅ Slash manipulation önleme →
/admin//./config→/admin/config(tutarlı kontrol).
URL Dönüşüm Örnekleri:
| Orijinal URL | Normalize Edilmiş | Sonuç |
|---|---|---|
/images/../../../etc/passwd | /../../etc/passwd | Kurum Servisine sadeleştirilmiş adres gider; baştaki /../ segmentleri kalır |
/admin//./config | /admin/config | Access control doğru çalışır |
/app/./data/../secrets | /app/secrets | Yetkilendirme kuralı apply olur |
Senaryo 2: Yüzde Kodlamasını Tutarlı Hâle Getirme
Problem: WAF kuralları /admin path'ini blokluyor ama saldırganlar URL encoding (%2Fadmin, %2f%61dmin) kullanarak WAF'ı bypass ediyorlar. Kurum Servisi encoded URL'leri decode edip işlediği için saldırgan protected endpoint'lere erişebiliyor.
Çözüm: Percent-encoded karakterler çözümlenir ve büyük harf standardizasyonu uygulanarak Kurum Servisine iletilen adresteki kodlama biçimi tutarlı hâle getirilir. Engelleme ise WAF kuralları ve koşullarla, adresin kodlanmış varyantları da hesaba katılarak kurulur.
Konfigürasyon:
- Normalization:
- Decode percent-encoded characters
- Make percent-encoded characters uppercase
- Conditions:
- Koşulsuz (tüm trafiğe uygulanır)
Sonuç:
- ⚠️ Kapsam → Ayraç karakterlerinin kodlaması (
%2F) bu seçenekle çözülmez; yalnızca harf, rakam ve-,.,_,~karakterleri çözülür. - ✅ Case normalization →
%2fve%2Faynı şekilde işlenir. - ⚠️ Çok katmanlı kodlama →
%252Fbu seçenekle çözülmez.
Kodlama Örnekleri:
| Deneme | Kurum Servisine İletilen |
|---|---|
/%2Fadmin | /%2Fadmin (değişmez) |
/%2f%61dmin | /%2Fadmin |
/%2e%2e/config | /../config |
/admin%2f%2e%2e%2fconfig | /admin%2F..%2Fconfig |
Senaryo 3: CDN Cache Hit Rate Optimizasyonu
Problem: Aynı statik içerik farklı URL formatlarıyla request ediliyor (/page?a=1&b=2 vs /page?b=2&a=1, /static//images//logo.png vs /static/images/logo.png). CDN her URL'i farklı cache key olarak görüyor ve cache hit rate %40'ta kalıyor. Bandwidth maliyeti yüksek ve origin server yükü fazla.
Çözüm: Query parametreleri alfabetik sıralanır, slash'lar birleştirilir, fragment'ler kaldırılır ve cache key tutarlılığı sağlanır.
Konfigürasyon:
- Normalization:
- Sort query parameters by name
- Make percent-encoded characters uppercase
- Merge slash characters
- Strip # character
- Conditions:
Sonuç:
- ✅ Cache hit rate artışı → %40'tan %85'e yükselir.
- ✅ Bandwidth tasarrufu → Aynı içerik tek cache entry'den sunulur.
- ✅ Origin server yükü azalır → Cache miss'ler %60 azalır.
- ✅ CDN cost reduction → Bandwidth kullanımı %50 düşer.
Cache Key Standardizasyonu:
| Orijinal Request | Normalized Cache Key | Sonuç |
|---|---|---|
/page?b=2&a=1 | /page?a=1&b=2 | Cache hit |
/page?a=1&b=2 | /page?a=1&b=2 | Cache hit (aynı key) |
/static//images//logo.png | /static/images/logo.png | Cache hit |
/page#section | /page | Cache hit (fragment strip) |
Senaryo 4: API Güvenlik - Slash Manipulation Önleme
Problem: REST API endpoint'leri path-based yetkilendirme kullanıyor (/api/v1/users public, /api/v1/admin protected). Saldırganlar slash manipulation (/api//v1//admin, /api/v1/./admin) ile yetkilendirme kurallarını bypass etmeye çalışıyorlar. Bazı framework'ler normalize edilmemiş path'leri farklı route olarak algılıyor.
Çözüm: API path'lerinde slash normalization ve dot resolution uygulanarak tutarlı routing ve erişim denetimi sağlanır.
Konfigürasyon:
- Normalization:
- Merge slash characters
- Re-evaluate path in accordance with one dot (.)
- Re-evaluate path in accordance with two dot (..)
- Conditions:
- Path
/api/ile başlar
- Path
Sonuç:
- ✅ Access control bypass önleme → Tüm path format'ları normalize edilir, tutarlı kontrol.
- ✅ Routing tutarlılığı → Framework path matching doğru çalışır.
- ✅ Authorization enforcement →
/api//adminve/api/adminaynı rule'a match eder. - ✅ API security hardening → Path manipulation attack vektörü kapatılır.
API Path Normalization:
| Attack Attempt | Normalized Path | Access Control |
|---|---|---|
/api//v1//admin | /api/v1/admin | 403 Forbidden (korumalı) |
/api/v1/./admin | /api/v1/admin | 403 Forbidden |
/api/v1/users/../admin | /api/v1/admin | 403 Forbidden |
/api/v1/users | /api/v1/users | 200 OK (public) |
Senaryo 5: Legacy ERP Sistem Uyumluluğu
Problem: Eski ERP sistemi (SAP R/3 v4.6) HTTP/1.0 GET request'lerinde body gönderiyor ve RFC7230'a uygun olmayan custom header'lar kullanıyor. TR7 bu istekleri RFC violation nedeniyle 400 Bad Request ile reddediyor. ERP sistemi güncellenemiyor ve entegrasyon çalışmıyor.
Çözüm: Bu vService üzerinde RFC uyumluluk denetimleri gevşetilerek standart dışı istekler kabul edilir.
Konfigürasyon:
- Normalization:
- Accept HTTP/1.0 GET/HEAD/DELETE request with payload (Condition independent)
- Accept headers not compatible with RFC7230 HTTP/0.9,HTTP/1.0 (Condition independent)
- Conditions: Koşul tanımlanmaz (bu iki seçenek koşuldan bağımsız çalışır)
Sonuç:
- ✅ Legacy sistem uyumluluğu → ERP istekleri kabul edilir, entegrasyon çalışır.
- ✅ Uygulama değişikliği gerekmez → ERP sistemi olduğu gibi kalır.
- ⚠️ Kapsam → Gevşetme koşulla sınırlandırılamaz; kaynak IP koşulu eklense bile bu iki seçenek tüm trafiğe uygulanır. Ayrıca yanıt ayrıştırması da gevşetilir.
- ⚠️ Öneri → Bu nedenle gevşetme, yalnızca eski sistemin trafiğini taşıyan ayrı bir vService üzerinde etkinleştirilmelidir.
Legacy Request Handling:
Legacy ERP Request:
GET /sap/bc/gui/data HTTP/1.0
X-Custom-SAP-Header: value-with-invalid-chars
Content-Length: 256
[Request Body with data]
TR7 (Normal): 400 Bad Request (RFC violation)
TR7 (Normalized): 200 OK (request accepted and forwarded)Güvenlik Uyarısı
RFC relaxation güvenlik kontrollerini gevşetir. Bu konfigürasyonu:
- Yalnızca güvenilen kaynak IP'lerinden kullanılır.
- Legacy sistem subnet'i ile sınırlandırın.
- Ağ segmentasyonu uygulanır.
- IDS/IPS izlemesi eklenir.
