Bileşenleri ayırın
URL şema, host, path, sorgu ve parça gibi bölümlerden oluşur. Sorgu değerindeki boşluğu kodlamak path içindeki ayıracı kodlamaktan farklıdır.
JavaScript encodeURIComponent tek bileşeni; encodeURI URL yapısındaki bazı ayırıcıları korur. Tüm adresi bileşen gibi kodlamayın.
Boşluk, artı ve yüzde
Form kodlamada boşluk +, genel URL örneklerinde %20 olabilir. Hedef bağlamı doğrulayın.
Mevcut % işaretini tekrar kodlamak %25 üretir. Zaten kodlanmış değeri yeniden encode etmek double-encoding hatası yaratabilir.
Kodlama doğrulama değildir
Percent-encoding veri gösterimidir; şifreleme veya erişim kontrolü sağlamaz. Sorguda token ya da kişisel bilgi bulunabilir ve loglara yazılabilir.
Parser bileşenleri görünür kılar; yönlendirme veya sunucu isteğinde izin verilen hedefleri ayrıca doğrulayın.
Hata ayıklama
Şemayı, hostu, path’i ve query değerlerini ayrı inceleyin. İmzalı URL’de parametre sırası sonucu etkileyebilir.
Tek parametreyi encode ettikten sonra tüm adresi yeniden kodlamayın.
URL parçalarının farklı kuralları
Bir URL şema, yetki alanı, yol, sorgu ve parça gibi bölümlere ayrılır. Her bölümde bazı ayırıcı karakterlerin yapısal anlamı bulunur. Bir metin parçasındaki eğik çizgi yol segmentlerini ayırabilir; sorgudaki eşittir anahtar ile değeri ayırır. Bu yüzden tüm adresi tek bileşenmiş gibi kodlamak adresin yapısını bozabilir. JavaScript `encodeURIComponent` tek değer veya bileşen için; `encodeURI` ise URL yapısındaki bazı ayırıcıları koruyarak daha bütün adres için tasarlanmıştır. Hangi fonksiyonun uygun olduğu değerinizin nereye yerleşeceğine bağlıdır. Önce URL’yi bileşenlerine ayırın, sonra yalnız eklediğiniz veriyi bağlama uygun biçimde kodlayın.
Yüzde işareti, UTF-8 ve tekrar kodlama
Percent-encoding, bir baytı yüzde işaretinden sonra iki onaltılık basamakla gösterir. Türkçe karakterler gibi ASCII dışı metinler çoğunlukla önce UTF-8 baytlarına çevrilir, ardından her bayt kodlanır. Bir değer zaten `%20` biçiminde kodlanmışken tekrar kodlanırsa yüzde işareti `%25` olarak temsil edilip `%2520` ortaya çıkabilir; bu double encoding sorunudur. Tersine, her görülen `%` dizisini körlemesine decode etmek geçersiz veya beklenmeyen girdiye yol açabilir. Veri akışında hangi katmanın kodlama yaptığını belirleyin, test girdisini kaydedin ve decode işlemini yalnız doğru aşamada uygulayın. Çok kez encode/decode çağırmak sorunu gizlemek yerine kök nedeni bulmayı zorlaştırır.
Sorgu parametreleri ve form kodlaması
HTML form verilerinde kullanılan `application/x-www-form-urlencoded` biçiminde boşluklar artı işaretiyle temsil edilebilir; genel URL bileşeninde boşluğu `%20` olarak görebilirsiniz. Artı işaretini gerçek artı olarak taşımak gerekiyorsa bağlamdaki kodlayıcı ve çözücünün davranışını kontrol edin. Parametreleri el ile birleştirmek yerine URL ve URLSearchParams gibi yapılandırılmış API’ler kullanmak ayırıcıların yanlış kaçışını azaltır. İmzalı URL veya belirli API protokolünde parametre sırası ve normalizasyon kuralları imza doğrulamasını etkileyebilir. Bir URL parser bileşenleri gösterir, fakat yönlendirme hedefinin izinli olduğunu veya sunucu tarafında güvenli işlendiğini kanıtlamaz. Hedef allowlist ve doğrulama uygulamanızda ayrıca bulunmalıdır.
Gizlilik ve hata ayıklama
URL sorguları tarayıcı geçmişine, sunucu ve proxy loglarına, analiz kayıtlarına veya referrer başlıklarına girebilir. Kodlama gizleme veya şifreleme değildir; token, parola ya da kişisel bilgiyi URL içine koymak ek risk taşır. Sorgu değeri gerekiyorsa kısa ömürlü ve yetki kapsamı sınırlı tasarım kullanın, erişimi sunucu tarafında kontrol edin ve log politikasını değerlendirin. Hata ayıklarken şema, alan adı, yol ve her sorgu değerini ayrı inceleyin. Bir adresi paylaşmadan önce gizli parametreleri çıkarın. URL Encoder karakter gösterimini dönüştürür; kimlik doğrulama, güvenli yönlendirme veya giriş denetimi sağlamaz. Bu sorumluluklar uygulama ve sunucu katmanında karşılanmalıdır.
Örnek iş akışı: sorgu parametresi eklemek
Bir uygulama arama metnini `q` parametresinde taşıyacaksa tüm adresi kodlamak yerine yalnızca parametre değerini URL API’siyle eklesin. Değerde Türkçe karakter, boşluk veya ampersand varsa yapılandırılmış API bu karakterlerin sorgu ayırıcılarıyla karışmasını önler. Sunucu aynı parametreyi tek katmanda çözer ve beklenen karakter kodlamasını kullanır. Kullanıcı girdisini URL’de taşımak gerektiğinde parola veya erişim tokenı gibi sırları sorguya koymayın; URL geçmiş, log veya referrer içinde kalabilir. Bir kez kodlanmış değeri tekrar kodlamanın `%25` üretebileceğini test edin. İmzalı bağlantı kullanılıyorsa imza algoritmasının parametre sırası ve normalizasyon gereksinimini izleyin. URL parser hata ayıklamaya yardım eder ama yönlendirme güvenliğini tek başına sağlamaz. Redirect endpoint’lerinde kullanıcının gönderdiği tam adresi otomatik açmayın; izin verilen hedef alan adlarını ayrıca denetleyin. Güvenli kodlama yanlış hedefi güvenli yapmaz, bu yüzden yönlendirme, autentikasyon ve parametre doğrulama ayrı testlerden geçmelidir.
Uygulanabilir kısa kontrol listesi
- Değerin path, sorgu parametresi veya tam URL olduğunu belirleyin.
- Yalnız uygun bileşeni kodlayın ve çift kodlama yapmayın.
- Son URL’yi test edin; hassas parametreleri paylaşmadan önce çıkarın.
Sık sorulan sorular
Boşluk + mı %20 mi?
Bağlama göre değişir; form-urlencoded ve genel URL bağlamları farklı olabilir.
Tüm URL’yi encodeURIComponent ile kodlayabilir miyim?
Genellikle hayır; ayırıcılar kodlanır ve URL yapısı bozulabilir.
URL encoding veriyi gizler mi?
Hayır. Geri çevrilebilir gösterim biçimidir.