URLs and Hashing

Bu bölümde, istemcilerin URL'leri nasıl kontrol ettiğine dair ayrıntılı özellikler yer almaktadır.

URL'lerin standartlaştırılması

Herhangi bir URL kontrol edilmeden önce istemcinin bu URL üzerinde bazı standartlaştırma işlemleri yapması beklenir.

Başlangıç olarak, istemcinin URL'yi ayrıştırdığını ve RFC 2396'ya göre geçerli hale getirdiğini varsayıyoruz. URL'de uluslararası hâle getirilmiş alan adı (IDN) kullanılıyorsa istemci, URL'yi ASCII Punycode gösterimine dönüştürmelidir. URL bir yol bileşeni içermelidir. Yani alan adından sonra en az bir eğik çizgi bulunmalıdır (http://google.com yerine http://google.com/).

Öncelikle URL'den sekme (0x09), satır başı (0x0d) ve satır sonu (0x0a) karakterlerini kaldırın. Bu karakterlerin kod dışına alma dizelerini kaldırmayın (ör. %0a).

İkinci olarak, URL bir parçayla bitiyorsa parçayı kaldırın. Örneğin, http://google.com/#fraghttp://google.com/ olarak kısaltın.

Üçüncü olarak, URL'de artık yüzde kaçış karakteri kalmayana kadar URL'den yüzde kaçış karakterlerini tekrar tekrar kaldırın. (Bu işlem, URL'yi geçersiz kılabilir.)

Barındırıcı adını standartlaştırmak için:

URL'den ana makine adını ayıklayın ve ardından:

  1. Baştaki ve sondaki tüm noktaları kaldırın.
  2. Art arda gelen noktaları tek bir noktayla değiştirin.
  3. Ana makine adı IPv4 adresi olarak ayrıştırılabiliyorsa 4 noktayla ayrılmış ondalık değerlere normalize edin. İstemci, sekizli, onaltılık ve dörtten az bileşen içeren tüm yasal IP adresi kodlamalarını işlemelidir.
  4. Ana makine adı, köşeli parantez içinde IPv6 adresi olarak ayrıştırılabiliyorsa bileşenlerdeki gereksiz ön sıfırları kaldırarak ve çift iki nokta işareti söz dizimini kullanarak sıfır bileşenleri daraltarak normalleştirin. Örneğin, [2001:0db8:0000::1], [2001:db8::1] olarak dönüştürülmelidir. Ana makine adı aşağıdaki iki özel IPv6 adres türünden biriyse bunları IPv4'e dönüştürün:
    • [::ffff:1.2.3.4] gibi IPv4 ile eşlenmiş bir IPv6 adresi (1.2.3.4 olarak dönüştürülmelidir);
    • [64:ff9b::1.2.3.4] gibi tanınmış 64:ff9b::/96 ön ekini kullanan bir NAT64 adresi. Bu adres, 1.2.3.4 olarak dönüştürülmelidir.
  5. Dizinin tamamını küçük harfle yazın.

Yolu standartlaştırmak için:

  1. /./'u / ile değiştirip /../'ü önceki yol bileşeniyle birlikte kaldırarak yoldaki /../ ve /./ dizilerini çözün.
  2. Art arda gelen eğik çizgileri tek bir eğik çizgi karakteriyle değiştirin.

Bu yol standartlaştırmalarını sorgu parametrelerine uygulamayın.

URL'de, ASCII 32'den küçük, 127'den büyük, # veya % olan tüm karakterler için yüzdelik kaçış karakteri kullanın. Kaçış karakterleri büyük harfli onaltılık karakterler kullanmalıdır.

Ana Makine-Son Eki Yol Ön Eki İfadeleri

URL normalleştirildikten sonra sonraki adım, son ek/ön ek ifadelerini oluşturmaktır. Her son ek/ön ek ifadesi, bir ana makine son ekinden (veya tam ana makine adından) ve bir yol ön ekinden (veya tam yoldan) oluşur.

İstemci, 30'a kadar farklı olası ana makine son eki ve yol ön ek kombinasyonu oluşturur. Bu kombinasyonlarda yalnızca URL'nin ana makine ve yol bileşenleri kullanılır. Şema, kullanıcı adı, şifre ve bağlantı noktası atılır. URL sorgu parametreleri içeriyorsa en az bir kombinasyon tam yolu ve sorgu parametrelerini içerir.

Ana makine için istemci en fazla beş farklı dize dener. Bunları şöyle sıralayabiliriz:

  • Ana makine adı bir IPv4 veya IPv6 tam adı değilse eTLD+1 alan adından başlayıp art arda ön bileşenler ekleyerek oluşturulan en fazla dört ana makine adı. eTLD+1'in belirlenmesi Genel Ek Listesi'ne dayalı olmalıdır. Örneğin, a.b.example.com, example.com'un eTLD+1 alanının yanı sıra b.example.com adlı ek bir barındırıcı bileşenine sahip barındırıcıyı oluşturur.
  • URL'deki tam ana makine adı. Önceki örnekte a.b.example.com kontrol edilir.

Yol için istemci en fazla altı farklı dize dener. Bunları şöyle sıralayabiliriz:

  • Sorgu parametreleri dahil, URL'nin tam yolu.
  • Sorgu parametreleri olmadan URL'nin tam yolu.
  • Kökten (/) başlayıp art arda yol bileşenleri (son eğik çizgi dahil) eklenerek oluşturulan dört yol.

Aşağıdaki örneklerde kontrol davranışı gösterilmektedir:

http://a.b.com/1/2.html?param=1 URL'si için istemci şu olası dizeleri dener:

a.b.com/1/2.html?param=1
a.b.com/1/2.html
a.b.com/
a.b.com/1/
b.com/1/2.html?param=1
b.com/1/2.html
b.com/
b.com/1/

http://a.b.c.d.e.f.com/1.html URL'si için istemci şu olası dizeleri dener:

a.b.c.d.e.f.com/1.html
a.b.c.d.e.f.com/
c.d.e.f.com/1.html
c.d.e.f.com/
d.e.f.com/1.html
d.e.f.com/
e.f.com/1.html
e.f.com/
f.com/1.html
f.com/

(Not: Yalnızca son beş ana makine adı bileşenini ve tam ana makine adını alacağımız için b.c.d.e.f.com öğesini atlayın.)

http://1.2.3.4/1/ URL'si için istemci şu olası dizeleri dener:

1.2.3.4/1/
1.2.3.4/

http://example.co.uk/1 URL'si için istemci şu olası dizeleri dener:

example.co.uk/1
example.co.uk/

Karma oluşturma

Google Güvenli Tarama, karma oluşturma işlevi olarak yalnızca SHA256'yı kullanır. Bu karma oluşturma işlevi, yukarıdaki ifadelere uygulanmalıdır.

32 baytlık tam karma, koşullara bağlı olarak 4 bayt, 8 bayt veya 16 bayta kısaltılır:

  • hashes.search yöntemi kullanılırken şu anda istekteki karma oluşturma işlemlerinin tam olarak 4 bayt olacak şekilde kısaltılması gerekir. Bu istekte ek bayt göndermek kullanıcı gizliliğini ihlal eder.

  • hashList.get yöntemi veya hashLists.batchGet yöntemi kullanılarak yerel veritabanı listeleri indirilirken sunucu tarafından gönderilen karma oluşturma işlemlerinin uzunluğu, karma oluşturma işlemi uzunluğunu belirten son ek içeren listelerin adlandırma kuralına kodlanır. Daha fazla bilgi için Kullanılabilir Listeler bölümüne bakın.