Storage Access API

Tarayıcılar, kullanıcı ayarları ve depolama alanı bölümlendirmesi tarafından üçüncü taraf çerezlerinin engellenmesi, kimlik doğrulama gibi kullanıcı yolculukları için yerleşik bağlamlarda çerezlere ve diğer depolama alanlarına dayanan siteler ve hizmetler açısından zorluk oluşturur. Storage Access API (SAA), siteler arası izlemeyi mümkün olduğunca sınırlarken bu kullanım alanlarının çalışmaya devam etmesine olanak tanır.

Uygulama durumu

Browser Support

  • Chrome: 119.
  • Edge: 85.
  • Firefox: 65.
  • Safari: 11.1.

Source

Storage Access API, tüm büyük tarayıcılarda kullanılabilir ancak tarayıcılar arasında ufak uygulama farklılıkları vardır. Bu farklılıklar, bu yayındaki ilgili bölümlerde vurgulanmıştır.

API'yi standartlaştırmadan önce kalan tüm engelleme sorunlarını çözmek için çalışmalarımız devam ediyor.

Storage Access API nedir?

Storage Access API, tarayıcı ayarları nedeniyle erişim reddedildiğinde iframe'lerin depolama alanı erişim izinleri istemesine olanak tanıyan bir JavaScript API'sidir. Siteler arası kaynakların yüklenmesine bağlı kullanım alanlarına sahip yerleşimler, gerektiğinde kullanıcıdan erişim izni istemek için API'yi kullanabilir.

Depolama isteği onaylanırsa iFrame, bölümlere ayrılmamış çerezlerine ve depolama alanına erişebilir. Bu alanlara kullanıcılar üst düzey site olarak da erişebilir.

Storage Access API, son kullanıcıya minimum düzeyde yük bindirirken belirli bölümlendirilmemiş çerez ve depolama erişiminin sağlanmasına olanak tanır. Bu sayede, genellikle kullanıcı takibi için kullanılan genel bölümlendirilmemiş çerez ve depolama erişimi engellenir.

Kullanım alanları

Bazı üçüncü taraf yerleşik içerikleri, kullanıcıya daha iyi bir deneyim sunmak için bölümlenmemiş çerezlere veya depolamaya erişim gerektirir. Üçüncü taraf çerezleri kısıtlandığında ve depolama alanı bölümlendirmesi etkinleştirildiğinde bu erişim sağlanamaz.

Kullanım alanları şunlardır:

  • Giriş oturumu ayrıntılarını gerektiren yerleştirilmiş yorum widget'ları.
  • Giriş oturumu ayrıntılarını gerektiren sosyal medya "Beğen" düğmeleri.
  • Giriş oturumu ayrıntılarını gerektiren yerleştirilmiş belgeler.
  • Video yerleşimine sunulan premium deneyim (ör. oturum açmış kullanıcılara reklam göstermemek, kullanıcının altyazı tercihlerini öğrenmek veya belirli video türlerini kısıtlamak için).
  • Yerleşik ödeme sistemleri.

Bu kullanım alanlarının çoğu, yerleşik iFrame'lerde kalıcı giriş erişimini içerir.

Storage Access API'nin, diğer API'ler yerine kullanılabileceği zamanlar

Storage Access API, bölümlendirilmemiş çerezleri ve depolama alanını kullanmanın alternatiflerinden biridir. Bu nedenle, bu API'nin diğer API'lere kıyasla ne zaman kullanılacağını anlamak önemlidir. Aşağıdakilerin her ikisinin de geçerli olduğu kullanım alanları için tasarlanmıştır:

  • Kullanıcı, yerleştirilmiş içerikle etkileşim kurar. Yani bu, pasif veya gizli bir iFrame değildir.
  • Kullanıcı, yerleşik kaynağı üst düzey bir bağlamda (yani kaynak başka bir siteye yerleştirilmemişken) ziyaret ettiyse.

Çeşitli kullanım alanları için alternatif API'ler vardır:

  • Bağımsız Bölümlendirme Durumuna Sahip Çerezler (CHIPS), geliştiricilerin üst düzey site başına ayrı bir çerez kavanozu ile "bölünmüş" depolama alanına bir çerez etkinleştirmesine olanak tanır. Örneğin, üçüncü taraf bir web sohbet widget'ı, oturum bilgilerini kaydetmek için çerez ayarlayabilir. Oturum bilgileri site başına kaydedilir. Bu nedenle, widget tarafından ayarlanan çereze, yerleştirildiği diğer web sitelerinde de erişilmesi gerekmez. Storage Access API, yerleştirilmiş bir üçüncü taraf widget'ı aynı bilgileri farklı kaynaklarda paylaşmaya bağlı olduğunda (ör. oturum açmış kullanıcıların oturum ayrıntıları veya tercihleri için) yararlıdır.
  • Depolama alanı bölümlendirmesi, siteler arası iFrame'lerin mevcut JavaScript depolama mekanizmalarını kullanırken temel depolama alanını site başına bölmesidir. Bu sayede, bir web sitesindeki yerleşik depolama alanına diğer web sitelerindeki aynı yerleşik öğe tarafından erişilemez.
  • İlişkili Websitesi Grupları (RWS), bir kuruluşun siteler arasındaki ilişkileri beyan etmesinin bir yoludur. Bu sayede tarayıcılar, belirli amaçlar için bölümlendirilmemiş çerez ve depolama erişimine sınırlı olarak izin verir. Sitelerin Storage Access API ile erişim isteğinde bulunmasına devam etmesi gerekir ancak gruptaki siteler için erişim, kullanıcı istemi olmadan verilebilir.
  • Federated Credential Management (FedCM), birleşik kimlik hizmetlerinde gizliliği korumaya yönelik bir yaklaşımdır. Storage Access API, bölümlendirilmemiş çerezlere ve giriş sonrası depolamaya erişimle ilgilenir. FedCM, bazı kullanım alanları için Depolama Erişimi API'sine alternatif bir çözüm sunar ve daha giriş odaklı bir tarayıcı istemi içerdiğinden tercih edilebilir. Ancak FedCM'yi kullanmaya başlamak genellikle kodunuzda ek değişiklikler yapılmasını gerektirir (ör. HTTP uç noktalarını desteklemek için).
  • Sahtekarlıkla mücadele, reklamla ilgili ve ölçüm API'leri de vardır. Storage Access API, bu endişeleri gidermek için tasarlanmamıştır.

Storage Access API'yi kullanma

Storage Access API'de, söze dayalı iki yöntem vardır:

Ayrıca Permissions API ile de entegre olur. Bu sayede, depolama alanı erişim izninin üçüncü taraf bağlamındaki durumunu kontrol edebilirsiniz. Bu durum, document.requestStorageAccess() çağrısının otomatik olarak verilip verilmeyeceğini belirtir:

hasStorageAccess() yöntemini kullanın

Bir site ilk kez yüklendiğinde, üçüncü taraf çerezlerine erişimin önceden verilmiş olup olmadığını kontrol etmek için hasStorageAccess() yöntemini kullanabilir.

// Set a hasAccess boolean variable which defaults to false.
let hasAccess = false;

async function handleCookieAccessInit() {
  if (!document.hasStorageAccess) {
    // Storage Access API is not supported so best we can do is
    // hope it's an older browser that doesn't block 3P cookies.
    hasAccess = true;
  } else {
    // Check whether access has been granted using the Storage Access API.
    hasAccess = await document.hasStorageAccess();
    if (!hasAccess) {
      // Handle the lack of access (covered later)
    }
  }
  if (hasAccess) {
    // Use the cookies.
  }
}
handleCookieAccessInit();

Storage Access API, bir iFrame belgesine depolama erişimi yalnızca requestStorageAccess(), çağrıldıktan sonra verir. Bu nedenle hasStorageAccess() başlangıçta yanlış döndürebilir (ör. kullanıcı varsayılan olarak üçüncü taraf çerezlerini engelliyorsa). (Ancak kullanıcı varsayılan olarak üçüncü taraf çerezlerini engellese bile siteye özgü kullanıcı ayarları, belirli bir sitede çerez erişimine de izin verebilir.) Bu API'nin kullanıldığı depolama erişimi, iFrame içindeki aynı kaynak gezinmelerinde korunur. Bu, özellikle HTML belgesinin ilk isteğinde çerezlerin bulunmasını gerektiren sayfalara erişim izni verildikten sonra yeniden yükleme yapılmasına olanak tanır.

requestStorageAccess() hareketini kullanın

iFrame'in erişimi yoksa requestStorageAccess() yöntemini kullanarak erişim isteğinde bulunması gerekebilir:

if (!hasAccess) {
  try {
    await document.requestStorageAccess();
  } catch (err) {
    // Access was not granted and it may be gated behind an interaction
    return;
  }
}

Bu ilk kez istendiğinde, kullanıcının tarayıcı istemiyle bu erişimi onaylamasının gerekmesi mümkündür. Onaylandıktan sonra söz çözülür veya await kullanılıyorsa istek reddedilerek istisna oluşur.

Kötüye kullanımı önlemek amacıyla bu tarayıcı istemi yalnızca kullanıcı etkileşiminden sonra gösterilir. Bu nedenle, requestStorageAccess() işlevinin başlangıçta iframe yüklendikten hemen sonra değil, kullanıcı tarafından etkinleştirilen bir etkinlik işleyicisinden çağrılması gerekir:

async function doClick() {

  // Only do this extra check if access hasn't already been given
  // based on the hasAccess variable.
  if (!hasAccess) {
    try {
      await document.requestStorageAccess();
      hasAccess = true; // Can assume this was true if requestStorageAccess() did not reject.
    } catch (err) {
      // Access was not granted.
      return;
    }
  }

  if (hasAccess) {
    // Use the cookies
  }
}

document.querySelector('#my-button').addEventListener('click', doClick);

Çerezler yerine yerel depolama alanı kullanmanız gerekiyorsa aşağıdakileri yapabilirsiniz:

let handle = null;

async function doClick() {
  if (!handle) {
    try {
      handle = await document.requestStorageAccess({localStorage: true});
    } catch (err) {
      // Access was not granted.
      return;
    }
  }

  // Use handle to access unpartitioned local storage.
  handle.localStorage.setItem('foo', 'bar');
}

document.querySelector('#my-button').addEventListener('click', doClick);

İzin istemleri

Kullanıcı düğmeyi ilk kez tıkladığında tarayıcı istemi çoğu durumda otomatik olarak (genellikle adres çubuğunda) görünür. Aşağıdaki ekran görüntüsünde Chrome'un istemi gösterilmektedir. Diğer tarayıcıların kullanıcı arayüzü de benzerdir:

Chrome Storage Access API izin istemi
Chrome'un Storage Access API izin istemi

İstem, tarayıcı tarafından atlanabilir ve belirli durumlarda izin otomatik olarak verilebilir:

  • Sayfa ve iFrame, istemi kabul ettikten sonraki son 30 gün içinde kullanıldıysa.
  • Yerleştirilen iframe bir İlişkili Websitesi Grubu'nun parçasıysa.
  • Depolama alanı erişimi için FedCM güven sinyali olarak kullanılıyorsa.
  • Firefox'ta, bilinen web siteleri (en üst düzeyde etkileşimde bulunduğunuz siteler) için de ilk beş denemede istem atlanır.

Alternatif olarak, belirli durumlarda istem gösterilmeden yöntem otomatik olarak reddedilebilir:

  • Kullanıcı, iFrame'in sahibi olan siteyi daha önce bir iFrame olarak değil, üst düzey bir doküman olarak ziyaret edip etkileşimde bulunmadıysa. Bu, Storage Access API'nin yalnızca kullanıcıların daha önce birinci taraf bağlamında ziyaret ettiği yerleşik siteler için yararlı olduğu anlamına gelir.
  • requestStorageAccess() yöntemi, bir etkileşimden sonra istem için önceden onay alınmadan kullanıcı etkileşimi etkinliğinin dışında çağrılırsa.

İlk kullanımda kullanıcıdan izin istenir. Ancak sonraki ziyaretlerde requestStorageAccess(), Chrome ve Firefox'ta istem gösterilmeden ve kullanıcı etkileşimi gerekmeden çözülebilir. Safari'de her zaman kullanıcı etkileşimi gerektiğini unutmayın.

Çerez ve depolama erişimi istem veya kullanıcı etkileşimi olmadan verilebileceğinden, sayfa yüklenirken requestStorageAccess() çağrılarak bunu destekleyen tarayıcılarda (Chrome ve Firefox) bölümlendirilmemiş çerez veya depolama erişimi genellikle kullanıcı etkileşiminden önce alınabilir. Bu sayede, bölümlendirilmemiş çerezlere ve depolamaya hemen erişebilir ve kullanıcı iframe ile etkileşime geçmeden önce bile daha kapsamlı bir deneyim sunabilirsiniz. Bu, bazı durumlarda kullanıcı etkileşimini beklemekten daha iyi bir kullanıcı deneyimi sunabilir.

SAA için güven sinyali olarak FedCM

FedCM (Federated Credential Management), üçüncü taraf çerezlerine veya gezinme yönlendirmelerine ihtiyaç duymayan, birleşik kimlik hizmetlerine (ör. "Şununla oturum aç:") yönelik gizliliği korumaya yönelik bir yaklaşımdır.

Bir kullanıcı, FedCM ile üçüncü taraf kimlik sağlayıcıdan (IdP) bazı yerleşik içeriğe sahip bir Güvenilir Taraf'a (RP) giriş yaptığında, yerleşik IdP içeriği kendi üst düzey bölümlenmemiş çerezlerine otomatik olarak depolama erişimi elde edebilir. FedCM ile otomatik depolama alanı erişimini etkinleştirmek için aşağıdaki koşulların karşılanması gerekir:

  • FedCM kimlik doğrulaması (kullanıcı oturum açma durumu) etkin olmalıdır.
  • RP, identity-credentials-get iznini ayarlayarak etkinleştirmiştir. Örneğin:
<iframe src="https://idp.example" allow="identity-credentials-get"></iframe>

Örneğin, idp.example iframe'i rp.example içine yerleştirilmiştir. Kullanıcı FedCM ile giriş yaptığında idp.example iFrame'i kendi üst düzey çerezleri için depolama erişimi isteyebilir.

rp.example, kullanıcıyı kimlik sağlayıcı idp.example ile oturum açmak için FedCM çağrısı yapar:

// The user will be asked to grant FedCM permission.
const cred = await navigator.credentials.get({
  identity: {
    providers: [{
      configURL: 'https://idp.example/fedcm.json',
      clientId: '123',
    }],
  },
});

Kullanıcı giriş yaptıktan sonra, RP İzin Politikası ile buna açıkça izin verdiği sürece IdP, idp.example iFrame'inden requestStorageAccess()'ü çağırabilir. Yerleştirilen içeriğe, kullanıcının etkinleştirmesi veya başka bir izin istemi gerekmeden kendi üst düzey çerezine otomatik olarak depolama erişimi verilir:

// Make this call within the embedded IdP iframe:

// No user gesture is needed, and the storage access will be auto-granted.
await document.requestStorageAccess();

// This returns `true`.
const hasAccess = await document.hasStorageAccess();

İzin yalnızca kullanıcı FedCM ile oturum açtığında otomatik olarak verilir. Kimlik doğrulama devre dışı olduğunda depolama alanı erişimi vermek için standart SAA koşulları geçerli olur.

Depolama Alanı Erişim Üstbilgileriyle Sonraki Yükleme

Depolama Erişimi Başlıkları, iframe dışı kaynaklar da dahil olmak üzere yerleşik içeriğin yüklenmesini etkinleştirmenin önerilen ve daha yüksek performanslı bir yoludur. Bu özellik Chrome 133'ten itibaren kullanılabilir. Depolama Alanı Erişim Başlıkları sayesinde tarayıcı, kullanıcının mevcut bağlamda üçüncü taraf kaynağına storage-access iznini verdiğini algılayabilir ve sonraki ziyaretlerde bölümlenmemiş çerezlere erişimi olan kaynakları yükleyebilir.

Depolama alanı erişim başlıkları akışı

Depolama Alanı Erişim Başlıkları ile sonraki sayfa ziyaretleri aşağıdaki akışı tetikler:

  1. Kullanıcı daha önce calendar.example kaynağı içeren website.example sayfasını ziyaret etmiş ve document.requestStorageAccess() çağrısı ile storage-access iznini vermiştir.
  2. Kullanıcı, calendar.example kaynağının yeniden yerleştirildiği website.example sayfasını ziyaret eder. Bu istek, daha önce olduğu gibi çereze henüz erişemiyor. Ancak kullanıcı daha önce storage-access izni vermiştir ve getirme işlemi, bölümlenmemiş çerez erişiminin kullanılabilir ancak etkinleştirilmediğini belirtmek için bir Sec-Fetch-Storage-Access: inactive başlığı içerir.
  3. calendar.example sunucusu, kaynak getirme işleminin storage-access izniyle bölümlenmemiş çerezlerin kullanılmasını gerektirdiğini belirtmek için bir Activate-Storage-Access: retry; allowed-origin='<origin>' üst bilgisiyle (bu durumda <origin>, https://website.example olur) yanıt verir.
  4. Tarayıcı, isteği bu kez bölümlenmemiş çerezleri ekleyerek yeniden dener (bu getirme ve sonraki getirmeler için storage-access iznini etkinleştirir).
  5. calendar.example sunucusu, kişiselleştirilmiş iframe içeriğiyle yanıt verir. Yanıt, tarayıcının içeriği storage-access izni etkinleştirilmiş şekilde (yani document.requestStorageAccess() çağrılmış gibi, bölümlenmemiş çerez erişimi ile) yüklemesi gerektiğini belirten bir Activate-Storage-Access: load başlığı içerir.
  6. Kullanıcı aracısı, storage-access iznini kullanarak iframe içeriğini bölümlenmemiş çerez erişimi ile yükler. Bu adımdan sonra widget beklendiği gibi çalışabilir.
Depolama Alanı Erişim Başlığı akışını gösteren bir akış şeması
Depolama Alanı Erişimi Üstbilgisi akış şeması.

Depolama alanı erişim üstbilgilerini kullanma

Aşağıdaki tabloda Depolama Alanı Erişimi başlıkları listelenmiştir.

Akış Başlık Değer Açıklama
İstek Sec-Fetch-Storage-Access
Not: Tarayıcı, kimlik bilgilerini içeren siteler arası isteklerde (örneğin, new Request('request.example', { credentials: 'include' });) bu başlığı otomatik olarak gönderir.
none Yerleştirmenin depolama alanına erişim izni yok.
inactive Yerleştirme izni var ancak kullanılmıyor.
İstek, Origin üstbilgisini de içermelidir.
active Yerleştirmenin bölümlere ayrılmamış çerez erişimi var.
Yanıt Activate-Storage-Access load Tarayıcıya, yerleştirilen öğenin istenen kaynak için bölümlere ayrılmamış çerezlere erişmesine izin vermesini söyler.
Bu üstbilginin eklenmesi, storage-access izni verilmişse document.requestStorageAccess() çağırmaya eşdeğerdir. Bu, kullanıcıya ek istem gösterilmeyeceği anlamına gelir.
retry Tarayıcıya depolama alanı erişim iznini etkinleştirmesini ve ardından isteği yeniden denemesini söyler.
allowed-origin <origin> Hangi kaynağın kimlik bilgisi içeren istekler başlatmasına izin verildiğini belirtir (ör. https://site.example veya *).

Örneğin, depolama alanı erişim başlıkları, üçüncü taraf bir kaynaktan resim yüklemek için kullanılabilir:

  // On the client side
  <img src="https://server.example/image">

Bu durumda, server.example sunucu tarafında aşağıdaki mantığı uygulamalıdır:

  app.get('/image', (req, res) => {
  const storageAccessHeader = req.headers['sec-fetch-storage-access'];

  if (storageAccessHeader === 'inactive') {
    // The user needs to grant permission, trigger a prompt

    // Check if the requesting origin is allowed
    // to send credentialed requests to this server.
    // Assuming the `validate_origin(origin)` method is previously defined:
    if (!validate_origin(req.headers.origin)) {
      res.status(401).send(req.headers.origin +
        ' is not allowed to send credentialed requests to this server.');
      return;
    }
    // 'retry' header value indicates that the content load request should be re-sent after the user has granted permissions
    res.set('Activate-Storage-Access', `retry; allowed-origin='${req.headers.origin}'`);
    res.status(401).send('This resource requires storage access. Please grant permission.');
  } else if (storageAccessHeader === 'active') {
    // User has granted permission, proceed with access
    res.set('Activate-Storage-Access', 'load');
    // Include the actual iframe content here
    res.send('This is the content that requires cookie access.');
  } else {
    // Handle other cases (e.g., 'Sec-Fetch-Storage-Access': 'none')
  }
});

Storage Access API demosu, Storage Access Başlıkları'nı kullanarak üçüncü taraf içeriği (iframe olmayan resim dahil) yerleştirir.

storage-access izin sorgusunu kullanma

Erişimin kullanıcı etkileşimi olmadan verilip verilemeyeceğini kontrol etmek için storage-access izninin durumunu kontrol edebilir ve etkileşim gerektiğinde çağrıyı yapıp başarısız olmasını sağlamak yerine, yalnızca kullanıcı işlemi gerekmiyorsa requestStoreAccess() çağrısını erkenden yapabilirsiniz.

Bu sayede, farklı içerikler (ör. giriş düğmesi) göstererek istem ihtiyacını önceden karşılayabilirsiniz.

Aşağıdaki kod, önceki örneğe storage-access izin kontrolünü ekler:

// Set a hasAccess boolean variable which defaults to false except for
// browsers which don't support the API - where we assume
// such browsers also don't block third-party cookies.
let hasAccess = false;

async function hasCookieAccess() {
  // Check if Storage Access API is supported
  if (!document.requestStorageAccess) {
    // Storage Access API is not supported so best we can do is
    // hope it's an older browser that doesn't block 3P cookies.
    return true;
  }

  // Check if access has already been granted
  if (await document.hasStorageAccess()) {
    return true;
  }

  // Check the storage-access permission
  // Wrap this in a try/catch for browsers that support the
  // Storage Access API but not this permission check
  // (e.g. Safari and earlier versions of Firefox).
  let permission;
  try {
    permission = await navigator.permissions.query(
      {name: 'storage-access'}
    );
  } catch (error) {
    // storage-access permission not supported. Assume no cookie access.
    return false;
  }

    if (permission) {
    if (permission.state === 'granted') {
      // Permission has previously been granted so can just call
      // requestStorageAccess() without a user interaction and
      // it will resolve automatically.
      try {
        await document.requestStorageAccess();
        return true;
      } catch (error) {
        // This shouldn't really fail if access is granted, but return false
        // if it does.
        return false;
      }
    } else if (permission.state === 'prompt') {
      // Need to call requestStorageAccess() after a user interaction
      // (potentially with a prompt). Can't do anything further here,
      // so handle this in the click handler.
      return false;
          } else if (permission.state === 'denied') {
            // Not used: see https://github.com/privacycg/storage-access/issues/149
      return false;
          }
    }

  // By default return false, though should really be caught by earlier tests.
  return false;
}

async function handleCookieAccessInit() {
  hasAccess = await hasCookieAccess();

  if (hasAccess) {
    // Use the cookies.
  }
}

handleCookieAccessInit();

Korumalı alana alınan iframe'ler

Storage Access API'nin korumalı alanlardaki iframe'lerde kullanılması için aşağıdaki korumalı alan izinleri gereklidir:

  • Storage Access API'ye erişime izin vermek için allow-storage-access-by-user-activation gereklidir.
  • API'yi çağırmak için JavaScript kullanımına izin vermek üzere allow-scripts gereklidir.
  • Aynı kaynaktan çerezlere ve diğer depolama alanlarına erişime izin vermek için allow-same-origin gereklidir.

Örneğin:

<iframe sandbox="allow-storage-access-by-user-activation
                 allow-scripts
                 allow-same-origin"
        src="..."></iframe>

Chrome'da Depolama Erişimi API'si ile erişilebilmesi için siteler arası çerezlerin aşağıdaki iki özellikle ayarlanması gerekir:

  • SameSite=None: Çerezin siteler arası olarak işaretlenmesi için gereklidir.
  • Secure: Yalnızca HTTPS siteleri tarafından ayarlanan çerezlere erişilebildiğinden emin olur.

Firefox ve Safari'de çerezler varsayılan olarak SameSite=None olarak ayarlanır ve SAA'yı Secure çerezleriyle kısıtlamazlar. Bu nedenle bu özellikler gerekli değildir. SameSite özelliğiyle ilgili açık bir ifade kullanmanız ve her zaman Secure çerezleri kullanmanız önerilir.

Üst düzey sayfa erişimi

Storage Access API, yerleştirilmiş iframe'ler içindeki üçüncü taraf çerezlerine erişimi etkinleştirmeyi amaçlar.

Üst düzey sayfanın üçüncü taraf çerezlerine erişmesi gereken başka kullanım alanları da vardır. Örneğin, çerezlerle kısıtlanmış resimler veya komut dosyaları, site sahipleri tarafından bir iframe yerine doğrudan üst düzey dokümana dahil edilmek istenebilir. Chrome, bu kullanım alanını ele almak için requestStorageAccessFor() yöntemi ekleyen Storage Access API uzantısı önermiştir.

requestStorageAccessFor() yöntemi

Browser Support

  • Chrome: 119.
  • Edge: 119.
  • Firefox: not supported.
  • Safari: not supported.

Source

requestStorageAccessFor() yöntemi, requestStorageAccess() ile benzer şekilde çalışır ancak üst düzey kaynaklar için kullanılır. Yalnızca üçüncü taraf çerezlerine genel erişim verilmesini önlemek için bir İlişkili Web Sitesi Grubu'ndaki siteler için kullanılabilir.

requestStorageAccessFor()'ü kullanma hakkında daha fazla bilgi için İlişkili Websitesi Grupları: Geliştirici Kılavuzu'nu okuyun.

top-level-storage-access izin sorgusu

Browser Support

  • Chrome: 113.
  • Edge: 113.
  • Firefox: not supported.
  • Safari: not supported.

storage-access iznine benzer şekilde, requestStorageAccessFor() için erişim verilip verilemeyeceğini kontrol etmek üzere top-level-storage-access izni vardır.

RWS ile birlikte kullanıldığında Storage Access API'nin farkı nedir?

İlişkili Web Sitesi Grupları, Storage Access API ile birlikte kullanıldığında aşağıdaki tabloda ayrıntılı olarak açıklanan belirli ek özellikler kullanılabilir:

RWS olmadan RWS ile
Depolama alanı erişim isteğini başlatmak için kullanıcı hareketi gerekir.
Erişim izni vermeden önce kullanıcının istenen depolama alanı kaynağını üst düzey bir bağlamda ziyaret etmesini gerektirir
İlk kez kullanıcı istemi atlanabilir
Erişim daha önce verilmişse requestStorageAccess çağrılması gerekmez
İlişkili bir web sitesindeki diğer alanlara otomatik olarak erişim izni verir.
Üst düzey sayfa erişimi için requestStorageAccessFor desteklenir
Storage Access API'yi İlişkili Web Sitesi Grupları olmadan ve İlişkili Web Sitesi Grupları ile kullanma arasındaki farklar

Demo: Çerezleri ayarlama ve bunlara erişme

Aşağıdaki demoda, demonun ilk ekranında kendiniz belirlediğiniz bir çereze demonun ikinci sitesindeki yerleşik bir çerçeveden nasıl erişilebileceği gösterilmektedir:

storage-access-api-demo.glitch.me

Demo için üçüncü taraf çerezlerinin devre dışı bırakıldığı bir tarayıcı gerekir:

  • chrome://flags/#test-third-party-cookie-phaseout işareti ayarlanmış ve tarayıcı yeniden başlatılmış Chrome 118 veya sonraki sürümler.
  • Firefox
  • Safari

Demo: Yerel depolama alanını ayarlama

Aşağıdaki demoda, Storage Access API'yi kullanarak üçüncü taraf bir iFrame'den bölümlenmemiş yayın kanallarına nasıl erişileceği gösterilmektedir:

https://saa-beyond-cookies.glitch.me/

Demo için test-third-party-cookie-phaseout işaretinin etkin olduğu Chrome 125 veya daha yeni bir sürüm gerekir.

Kaynaklar