Güven Jetonlarını kullanmaya başlama

Güven Jetonları, sahtekarlıkla mücadeleye yardımcı olmak için pasif izleme olmadan bir web sitesinin, bir tarama bağlamından diğerine (örneğin, siteler arasında) sınırlı miktarda bilgi aktarmasını sağlayan yeni bir API'dir.



Özet

Güven jetonları, bir kaynağın güvendiği kullanıcıya şifreleme jetonları yayınlamasına olanak tanır. Jetonlar kullanıcının tarayıcısında depolanır. Tarayıcı, daha sonra kullanıcının özgünlüğünü değerlendirmek için jetonları diğer bağlamlarda kullanabilir.

Trust Token API, kullanıcıyı tanımlamadan veya iki kimlik arasında bağlantı oluşturmadan bir bağlamda kullanıcı güveninin başka bir bağlama aktarılmasını sağlar.

API'yi demomuzla deneyebilir ve Chrome Geliştirici Araçları ile Uygulama sekmelerindeki jetonları inceleyebilirsiniz.

Chrome DevTools Network (Ağ) sekmesindeki Güven Jetonlarını gösteren ekran görüntüsü.
Chrome Geliştirici Araçları sekmesinde Güven Jetonları.
Chrome DevTools Uygulama sekmesindeki Güven Jetonlarını gösteren ekran görüntüsü.
Chrome Geliştirici Araçları Uygulama sekmesinde Güven Jetonları.

Neden Güven Jetonlarına ihtiyacımız var?

İnternette, gerçek bir kişiyi veya hizmeti dolandıran kötü niyetli bir üçüncü taraf ya da insan gibi davranan bir bot değil, kullanıcının ifade ettiği kişi olduğunu gösteren güven sinyalleri oluşturmanın yolları gerekir. Sahtekarlıktan korunma, reklamverenler, reklam sağlayıcılar ve CDN'ler için özellikle önemlidir.

Ne yazık ki güvenilirliği ölçmek ve yaymak için kullanılan mevcut birçok mekanizma (örneğin, bir siteyle etkileşimin gerçek bir insandan gelip gelmediğini belirlemek için) dijital parmak izi için de kullanılabilecek tekniklerden yararlanın.

API, gizliliği koruyarak güvenin bireysel kullanıcı izleme olmadan siteler arasında yayılmasını sağlamalıdır.

Güven Jetonları teklifinde neler var?

Web, sahtekarlığı ve spam'i tespit etmek için güven sinyalleri oluşturmayı temel alır. Bunu yapmanın bir yolu global, siteler arası her kullanıcı tanımlayıcılarıyla taramayı izlemektir. Gizliliği koruyan bir API için bu kabul edilmez.

Teklif açıklayıcısından:

Bu API, üçüncü taraf bağlamlarında erişilebilen "Gizlilik Kartı" stili şifreleme jetonları için kaynak başına yeni bir depolama alanı önerir. Bu jetonlar kişiselleştirilmemiştir ve kullanıcıları izlemek için kullanılamaz ancak kriptografik olarak imzalandığı için taklit edilemez.

Kaynak, kullanıcıya güvendiği bir bağlamda olduğunda tarayıcıya bir jeton grubu gönderebilir. Bu jetonlar daha sonra kullanıcının tanınmayacağı veya daha az güvenileceği bir bağlamda daha sonra "harcanabilir". En önemlisi, jetonların birbirinden ayırt edilememesi ve web sitelerinin kullanıcıları bunlar aracılığıyla izlemesini engeller.

Ayrıca tarayıcının, belirli bir jeton kullanımına bağlı anahtarlarla giden istekleri imzalaması için bir uzantı mekanizması da öneriyoruz.

Örnek API kullanımı

Aşağıdaki kod, API açıklayıcıdaki örnek koddan uyarlanmıştır.

Bir kullanıcının, üçüncü taraf bir reklam ağından (foo.example) reklam yerleştiren bir haber web sitesini (publisher.example) ziyaret ettiğini düşünün. Kullanıcı daha önce güven jetonları (issuer.example) yayınlayan bir sosyal medya sitesi kullanmıştır.

Aşağıdaki sırada, güven jetonlarının işleyiş şekli gösterilmektedir.

1.Kullanıcı issuer.example sitesini ziyaret eder ve siteyi gerçek bir insan olduğuna inandıracak işlemler gerçekleştirir. Örneğin, hesap hareketleri veya bir CAPTCHA testini geçme.

2.issuer.example, kullanıcının gerçek bir insan olduğunu doğrular ve kullanıcının tarayıcısına bir güven jetonu vermek için aşağıdaki JavaScript'i çalıştırır:

fetch('https://issuer.example/trust-token', {
  trustToken: {
    type: 'token-request',
    issuer: 'https://issuer.example'
  }
}).then(...)

3.Kullanıcının tarayıcısı güven jetonunu depolayarak issuer.example ile ilişkilendirir.

4.Kullanıcı bir süre sonra publisher.example sitesini ziyaret eder.

5.publisher.example, kullanıcının gerçek bir insan olup olmadığını öğrenmek istiyor. publisher.example, issuer.example uygulamasına güveniyor. Bu nedenle, kullanıcının tarayıcısında söz konusu kaynağa ait geçerli jetonlar olup olmadığını kontrol eder:

document.hasTrustToken('https://issuer.example');

6.Bu işlem true olarak çözümlenen bir söz döndürürse kullanıcının issuer.example alanında jetonları vardır. Bu nedenle publisher.example, jetonu kullanmayı deneyebilir:

fetch('https://issuer.example/trust-token', {
trustToken: {
  type: 'token-redemption',
  issuer: 'https://issuer.example',
  refreshPolicy: {none, refresh}
}
}).then(...)

Kaldırdığınız kodun yerine aşağıdakini ekleyin:

  1. publisher.example adlı alıcı, tekliften yararlanma isteğinde bulunuyor.
  2. Tekliften yararlanma işlemi başarılı olursa kartı veren issuer.example, bir noktada bu tarayıcıya geçerli bir jeton verdiklerini belirten bir teklifi kullanma kaydı döndürür.

    7.fetch() tarafından döndürülen söz çözüme ulaştırıldıktan sonra teklifi kullanma kaydı sonraki kaynak isteklerinde kullanılabilir:

fetch('https://foo.example/get-content', {
  trustToken: {
    type: 'send-redemption-record',
    issuers: ['https://issuer.example', ...]
  }
});

Kaldırdığınız kodun yerine aşağıdakini ekleyin:

  1. Tekliften yararlanma kayıtları, Sec-Redemption-Record istek başlığı olarak eklenir.
  2. foo.example, teklifi kullanma kaydını alır ve issuer.example adlı kullanıcının bu kullanıcının bir insan olduğunu düşünüp düşünmediğini belirlemek için kaydı ayrıştırır.
  3. foo.example buna göre yanıt verir.
Bir web sitesi size güvenip güvenmeyeceğini nasıl belirleyebilir?

Bir e-ticaret sitesiyle ilgili alışveriş geçmişiniz, bir konum platformunda check-in'leriniz veya bir bankadaki hesap geçmişiniz olabilir. Kartı veren kuruluş, hesabınızın ne kadar süredir kullanıldığı veya kartı veren kuruluşun gerçek bir insan olma olasılığınıza olan güvenini artıran diğer etkileşimler (ör. CAPTCHA veya form gönderme) gibi diğer faktörlere de bakabilir.

Güven jetonu verme

issuer.example gibi bir güven jetonu veren kuruluş tarafından kullanıcının güvenilir olduğuna karar verilirse yayıncı, trustToken parametresiyle fetch() isteği göndererek kullanıcı için güven jetonlarını getirebilir:

fetch('issuer.example/trust-token', {
  trustToken: {
    type: 'token-request'
  }
}).then(...)

Bu işlem, yeni bir temel şifreleme öğesi kullanarak Gizlilik Kartı verme protokolünün bir uzantısını çağırır:

  1. Tek seferlik rastgele sayılar olarak bilinen bir dizi yapay rastgele sayı grubu oluşturur.

  2. Nonce öğeleri gizleyin (bunları veren kuruluşun içeriklerini görüntüleyememesi için kodlayın) ve bunları bir Sec-Trust-Token başlığındaki isteğe ekleyin.

  3. Sağlanan uç noktaya bir POST isteği gönderin.

Uç nokta, kör jetonlar (kör tek seferlik rastgele sayılardaki imzalar) ile yanıt verir. Ardından jetonlar açık hale getirilir ve tarayıcı tarafından güven jetonları olarak ilişkili nonce'larla birlikte dahili olarak depolanır.

Güven jetonu kullanma

Bir yayıncı sitesi (yukarıdaki örnekte verilen publisher.example gibi), kullanıcı için kullanılabilir güven jetonları olup olmadığını kontrol edebilir:

const userHasTokens = await document.hasTrustToken('issuer.example/trust-token');

Jetonlar varsa yayıncı sitesi kullanım kaydı almak için bunları kullanabilir:

fetch('issuer.example/trust-token', {
  ...
  trustToken: {
    type: 'token-redemption',
    refreshPolicy: 'none'
  }
  ...
}).then(...)

Yayıncı, aşağıdakine benzer bir fetch() çağrısı kullanarak güven jetonu gerektiren isteklere (ör. yorum yayınlama, bir sayfayı beğenme veya ankette oy verme) teklifi kullanma kayıtlarını dahil edebilir:

fetch('https://foo.example/post-comment', {
  ...
  trustToken: {
    type: 'send-redemption-record',
    issuers: ['issuer.example/trust-token', ...]
  }
  ...
}).then(...);

Tekliften yararlanma kayıtları Sec-Redemption-Record istek başlığı olarak eklenir.

Gizlilik konusunda dikkat edilmesi gereken noktalar

Jetonlar "bağlanamaz" olacak şekilde tasarlanmıştır. Veren bir kuruluş, kullanıcılarının hangi siteleri ziyaret ettiğiyle ilgili toplu bilgileri öğrenebilir ancak jetonun verilmesi ile kullanım arasında bağlantı oluşturamaz: Kullanıcı bir jetonu kullandığında, jetonu veren kuruluş, jetonu oluşturduğu diğer jetonlardan ayırt edemez. Ancak güven jetonları şu anda vakumda mevcut değildir: Bir verenin şu anda (teoride) kullanıcı kimliğine diğer sitelerde dahil edebileceği üçüncü taraf çerezleri ve gizli izleme teknikleri gibi başka yollar vardır. Sitelerin, desteklerini planlarken bu ekosistem geçişini anlaması önemlidir. Bu, birçok Özel Korumalı Alan API'si için geçişin genel bir yönüdür. Burada daha ayrıntılı bir şekilde ele alınmamıştır.

Güvenlikle ilgili olarak göz önünde bulundurulması gerekenler

Güven jetonunun tükenmesi: Kötü amaçlı bir site, kullanıcının belirli bir yayıncıdan sağladığı jeton tedarikini kasıtlı olarak bitirebilir. Bu tür saldırılara karşı, kart veren kuruluşların aynı anda çok sayıda jeton sağlamalarına olanak tanımak gibi çeşitli hafifletmeler vardır. Böylece kullanıcılar, tarayıcıların üst düzey sayfa görüntüleme başına her zaman yalnızca bir jeton kullandığından emin olmak için yeterli kaynağa sahip olur.

Çift harcamayı önleme: Kötü amaçlı yazılımlar kullanıcının tüm güven jetonlarına erişmeye çalışabilir. Bununla birlikte, her kullanım, her jetonun yalnızca bir kez kullanıldığını doğrulayabilen aynı jetonu veren kuruluşa gönderildiğinden jetonlar zamanla biter. Kartı veren kuruluşlar, riski azaltmak amacıyla daha az jeton da imzalayabilir.

Talep mekanizmaları

Teklifi kullanma kayıtlarının fetch() dışına (ör. navigasyon istekleriyle) gönderilmesine izin verilebilir. Siteler, jeton kullanımını sayfa yüklemeye paralel olarak etkinleştirmek için yayıncı verilerini HTTP yanıt başlıklarına da ekleyebilirler.

Hatırlatma: Bu teklif için geri bildirim vermeniz gerekiyor. Yorumlarınız varsa lütfen Güven Jetonu açıklayıcı deposunda bir sorun oluşturun.

Daha fazla bilgi


Bu yayının yazılmasına ve incelenmesine yardımcı olan herkese teşekkür ederiz.

Fotoğraf: ZSun Fu tarafından Unsplash'ta.