Parmak izi

Dijital parmak izi, bir kullanıcıyı web sitenize geri geldiğinde tanımlamaya çalışmak veya farklı web sitelerinde aynı kullanıcıyı tanımlamak anlamına gelir. Sizin kurulumunuzla bir başkasınınki arasındaki birçok özellik farklılık gösterebilir. Örneğin, farklı türde bir cihaz ve farklı bir tarayıcı kullanıyor, farklı bir ekran boyutuna sahip ve farklı yazı tipleri yüklü olabilir. "Dejavu Sans" yazı tipi yüklüyse ve siz bunu yüklemediyseniz, herhangi bir web sitesi o yazı tipini kontrol ederek sizinle benim aramızdaki farkı anlayabilir. Parmak izi bu şekilde çalışır. Bu veri noktalarının bir koleksiyonunu oluşturursunuz ve bunların her biri, kullanıcıları birbirinden ayırt etmek için daha fazla yol sağlar.

Daha resmi bir tanım şu şekilde olabilir: Parmak izi, kullanıcıyı mümkün olduğunca fazla kullanıcıdan ayırt etmek için kullanıcı kurulumundaki açık ve net olmayan, uzun ömürlü özellikleri kullanma eylemidir.

Dijital parmak izi neden kullanıcı gizliliğini engeller?

Kullanıcının dijital parmak izini çıkarmanın önemli olduğu bazı uç durumlar vardır: sahtekarlık algılama. Ancak dijital parmak izi, siteler arasında kullanıcıları izlemek için de kullanılabilir. Bu izleme, genellikle kullanıcıların onayı olmadan veya bazı durumlarda, kullanıcıyı yeterli düzeyde bilgilendirmeyen geçersiz izin temel alınarak yapılır. Bu yapıldığında, bu kullanıcılar çoğu zaman rahatsız edici olarak kendilerini ihanet etmiş hissederler.

Dijital parmak izi, bir kullanıcıyı diğerinden gizlice ayırt etmenin yollarını bulmak anlamına gelir. Dijital parmak izi, kullanıcının aynı web sitesinde hâlâ aynı kullanıcı olduğunu veya iki farklı tarayıcı profilinde aynı anda tanınması için kullanılabilir. Bu, dijital parmak izi tekniğinin, kullanıcıları sitelerde izlemek için kullanılabileceği anlamına gelir. Kullanıcıya özgü benzersiz kimliğe sahip çerezin depolanması gibi belirleyici ve açık izleme yöntemleri, bir ölçüde kullanıcılar tarafından gözlemlenebilir ve kontrol edilebilir (önceki modülde bu yaklaşımların bazıları açıklanabilir). Ancak dijital parmak izi, gizli olduğundan kaçınılması daha zordur. Parmak izi, değişmeyen özelliklere dayanır ve büyük olasılıkla görünmez bir şekilde gerçekleşir. Bu yüzden buna "parmak izi" deniyor. Dijital parmak izinizi veya parmaklarınızın ucundaki parmak izinizi değiştirmek en zor olacaktır.

Tarayıcı tedarikçileri, kullanıcıların izlenmeyi sevmediklerini bilinir ve dijital parmak izlerini sınırlayan özellikler (bazılarını önceki modülde görmüştük) sürekli olarak uygulamaya geçirmektedir. Bu bölümde, bu özelliklerin işletme gereksinimlerinizi nasıl etkileyebileceğini ve yapmak istediklerinizi gizliliği korumaya yönelik bir şekilde yapmaya nasıl devam edebileceğinizi ele alacağız. Burada konu, parmak izi alma yapmanızı nasıl durduracağından çok, parmak izine karşı tarayıcı korumasının yaptığınız işi ve yaptığınız işlemi nasıl etkileyeceği ile ilgilidir.

Pratikte, çoğu geliştirici ve işletme, kullanıcıların parmak izini almaya ihtiyaç duymaz. Uygulamanız kullanıcıların oturum açmasını gerektiriyorsa, kullanıcılarınız izin alarak ve istedikleri zaman tek taraflı olarak kapsam dışında kalmayı seçebilecek şekilde kendilerini size tanıtırlar. Bu, hangi kullanıcıların giriş yaptığını anlamaya yönelik, gizliliği koruyan bir yöntemdir. Uygulamanız kullanıcıların oturum açmasını gerektirmeyebilir. Bu da kullanıcılarınızın gizliliği için daha fazla koruma sağlar (ve yalnızca ihtiyacınız olan verileri toplarsınız).

Yapmanız gerekenler:

Üçüncü taraflarınızı dijital parmak izi alma konusunda değerlendirin. Üçüncü taraflar modülünde, dahil ettiğiniz üçüncü taraf hizmetlerinin ve bu hizmetlerin gönderdiği web isteklerinin bir listesi zaten elinizde olabilir. Bu istekleri inceleyerek hangi verilerin (varsa) yaratıcıya geri iletildiğini görebilirsiniz. Ancak bu genellikle zordur; parmak izi, doğası gereği kullanıcı onayına tabi olmayan verilerin istenmesini içeren gizli bir süreçtir.

Kullanımdaki dijital parmak izi alma belirtilerine bakmak için üçüncü taraf hizmetlerinizin ve bağımlılıklarının gizlilik politikalarını da okumanızı öneririz. Bazen "olası eşleştirme" olarak da adlandırılır veya "belirleyici eşleşme"den ziyade olası eşleştirme teknikleri grubunun bir parçası olarak adlandırılır.

Dijital parmak izi nasıl çalışır?

Çoğunlukla bu özelliklerin tümünün kişisel kombinasyonunuz size veya en azından benzer kişilerden oluşan küçük bir gruba özgüdür; bu, sizi gizlice takip etmek için kullanılabilir.

Ayrıca: pasif ve aktif dijital parmak izi

Burada, pasif ve aktif parmak izi teknikleri arasında yararlı bir fark vardır. Pasif dijital parmak izi tekniği, web sitesine varsayılan olarak verilen bilgileri kullanan bir tekniktir. Aktif parmak izi tekniği, ekstra bilgi için tarayıcıyı açık bir şekilde sorgular. Bu ayrımın önemli olmasının nedeni, tarayıcıların etkin teknikleri tespit edip müdahale etmeye veya bunları azaltmaya çalışabilmesidir. API'ler kısıtlanabilir veya kullanıcıdan izin isteyen bir iletişim kutusunun arkasına ağ geçitleri sağlanabilir (dolayısıyla kullanıcıyı bu API'lerin kullanıldığı konusunda uyarabilir veya varsayılan olarak reddetmesine izin verebilir). Pasif teknik, web sitesine daha önce verilmiş verileri kullanan bir tekniktir. Bunun nedeni, genellikle tarihsel olarak, bilgi kara yolunun yeni oluşma günlerinde bu bilgilerin tüm sitelere verilmiş olmasıdır. User-agent dizesi bunun bir örneğidir. Bunu daha ayrıntılı olarak inceleyeceğiz. Kullanıcının tarayıcısı, sürümü ve işletim sistemi hakkında pek çok bilgi vermesi açısından bir web sitesi buna dayalı olarak farklı şeyler sunmayı seçebilirdi. Ancak bu, kullanıma sunulan ayırt edici bilgi miktarını da artırır. Bu bilgi, bir kullanıcının diğer bir kullanıcıyı tanımasına yardımcı olur. Böylece bu tür bilgiler giderek daha fazla kullanılmaz veya en azından dondurularak artık ayırt edilmez hale gelir. Yapacağınız şey bu bilgilere dayanıyorsa (örneğin, kullanıcı aracısına bağlı olarak farklı kod dalları alıyorsanız), tarayıcılar giderek daha fazla donduğunda veya bu bilgiyi durdurduğundan bu kod kırılabilir. Burada en iyi savunma yöntemi test etmektir ( daha sonra bakın).

Bir yana: dijital parmak izi ölçümü

Bu veri noktalarının her birinin ne kadar bilgi sağladığını gösteren teknik ölçü entropi olarak adlandırılır ve bit cinsinden ölçülür. Çok sayıda farklı olası değerin (yüklenen yazı tipleri listesi gibi) bulunduğu bir özellik, toplama çok fazla bit katabilir. Dolayısıyla, çok fazla ayırt edici gücü olmayan bir şeyin (örneğin, hangi işletim sistemini kullandığınız) yalnızca birkaç tane eklemesi mümkündür. HTTP Almanağı, mevcut dijital parmak izi kitaplıklarının birçok farklı API'den gelen yanıtları bir "karma"da birleştirme sürecini, yalnızca küçük bir kullanıcı grubunu, hatta belki tek bir kullanıcı grubunu tanımlayarak nasıl otomatikleştirdiğini açıklar. Maud Nalpas, bu YouTube videosunda bunu ayrıntılı bir şekilde ele alıyor. Ancak kısaca, arkadaşlarınızın en sevdikleri müzikleri, en sevdikleri yemekleri ve konuştukları dilleri içeren bir listesini gördüğünüzü ancak adları kaldırılmış olarak gördüğünüzü düşünün. Herhangi bir kişinin listesi büyük olasılıkla arkadaşları arasında benzersiz bir şekilde tanımlanır veya en azından listeyi yalnızca birkaç kişi içerecek şekilde daraltır. Dijital parmak izi bu şekilde çalışır. Beğendiğiniz şeylerin listesi "karma" haline gelir. Bu karma sayesinde, bir kullanıcının bağlı olmayan iki farklı sitede aynı kişi olarak tanımlanması daha kolay hale gelir. İzlemenin amacı, kullanıcının gizlilik isteğini atlatmaktır.

Tarayıcılar dijital parmak izi alma işlemlerine karşı ne yapar?

Daha da önemlisi, tarayıcı tedarikçileri bir web sitesinin (veya bir web sitesine eklenen üçüncü bir tarafın) kullanıcı için ayırt edici parmak izini hesaplamasının veya söz konusu parmak izinin benzersizliğine katkıda bulunan farklı bilgi parçalarının birçok farklı yolunun farkındadır. Bu yöntemlerden bazıları açık ve bilinçlidir. Örneğin, genellikle tarayıcıyı, işletim sistemini ve kullanımdaki sürümü tanımlayan tarayıcı kullanıcı aracısı dizesi (ve böylece ben ve siz farklı tarayıcılar kullanıyorsanız sizi benden ayırt etmemize yardımcı olur). Bazı yollar özellikle parmak izi alınabilir olacak şekilde tasarlanmamış olsa da yazı tipleri listesi veya tarayıcıda kullanılabilen video ve ses cihazları gibi bazı yöntemler kullanılabilir. (Tarayıcının bu cihazları kullanması gerekmez, sadece adlarına göre bir liste alırlar.) Bazılarının ise yayınlandıktan çok sonra parmak izine katkıda bulunduğu kabul edilmiştir. Örneğin, bir tuval öğesinde yazı tiplerinin kenar yumuşatmasının tam olarak piksel olarak oluşturulması gibi. Daha pek çok özellik vardır ve tarayıcınızın benimkinden farklı olduğu tüm yöntemler entropi ekler ve dolayısıyla, potansiyel olarak sizinle aramızdaki farkı ayırt etme ve bir bireyi web siteleri arasında mümkün olduğunca benzersiz bir şekilde tanımlama yolu sağlar. https://amiunique.org adresinde parmak izi katkısında bulunabilecek özelliklerin uzun (ancak kesinlikle kapsamlı değildir) bir listesi vardır ve kullanıcılar parmak izi çok fazla ilgi duymasa bile bu listeye her zaman daha fazla ilgi gösterilmesini istemez.

Belirli güçlü API'ler desteklenmiyor

Tarayıcı tedarikçilerinin, bir kullanıcının parmak izini hesaplama konusundaki tüm bu yaklaşımlara yanıtı, bu API'lerden kullanılabilen entropi miktarını azaltmanın yollarını bulmaktır. En kısıtlayıcı seçenek, bunları en başta uygulamamaktır. Bu, bazı büyük tarayıcılar tarafından çeşitli donanım ve cihaz API'leri (istemci tarafı web uygulamalarından NFC ve Bluetooth erişimi gibi) için yapılmaktadır. Bunların uygulanmama nedenleri dijital parmak izi ve gizlilik endişeleri olarak belirtilmiştir. Bu durum elbette uygulamalarınızı ve hizmetlerinizi etkileyebilir: API'yi uygulamayan bir tarayıcıda hiçbir şekilde kullanamazsınız ve bu da bazı donanım yaklaşımlarının değerlendirilmesini kısıtlayabilir veya tamamen ortadan kaldırabilir.

Kullanıcı izinleri ağ geçidi

Tarayıcı tedarikçi firmalarının uyguladığı ikinci yaklaşım, bir tür açık kullanıcı izni olmadan API veya veri erişimini önlemektir. Bu yaklaşım genellikle güvenlik nedeniyle de uygulanır. Bir web sitesi, izniniz olmadan web kameranızla resim çekemez! Ancak burada gizlilik ve güvenlik de benzer ilgi alanlarına sahip olabilir. Bir kişinin konumunu saptamak elbette gizlilik ihlalidir, ancak aynı zamanda parmak izinin benzersiz olmasına da katkıda bulunur. Coğrafi konumu görmek için izin alınması, bir konumun söz konusu parmak izinin benzersizliğine eklediği fazladan entropiyi azaltmaz ancak parmak izi alma işlemi artık görünmez olarak yapılmadığı için coğrafi konumun kullanılmasını ortadan kaldırır. Parmak izi tekniğinin amacı, kullanıcıları gizli bir şekilde birbirinden ayırt etmektir. Kullanıcının, onu tanımlamaya çalıştığınızı bilmesi için hazırsanız, dijital parmak izi tekniklerine ihtiyacınız yoktur: kullanıcıdan bir hesap oluşturmasını ve giriş yapmasını isteyin.

Öngörülemezlik ekleme

Bazı durumlarda uygulanan üçüncü yaklaşım, tarayıcı tedarikçilerinin API'lerden gelen yanıtları daha az ayrıntılı ve dolayısıyla daha az tanımlayıcı hale getirmek için "fuzz'lamasıdır. Bu, veri modülündeki rastgele yanıt mekanizmasının bir parçası olarak tanımlandı. Bu yöntem, verileri yanlışlıkla toplarken kullanıcılardan veri toplarken yapabileceğiniz bir şey olarak tanımlanıyordu. Tarayıcı tedarikçileri, web uygulamalarının ve üçüncü tarafların sunduğu API verilerine yönelik olarak da bu yaklaşımı benimseyebilir. window.performance.now() adresindeki sayfa performansını ölçmek için kullanılan çok doğru zamanlama API'leri buna örnek gösterilebilir. Tarayıcı, bu değerleri mikrosaniye doğruluğuna kadar bilir ancak döndürülen değerler, dijital parmak izi kullanımında kullanılmamaları (ve ayrıca zamanlama saldırılarından kaçınmak için güvenlik amacıyla) en yakın 20 mikrosaniye sınırına yuvarlanarak kasıtlı şekilde hassasiyetle azaltılır. Buradaki amaç, API'lerin kullanışlı kalmasını sağlamak, ancak yanıtları daha az tanımlayıcı hale getirmektir. Kısacası, cihazınızın size özel olması yerine herkesin cihazına daha fazla benzemesini sağlayarak"sürü bağışıklığı" sağlamaktır. Safari, sistem yapılandırmasının basitleştirilmiş bir sürümünü sunar.

Gizlilik bütçesi uygulama

Gizlilik Bütçesi, tarayıcıların her dijital parmak izi yüzeyinde gösterilen bilgileri tahmin etmesini öneren bir tekliftir. Henüz tarayıcılara uygulanmamıştır. Hedefiniz, kullanıcı gizliliğini korurken güçlü API'lere izin vermektir. Gizlilik bütçesi teklifi hakkında daha fazla bilgi edinin.

Kapsamlı bir test ortamı kullanın

Bunların tümü, uygulamaları ve hizmetleri oluşturma şeklinizi etkiler. Özellikle, bu alandaki tarayıcı ve platformlarda çok çeşitli yanıtlar ve yaklaşımlar var. Bu nedenle, çalışmanızı birden çok farklı ortamda test etmenin kritik öneme sahip olması gerekir. Bu, elbette her zaman önemlidir, ancak motorun hangi tarayıcıda veya platformda bulunduğuna bakılmaksızın, belirli bir oluşturma motoru için HTML oluşturma veya CSS'nin sabit olacağını varsaymak makul olabilir (ve bu nedenle, örneğin yalnızca bir Blink tabanlı tarayıcıda test yapmak cazip gelebilir). Oluşturma motorunu paylaşan tarayıcılar, API yüzeylerini dijital parmak izi almaya karşı nasıl sertleştirdikleri açısından önemli ölçüde farklılık gösterebileceğinden, bu durum kesinlikle API kullanımı için geçerli değildir.

Yapmanız gerekenler:

  • Test sırasında öncelik vermeniz gereken tarayıcı grubunu yönlendirmek için kendi analizlerinizi ve kitlenizi kontrol edin.
  • Firefox, Chrome, Edge, masaüstünde Safari, Android'de Chrome ve Samsung Internet, iOS'te Safari ise test edebileceğimiz iyi tarayıcılar arasındadır. Bu, üç ana oluşturma motorunda (Firefox'ta Gecko, Chrome, Edge ve Samsung Internet'te çeşitli Blink çatalları ve Safari'de Webkit) ve hem mobil hem de masaüstü platformlarda test yapmanızı sağlar.
  • Siteniz tabletler, akıllı saatler veya oyun konsolları gibi daha seyrek kullanılan cihazlarda da kullanılabiliyorsa bu cihazları da test edin. Bazı donanım platformları, tarayıcı güncellemeleri açısından mobil ve masaüstünün gerisinde kalabilir. Diğer bir deyişle, bazı API'ler bu platformlardaki tarayıcılarda uygulanmayabilir veya kullanılamayabilir.
  • Kullanıcı gizliliğinin motivasyon kaynağı olduğunu iddia eden bir veya daha fazla tarayıcıyla test yapın. En yaygın tarayıcılarınızın yakında kullanıma sunulacak yayın öncesi ve test sürümlerini (kullanabiliyorsanız) ekleyin: Safari teknoloji önizlemesi, Chrome'un Canary, Firefox'un Beta kanalı. Bunlar, sitelerinizi etkileyen API kesintilerini ve değişiklikleri kullanıcılarınızı etkilemeden önce tespit etme şansınızı en üst düzeye çıkarır. Benzer şekilde, elinizdeki tüm analizlere başvurarak kullanıcılarınızın ortamlarını da göz önünde bulundurun. Kullanıcı tabanınızda çok sayıda eski Android telefon varsa testlerinize bunları dahil ettiğinizden emin olun. Çoğu kişi, bir geliştirme ekibinin sahip olduğu hızlı donanıma ve en yeni sürümlere sahip değildir.
  • Temiz bir profil kullanarak ve gizli/özel tarama modunda test edin. Muhtemelen kişisel profilinizde gerekli izinleri vermişsinizdir. Herhangi bir soru için siteye izin vermeyi reddederseniz ne olacağını test edin.
  • Sayfalarınızı Firefox'un parmak izi koruması modunda açık bir şekilde test edin. Bunu yaptığınızda, sayfanız dijital parmak izi almaya çalışıyorsa izin iletişim kutuları gösterilir veya bazı API'ler için gizlenmiş veriler döndürülür. Bu, hizmetinize dahil olan üçüncü tarafların dijital parmak izi tekniğini kullanıp kullanmadığını veya kendi hizmetinizin buna bağlı olup olmadığını onaylamanıza yardımcı olur. Daha sonra, kasten fuzz yapmanın ihtiyacınız olan şeyi yapmayı zorlaştırıp engellemediğini düşünebilirsiniz. Söz konusu verileri başka bir kaynaktan elde etmek, onlar olmadan yapmak veya daha az ayrıntılı veriler kullanmak için gerekli düzeltmeleri yapmayı düşünün.
  • Daha önce üçüncü taraflar modülünde açıklandığı gibi, dijital parmak izi teknikleri kullanıp kullanmadıklarını görmek için üçüncü taraf bağımlılıklarınızı denetlemeniz de önemlidir. Pasif dijital parmak izinin tespit edilmesi zordur (ve üçüncü bir taraf bunu kendi sunucusunda yaparsa imkansızdır) ancak dijital parmak izi modu bazı dijital parmak izi tekniklerini işaretleyebilir ve navigator.userAgent ya da <canvas> nesnelerinin beklenmedik şekilde oluşturulmasının aranması da daha ayrıntılı incelemeyi hak eden bazı yaklaşımları ortaya çıkarabilir. "Olası eşleştirme" teriminin, bir üçüncü tarafı açıklayan pazarlama veya teknik materyallerdeki kullanımlarına da bakmak yararlı olabilir. Bu durum, bazen dijital parmak izi tekniklerinin kullanıldığını gösterebilir.

Tarayıcılar arası test araçları

Kodunuzu gizlilik amacıyla test etmenin otomatikleştirilmesi zordur ve manuel olarak test ederken dikkat edilecek noktalar daha önce açıklanmıştır. Örneğin, sitenin erişmeye çalıştığı API'ler için siteye erişim iznini reddettiğinizde ne olur ve bu durum kullanıcıya nasıl sunulur? Otomatik test, sitenin kullanıcının güvenmesine yardımcı olacak şekilde mi, yoksa tersine kullanıcıyı güvendirmeye teşvik edecek şekilde mi çalıştığını ya da bir şeyin gizlendiğini düşünüp düşünmediğini belirleyemez.

Bununla birlikte, site denetlendikten sonra, yeni tarayıcı sürümlerinde (veya gelecek "beta" ve "önizleme" sürümlerinde herhangi bir sorun olmadığını doğrulamak için) API'lerin test edilmesi otomatik hale getirilebilir ve büyük oranda mevcut test paketinizin bir parçası olmalıdır. Çoğu tarayıcının hangi API'lerin ve özelliklerin kullanılabilir olduğu konusunda belirli düzeyde kontrole izin vermesi, API yüzey kapsamıyla çalışırken otomatik test araçlarınızda dikkate alınması gereken bir noktadır. Chrome bunu Firefox gibi komut satırı anahtarları aracılığıyla yapar. Test aracı kurulumunda bunlara erişmek, API'ler kapalıyken veya açıkken belirli testleri çalıştırmanıza olanak tanır. (Örneğin, başlatma sırasında tarayıcı işaretleri ekleme yöntemleri için Cypress'in tarayıcı başlatma eklentisi ve puppeteer'ın launch.args parametresine bakın.)

Yalnızca genel bilgiler için kullanıcı aracısı dizesine güvenin

Başka bir örneği ele alırsak, web'in başlangıcından beri tarayıcılar HTTP Kullanıcı Aracısı başlığındaki her istekle birlikte kendileri için bir açıklama göndermiştir. Neredeyse uzun zamandır web geliştiricilerine, farklı tarayıcılara farklı içerik sunmak için kullanıcı aracısı başlığının içeriklerini kullanmamalarını öneriyorlar. Bu süre boyunca web geliştiricileri, bazı durumlarda (ancak hepsi olmasa da) belirli düzeyde gerekçelendirmeyle bunu yine de yaptılar. Tarayıcılar, web sitelerinin yetersiz bir deneyim yaşamasını istemediklerinden, her tarayıcı diğer tüm tarayıcıların kimliğine bürünür ve kullanıcı aracısı dizesi şunun gibi görünür:

Mozilla/5.0 (Linux; Android 6.0.1; SGP771 Build/32.2.A.0.253; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/52.0.2743.98 Safari/537.36.

Bu iddia, diğerlerinin yanı sıra ilk astronotların 20 yıldan uzun bir süre önce Uluslararası Uzay İstasyonu'na binmesiyle aynı zamanda kullanıma sunulan bir tarayıcı olan Mozilla/5.0 olduğunu iddia ediyor. Kullanıcı aracısı dizesi, elbette dijital parmak izi için zengin bir entropi kaynağıdır ve bu dijital parmak izi bütünlüğünün etkisini azaltmak için tarayıcı üreticileri ya kullanıcı aracısı başlığını zaten dondurmuş ya da bunu yapmak için çalışmaktadır. Bu, API'nin tamamen kaldırılmadan API tarafından sağlanan verileri değiştirmeyle ilgili başka bir örnektir. Boş bir kullanıcı aracısı üstbilgisi göndermek, öğenin mevcut olduğunu varsayan sayısız web sitesini bozar. Dolayısıyla, tarayıcılar genellikle sayfadaki ayrıntıların bir kısmını kaldırıp daha sonra bunları neredeyse değiştirmeden bırakır. (Bunu Safari, Chrome ve Firefox'ta görebilirsiniz.) Ayrıntılı dijital parmak izine karşı bu koruma, temelde artık kullanıcı aracısı başlığının doğru olduğuna güvenemeyeceğiniz anlamına gelir ve böyle bir durumda alternatif veri kaynakları bulmak önemlidir.

Daha açık bir ifadeyle, kullanıcı aracısındaki veriler tamamen silinmeyecek ancak daha düşük ayrıntı düzeyinde kullanılabilirler veya eski ama değişmeyen bir sayı raporlanabileceği için bazen yanlış olabilmektedir. Örneğin, Firefox, Safari ve Chrome, bildirilen macOS sürüm numarasını on olarak sınırlandırır (Daha ayrıntılı açıklamalar için Kullanıcı aracısı dizesinin kısaltılmasıyla ilgili güncelleme bölümüne bakın). Chrome'un kullanıcı aracısı dizesindeki verileri nasıl azaltmayı planladığını User-Agent Azaltma sayfasında bulabilirsiniz. Ancak özetle, raporlanan tarayıcı sürümü numarasının yalnızca bir ana sürümü içereceğini (böylece, tarayıcı 123.10.45.108 sürümü olsa bile sürüm numarası 123.0.0.0 şeklinde görünür) ve işletim sistemi sürümü numarası tek bir ayrıntı olmadan donup kalacak. Bu durumda, "Windows 20" hayali bir Chrome sürümünde çalışan hayali bir Chrome sürümü 123.45.67.89, sürüm numarasını şu şekilde bildirir:

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36

İhtiyacınız olan temel bilgiler (tarayıcı sürümü) hâlâ mevcut: Windows'daki Chrome 123 sürümü. Ancak dondurulduktan sonra yan kuruluş bilgileri (çip mimarisi, hangi Windows sürümünü kullandığı, Safari'nin hangi sürümünü kullandığı, tarayıcının alt sürümü) artık kullanılamayacak.

Bunu farklı bir platformdaki "mevcut" bir Chrome kullanıcı aracısıyla karşılaştırın:

Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36,

ve farklı olan tek şeyin Chrome sürüm numarası (104) ile platform tanımlayıcısı olduğu görülebilir.

Benzer şekilde, Safari'nin kullanıcı aracısı dizesi bir platform ve bir Safari sürüm numarası gösterir ve iOS üzerinde bir OS sürümü de verir, ancak geri kalan her şey dondurulmuştur. Bu durumda, hayali bir macOS 20'de çalışan hayali bir Safari sürümü 1234.5.67, kullanıcı aracısına şu değeri verebilir:

Mozilla/5.0 (Macintosh; **Intel Mac OS X 10_20_0**) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15,

Hayali bir iOS 20'de ise şu şekilde olabilir:

Mozilla/5.0 (iPhone; CPU **iPhone OS 20_0** like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/**20.0 Mobile/15E148 Safari/605.1.15**.

Temel bilgiler (Bu, Safari, iOS veya macOS'tedir) mevcut ve iOS Safari hâlâ bir iOS sürüm numarası sağlamaktadır; ancak geçmişte kullanılan yardımcı bilgilerin çoğu o zamandan beri dondurulmuştur. Daha da önemlisi, bu sürüm numarası her zaman bulunmayan Safari sürüm numarasını da içerir.

Bildirilen kullanıcı aracısındaki değişiklikler hararetle tartışıldı. https://github.com/WICG/ua-client-hints#use-cases, değişikliğin bazı bağımsız değişkenlerini ve nedenlerini özetler ve Rowan Merewood'un, Müşteri İpuçları bağlamında farklılaştırma için kullanıcı aracısını kullanmaktan vazgeçme ile ilgili bazı stratejilerin açıklandığı bir slayt sunusu vardır.

Bulanık

Fuzzing, güvenlik uygulamasında kullanılan bir terimdir. API'ler, bu beklenmedik değerleri kötü işlemeleri ve bir güvenlik sorunu ortaya çıkarmaları umuduyla beklenmedik değerlerle çağrılır. Web geliştiricileri, siteler arası komut dosyası çalıştırma (XSS) konusuna aşina olmalıdır. Bu, genellikle sayfanın yerleştirilen HTML'den doğru şekilde çıkış yapmaması (dolayısıyla içinde <script> metni olan bir arama sorgusu yapılması) bir sayfaya kötü amaçlı komut dosyası eklemeyi içerir. Arka uç geliştiricileri, kullanıcı girişini doğru şekilde doğrulamayan veritabanı sorgularının güvenlik sorunları (Küçük Bobby Tabloları ile xkcd'de gösterildiği gibi) ortaya çıkardığı SQL yerleştirmeden haberdar olacaktır. Fuzzing veya fuzz testi, API'ye çok sayıda farklı geçersiz veya beklenmeyen giriş sağlama girişimlerinde ve güvenlik sızıntıları, kilitlenmeler veya diğer kötü işleme durumlarına karşı sonuçları kontrol etme amaçlı otomatik girişimlerde daha doğru şekilde kullanılır. Bunların tümü, kasten yanlış bilgi sağlamanın örnekleridir. Ancak burada bu işlem, geliştiricileri söz konusu verilere artık güvenmemeye teşvik etmek için tarayıcılar tarafından önlem amaçlı olarak (kullanıcı aracısını kasıtlı olarak yanlış yaparak) gerçekleştirilmektedir.

Yapmanız gerekenler:

  • Kullanıcı aracısı dizesine (navigator.userAgent aramasının istemci tarafı kodunuzdaki çoğu oluşumu bulması olasıdır ve arka uç kodunuz, bağımlılıklarınız da dahil olmak üzere başlık olarak User-Agent'yi arar) kod tabanınızı kontrol edin.
  • Kendi kodunuzda kullanımlar bulursanız kodun neyi kontrol ettiğini düşünün ve bu farklılaştırmanın başka bir yolunu bulun (veya yeni bir bağımlılık bulun ya da sorun bildirerek veya güncellemeler için kontrol ederek yukarı akışla çalışın). Bazen hataları gidermek için tarayıcı farklılaştırması gerekir, ancak cihaz dondurulduğunda kullanıcı aracısı bunu yapmak için gitgide bir yöntem olmaktan çıkar.
  • Güvende olabilirsiniz. Yalnızca marka, ana sürüm ve platformun temel değerlerini kullanıyorsanız bunların kullanıcı aracısı dizesinde hâlâ kullanılabilir ve doğru olması neredeyse kesindir.
  • MDN, ana işlev algılama olan kullanıcı aracısı dizesine (("browser sniffing")) bağımlılığı önlemenin etkili yollarını açıklar.
  • Kullanıcı aracısı dizesine bir şekilde bağımlıysanız (faydalı kalan birkaç temel değeri kullanırken bile) yeni tarayıcı sürümlerinde yer alacak kullanıcı aracılarıyla test yapmak iyi bir fikirdir. Beta veya teknoloji önizleme derlemeleri aracılığıyla yakında kullanıma sunulacak olan bu tarayıcı sürümleriyle test yapmak mümkündür. Ancak test için özel bir kullanıcı aracısı dizesi ayarlamak da mümkündür. Yerel geliştirme yaparken kodunuzun kullanıcılardan alabileceğiniz farklı kullanıcı aracısı değerleriyle nasıl çalıştığını kontrol etmek için Chrome, Edge, Firefox ve Safari'de kullanıcı aracısı dizesini geçersiz kılabilirsiniz.

İstemci İpuçları

Kullanıcı Aracısı İstemci İpuçları, bu bilgiyi sağlamayla ilgili önemli tekliflerdir ancak tüm tarayıcılarda desteklenmemektedir. Destekleyen tarayıcılar üç başlık aktarır: tarayıcının markasını ve sürüm numarasını belirten Sec-CH-UA; isteğin mobil cihazdan gelip gelmediğini belirten Sec-CH-UA-Mobile ve işletim sistemini belirten Sec-CH-UA-Platform. (Bu başlıkların ayrıştırılması, basit dizeler yerine Yapılandırılmış Başlıklar oldukları için göründüğünden daha az kolaydır ve bu işlem, doğru şekilde ayrıştırılmaması halinde yanlış işlenecek "zor" değerler gönderen tarayıcılar tarafından uygulanır. Bu, daha önce olduğu gibi, tarayıcı tarafından önlem amaçlı olarak yapılan bir "fuzz testi" örneğidir. Veriler, yanlış veya tembel ayrıştırmanın kötü sonuçlar verebileceği şekilde tasarlandığından (örneğin, var olmayan markaları veya düzgün kapanmayan dizeleri göstermek), bu verileri kullanan bir geliştiricinin verileri doğru şekilde işlemesi gerekir.) Neyse ki, bu veriler tarayıcı tarafından doğrudan navigator.userAgentData olarak JavaScript'in kullanımına da sunulur. Bu, destekleyici bir tarayıcıda şu nesneye benzer şekilde görünebilir:

{
  "brands": [
    {
    "brand": " Not A;Brand",
    "version": "99"
    },
    {
    "brand": "Chromium",
    "version": "96"
    },
    {
    "brand": "Google Chrome",
    "version": "96"
    }
  ],
  "mobile": false
}