Skip to content
Smarter by Design.Simpler for Business

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.

Normalizasyon öncesi (farklı yazımlar)
/path//to//page
/path/./to/../to/page
/path/to/%70age
↓ normalize
Normalizasyon sonrası (tek tutarlı form)
/path/to/page

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:

URLNormalleş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 ​

HTTP
L7 TCP
Network

Çalışma Anı ​

İstek Anı (On Request)
Cevap Anı (On Response)

Nasıl Eklenir? ​

Yeni bir URL Normalization Aksiyonu, TR7 web yönetim arayüzü üzerinden aşağıdaki adımlar izlenerek eklenebilir:

  1. Sol altta bulunan TR7 logosuna tıklanarak Configuration Menu açılır.
  2. Load Balancer → Actions → Add adımları takip edilir.
  3. Aksiyon için benzersiz ve açıklayıcı bir isim girilir.
  4. Action Type olarak URL Normalization seçilir.
  5. Aksiyona ait ilgili konfigürasyonlar yapılandırılır.
  6. Conditions sekmesinden aksiyonun hangi koşul/koşullarda devreye gireceği belirlenir.
  7. Add butonuna tıklanarak aksiyon eklenir.

URL Normalization Aksiyonu Ekleme Formu ​

URL Normalization Aksiyonu Ekleme FormuURL Normalization Aksiyonu Ekleme Formu

INFO

Action Name ​

Oluşturulacak olan aksiyona benzersiz ve açıklayıcı bir isim girilir.

INFO

Action Type ​

Aksiyon tipi olarak URL Normalization seçilir.

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çenekAçıklamaÖrnek
Decode percent-encoded charactersHarf, rakam ve -, ., _, ~ karakterlerinin yüzde kodlamasını çözer%61dmin → admin
Make percent-encoded characters uppercaseYüzde kodlamasını büyük harfe çevirir%2f → %2F
URL Encode # characterFragment karakterini encode eder# → %23
Strip # characterFragment 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 nameQuery 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 EklendiAksiyon 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//admin ile /api/admin koş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=2 ve ?b=2&a=1 farklı ö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/passwd sadeleş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 URLNormalize EdilmişSonuç
/images/../../../etc/passwd/../../etc/passwdKurum Servisine sadeleştirilmiş adres gider; baştaki /../ segmentleri kalır
/admin//./config/admin/configAccess control doğru çalışır
/app/./data/../secrets/app/secretsYetkilendirme 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 → %2f ve %2F aynı şekilde işlenir.
  • ⚠️ Çok katmanlı kodlama → %252F bu seçenekle çözülmez.

Kodlama Örnekleri:

DenemeKurum 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:
    • Path /static/ ile başlar
    • OR Path /cdn/ ile başlar

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 RequestNormalized Cache KeySonuç
/page?b=2&a=1/page?a=1&b=2Cache hit
/page?a=1&b=2/page?a=1&b=2Cache hit (aynı key)
/static//images//logo.png/static/images/logo.pngCache hit
/page#section/pageCache 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

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//admin ve /api/admin aynı rule'a match eder.
  • ✅ API security hardening → Path manipulation attack vektörü kapatılır.

API Path Normalization:

Attack AttemptNormalized PathAccess Control
/api//v1//admin/api/v1/admin403 Forbidden (korumalı)
/api/v1/./admin/api/v1/admin403 Forbidden
/api/v1/users/../admin/api/v1/admin403 Forbidden
/api/v1/users/api/v1/users200 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.