Reporting API ile web uygulamanızı izleme

Güvenlik ihlallerini, kullanımdan kaldırılan API çağrılarını ve daha fazlasını izlemek için Reporting API'yi kullanın.

Maud Nalpas
Maud Nalpas

Bazı hatalar yalnızca üretimde ortaya çıkar. Gerçek kullanıcılar, gerçek ağlar ve gerçek cihazlar oyunu değiştirdiğinden bunları yerel olarak veya geliştirme sırasında görmezsiniz. Reporting API, sitenizdeki güvenlik ihlalleri veya desteği sonlandırılmış ve yakında sonlandırılacak API çağrıları gibi bu hatalardan bazılarını yakalamaya yardımcı olur ve bunları, belirttiğiniz bir uç noktaya iletir.

HTTP üst bilgileri aracılığıyla izlemek istediklerinizi bildirmenize olanak tanır ve tarayıcı tarafından çalıştırılır.

Reporting API'yi kurmak, kullanıcılar bu tür hatalarla karşılaştığında içiniz rahat olur ve bu hataları giderebilirsiniz.

Bu yayında, API'nin neler yapabileceği ve nasıl kullanılacağı ele alınmaktadır. Haydi başlayalım.

Demo ve kod

Reporting API'nin Chrome 96 ve daha yeni bir sürümden (Ekim 2021 itibarıyla Chrome Beta veya Canary) itibaren nasıl çalıştığını görün.

Genel bakış

Rapor oluşturmadan geliştirici tarafından rapor erişimine kadar aşağıdaki adımları özetleyen şema
Raporların oluşturulma ve gönderilmesi.

site.example sitenizin bir İçerik Güvenliği Politikası ve Doküman Politikası olduğunu varsayalım. Bunların ne işe yaradığını bilmiyor musunuz? Olsun, yine de bu örneği anlayabileceksiniz.

Bu politikaların ne zaman ihlal edildiğini öğrenmek ve kod tabanınızın kullanıyor olabileceği API'leri yakından takip etmek istemeniz nedeniyle sitenizi izlemeye karar verirsiniz.

Bunu yapmak için bir Reporting-Endpoints üst bilgisi yapılandırır ve gerektiğinde politikalarınızdaki report-to yönergesi aracılığıyla bu uç nokta adlarını eşlersiniz.

Reporting-Endpoints: main-endpoint="https://reports.example/main", default="https://reports.example/default"
# Content-Security-Policy violations and Document-Policy violations
# will be sent to main-endpoint
Content-Security-Policy: script-src 'self'; object-src 'none'; report-to main-endpoint;
Document-Policy: document-write=?0; report-to=main-endpoint;
# Deprecation reports don't need an explicit endpoint because
# these reports are always sent to the `default` endpoint

Öngörülemeyen bir durum gerçekleşir ve bazı kullanıcılarınız için bu politikalar ihlal edilir.

İhlal örnekleri

index.html

<script src="script.js"></script>
<!-- CSP VIOLATION: Try to load a script that's forbidden as per the Content-Security-Policy -->
<script src="https://example.com/script.js"></script>

script.js, index.html tarafından yüklendi

// DOCUMENT-POLICY VIOLATION: Attempt to use document.write despite the document policy
try {
  document.write('<h1>hi</h1>');
} catch (e) {
  console.log(e);
}
// DEPRECATION: Call a deprecated API
const webkitStorageInfo = window.webkitStorageInfo;

Tarayıcı, bu sorunları yakalayan bir CSP ihlal raporu, Belge Politikası ihlal raporu ve Kullanımdan Kaldırma raporu oluşturur.

Kısa bir gecikmeyle (en fazla bir dakika) tarayıcı, raporları bu ihlal türü için yapılandırılmış uç noktaya gönderir. Raporlar bant dışında tarayıcının kendisi tarafından (sunucunuz veya siteniz tarafından değil) gönderilir.

Uç noktalar bu raporları alır.

Artık bu uç noktalarla ilgili raporlara erişebilir ve sorunları izleyebilirsiniz. Kullanıcılarınızı etkileyen sorunu gidermeye hazırsınız.

Örnek rapor

{
  "age": 2,
  "body": {
    "blockedURL": "https://site2.example/script.js",
    "disposition": "enforce",
    "documentURL": "https://site.example",
    "effectiveDirective": "script-src-elem",
    "originalPolicy": "script-src 'self'; object-src 'none'; report-to main-endpoint;",
    "referrer": "https://site.example",
    "sample": "",
    "statusCode": 200
  },
  "type": "csp-violation",
  "url": "https://site.example",
  "user_agent": "Mozilla/5.0... Chrome/92.0.4504.0"
}

Kullanım alanları ve rapor türleri

Reporting API, sitenizde gerçekleşen birçok farklı türde ilginç uyarıyı veya sorunu izlemenize yardımcı olacak şekilde yapılandırılabilir:

Rapor türü Raporun oluşturulacağı durum örneği
İGP ihlali (yalnızca 3. Seviye) Sayfalarınızdan birinde Content-Security-Policy (İGP) ayarladınız ancak sayfa İGP'nizin izin vermediği bir komut dosyası yüklemeye çalışıyor.
COOP ihlali Bir sayfada bir Cross-Origin-Opener-Policy ayarladınız, ancak çapraz kaynak penceresi doğrudan dokümanla etkileşime geçmeye çalışıyor.
COEP ihlali Bir sayfada Cross-Origin-Embedder-Policy ayarladınız ancak doküman, kaynaklar arası dokümanlar tarafından yüklenmeye dahil edilmeyen çapraz kaynak iframe içeriyor.
Doküman Politikası ihlali Sayfada, document.write kullanımını engelleyen bir doküman politikası var, ancak bir komut dosyası document.write işlevini çağırmaya çalışıyor.
İzin politikasının ihlali Sayfada, mikrofon kullanımını engelleyen bir izin politikası ve ses girişi isteyen bir komut dosyası bulunuyor.
Kullanımdan kaldırma uyarısı Sayfa, kullanımdan kaldırılmış veya desteği sonlandırılacak bir API kullanıyor; API'yi doğrudan veya üst düzey bir üçüncü taraf komut dosyası aracılığıyla çağırıyor.
Müdahale Sayfa; güvenlik, performans veya kullanıcı deneyimi nedeniyle tarayıcının dikkate almadığı bir işlemi gerçekleştirmeye çalışıyor. Chrome'daki örnek: Sayfa, yavaş ağlarda document.write kullanımı veya kullanıcının henüz etkileşim kurmadığı çapraz kaynak çerçevesinde navigator.vibrate çağrısı yapıyor.
Çarpışma Siteniz açıkken tarayıcı kilitlenir.

Raporlar

Raporlar nasıl görünür?

Tarayıcı, yapılandırdığınız uç noktaya raporlar gönderir. Aşağıdaki gibi görünen istekler gönderir:

POST
Content-Type: application/reports+json

Bu isteklerin yükü raporlardan oluşan bir listedir.

Örnek rapor listesi

[
  {
    "age": 420,
    "body": {
      "columnNumber": 12,
      "disposition": "enforce",
      "lineNumber": 11,
      "message": "Document policy violation: document-write is not allowed in this document.",
      "policyId": "document-write",
      "sourceFile": "https://site.example/script.js"
    },
    "type": "document-policy-violation",
    "url": "https://site.example/",
    "user_agent": "Mozilla/5.0... Chrome/92.0.4504.0"
  },
  {
    "age": 510,
    "body": {
      "blockedURL": "https://site.example/img.jpg",
      "destination": "image",
      "disposition": "enforce",
      "type": "corp"
    },
    "type": "coep",
    "url": "https://dummy.example/",
    "user_agent": "Mozilla/5.0... Chrome/92.0.4504.0"
  }
]

Bu raporların her birinde bulabileceğiniz veriler şunlardır:

Alan Açıklama
age Raporun zaman damgası ile geçerli saat arasındaki milisaniye sayısı.
body JSON dizesinde serileştirilmiş olarak bulunan gerçek rapor verileri. Raporun body içinde yer alan alanlar raporun type değeri tarafından belirlenir. ⚠️ Farklı türdeki raporların farklı gövdeleri vardır. Her bir rapor türünün tam gövdesini görmek için demo raporlama uç noktasına göz atın ve örnek raporlar oluşturma talimatlarını uygulayın.
type Bir rapor türü (ör. csp-violation veya coep).
url Raporun oluşturulduğu dokümanın veya çalışanın adresi. Kullanıcı adı, şifre ve parça gibi hassas veriler bu URL'den çıkarılır.
user_agent Raporun oluşturulduğu isteğin User-Agent başlığı.

Kimlik bilgisi raporları

Raporu oluşturan sayfayla aynı kaynağa sahip raporlama uç noktaları, raporları içeren isteklerde kimlik bilgilerini (çerezler) alır.

Kimlik bilgileri, rapor hakkında faydalı ek bilgiler sağlayabilir. Örneğin, belirli bir kullanıcının hesabının sürekli olarak hata tetikleyip tetiklemediği veya diğer sayfalarda gerçekleştirilen belirli bir işlem dizisinin bu sayfada bir raporu tetikleyip tetiklemediği.

Tarayıcı raporları ne zaman ve nasıl gönderir?

Raporlar sitenizden bant dışı olarak teslim edilir: Tarayıcı, yapılandırılmış uç noktalara ne zaman gönderileceğini kontrol eder. Ayrıca, tarayıcının ne zaman rapor göndereceğini kontrol etmenin bir yolu yoktur; raporları yakalar, sıraya alır ve uygun bir zamanda otomatik olarak gönderir.

Bu, Reporting API'yi kullanırken performansla ilgili çok az endişeniz olduğu veya hiç olmadığı anlamına gelir.

Raporların toplu olarak gönderme şansını artırmak için raporlar bir dakika kadar gecikmeli gönderilir. Bu, kullanıcının ağ bağlantısına saygı duyacak şekilde bant genişliğinden tasarruf etmenizi sağlar. Bu da özellikle mobil cihazlarda önemlidir. Tarayıcı, daha yüksek öncelikli işleri işlemekle meşgulse ya da kullanıcı o sırada yavaş ve/veya kalabalık bir ağda bulunuyorsa yayını geciktirebilir.

Üçüncü taraf ve birinci taraf sorunları

Sayfanızda meydana gelen ihlaller veya kullanımdan kaldırmalar nedeniyle oluşturulan raporlar, yapılandırdığınız uç noktalara gönderilir. Bu, sayfanızda çalıştırılan üçüncü taraf komut dosyalarının gerçekleştirdiği ihlalleri içerir.

Sayfanıza yerleştirilmiş bir çapraz kaynak iframe'de meydana gelen ihlaller veya kullanımdan kaldırmalar uç noktalarınıza raporlanmaz (en azından varsayılan olarak raporlanmaz). Bir iframe kendi raporlamasını oluşturabilir ve hatta sitenizin (birinci tarafın raporlama hizmetine) raporlama yapabilir. Ancak bu, çerçevelenen siteye bağlıdır. Ayrıca çoğu raporun, yalnızca bir sayfanın politikasının ihlal edilmesi durumunda oluşturulduğunu ve sayfanızın politikaları ile iframe politikalarının farklı olduğunu unutmayın.

Kullanımdan kaldırmaları içeren örnek

Sayfanızda Reporting-Endpoints başlığı ayarlandıysa: Sayfanızda çalışan üçüncü taraf komut dosyaları tarafından çağrılan kullanımdan kaldırılmış API, uç noktanıza bildirilir. Sayfanıza yerleştirilmiş bir iframe tarafından çağrılan, kullanımdan kaldırılmış API&#39;ler uç noktanıza bildirilmez. Bir kullanımdan kaldırma raporu yalnızca iframe sunucusu Raporlama Uç Noktaları&#39;nı ayarlamışsa oluşturulur ve bu rapor iframe&#39;in sunucusunun ayarladığı uç noktaya gönderilir.
Sayfanızda Reporting-Endpoints başlığı ayarlandıysa: Sayfanızda çalışan üçüncü taraf komut dosyaları tarafından çağrılan kullanımdan kaldırılmış API, uç noktanıza bildirilir. Sayfanıza yerleştirilmiş bir iframe tarafından çağrılan, kullanımdan kaldırılmış API'ler uç noktanıza bildirilmez. Bir kullanımdan kaldırma raporu yalnızca iframe sunucusu Raporlama Uç Noktaları'nı ayarlamışsa oluşturulur ve bu rapor iframe'in sunucusunun ayarladığı uç noktaya gönderilir.

Tarayıcı desteği

Aşağıdaki tabloda Reporting-Endpoints başlığıyla Reporting API v1 için tarayıcı desteği özetlenmiştir. Reporting API v0 (Report-To başlığı) için tarayıcı desteği, bir rapor türü haricinde aynıdır: Network Error Logging, yeni Reporting API'de desteklenmez. Ayrıntılar için taşıma rehberini okuyun.

Rapor türü Chrome Chrome iOS Safari Firefox Edge
CSP ihlali (yalnızca 3. Seviye)* ✔ Evet ✔ Evet ✔ Evet ✘ Hayır ✔ Evet
Ağ Hatası Günlük Kaydı ✘ Hayır ✘ Hayır ✘ Hayır ✘ Hayır ✘ Hayır
COOP/COEP ihlali ✔ Evet ✘ Hayır ✔ Evet ✘ Hayır ✔ Evet
Diğer tüm türler: Doküman Politikası ihlali, Kullanımdan Kaldırma, Müdahale, Kilitlenme ✔ Evet ✘ Hayır ✘ Hayır ✘ Hayır ✔ Evet

Bu tabloda yalnızca yeni Reporting-Endpoints başlığıyla report-to için sunulan destek özetlenmektedir. Reporting-Endpoints hizmetine geçmek istiyorsanız CSP raporlama taşıma ipuçlarını okuyun.

Reporting API'yi kullanma

Raporların nereye gönderilmesi gerektiğine karar verme

Bunun için iki seçeneğiniz bulunmaktadır:

  • Mevcut bir rapor toplayıcı hizmetine rapor gönderme.
  • Raporları, kendi oluşturduğunuz ve yönettiğiniz bir rapor toplayıcıya gönderin.

1. Seçenek: Mevcut bir rapor toplayıcı hizmeti kullanma

Rapor toplayıcı hizmetlerine bazı örnekler:

Bildiğiniz başka çözümler varsa lütfen sorun açıp bize bildirin, biz de bu yayını güncelleyelim!

Rapor toplayıcı seçerken fiyatlandırmanın yanı sıra aşağıdaki noktaları da göz önünde bulundurun: 🧐

  • Bu toplayıcı tüm rapor türlerini destekliyor mu? Örneğin, tüm raporlama uç noktası çözümleri COOP/COEP raporlarını desteklemez.
  • Uygulamanızın URL'lerinden herhangi birini üçüncü taraf rapor toplayıcıyla rahatça paylaşabiliyor musunuz? Tarayıcı bu URL'lerdeki hassas bilgileri kaldırsa bile hassas bilgiler bu şekilde sızdırılabilir. Bu, uygulamanız için çok riskli görünüyorsa kendi raporlama uç noktanızı çalıştırın.

2. Seçenek: Kendi rapor toplayıcınızı oluşturma ve çalıştırma

Rapor alan kendi sunucunuzu oluşturmak o kadar da kolay değildir. Başlamak için hafif ortak plazmanı çatallayabilirsiniz. Express ile geliştirilmiştir ve raporları alıp görüntüleyebilir.

  1. Ortak rapor toplayıcı'ya gidin.

  2. Projeyi düzenlenebilir hale getirmek için Düzenlenecek remiks'i tıklayın.

  3. Artık bir klonunuz var! Kendi amaçlarınız için özelleştirebilirsiniz.

Standart şablonu kullanmıyorsanız ve sıfırdan kendi sunucunuzu oluşturuyorsanız:

  • Tarayıcı tarafından uç noktanıza gönderilen rapor isteklerini tanımak için application/reports+json değerine sahip POST isteklerini kontrol edin.Content-Type
  • Uç noktanız, sitenizden farklı bir kaynakta bulunuyorsa CORS ön kontrol isteklerini desteklediğinden emin olun.

3. Seçenek: 1. ve 2. Seçeneği birleştirin

Belirli bir sağlayıcının bazı rapor türleriyle ilgilenmesine izin verirken diğerleri için şirket içinde bir çözüme sahip olmak isteyebilirsiniz.

Bu durumda, birden çok uç noktayı aşağıdaki gibi ayarlayın:

Reporting-Endpoints: endpoint-1="https://reports-collector.example", endpoint-2="https://my-custom-endpoint.example"

Reporting-Endpoints üstbilgisini yapılandırın

Bir Reporting-Endpoints yanıt başlığı ayarlayın. Değeri, bir veya virgülle ayrılmış anahtar/değer çiftleri dizisi olmalıdır:

Reporting-Endpoints: main-endpoint="https://reports.example/main", default="https://reports.example/default"

Eski Reporting API'den yeni Reporting API'ye geçiş yapıyorsanız Reporting-Endpoints ve Report-To değerlerinin ikisini birden ayarlamanız mantıklı olabilir. Ayrıntılı bilgi için taşıma rehberini inceleyebilirsiniz. Özellikle Content-Security-Policy ihlalleriyle ilgili raporlamayı yalnızca report-uri yönergesi üzerinden kullanıyorsanız İGP raporlaması için taşıma adımlarını kontrol edin.

Reporting-Endpoints: main-endpoint="https://reports.example/main", default="https://reports.example/default"
Report-To: ...

Anahtarlar (uç nokta adları)

Her anahtar, main-endpoint veya endpoint-1 gibi istediğiniz bir ad olabilir. Farklı rapor türleri için farklı adlandırılmış uç noktalar ayarlamaya karar verebilirsiniz (örneğin, my-coop-endpoint, my-csp-endpoint). Bu sayede raporları türlerine göre farklı uç noktalara yönlendirebilirsiniz.

Müdahale, kullanımdan kaldırma ve/veya kilitlenme raporları almak istiyorsanız default adlı bir uç nokta ayarlayın.

Reporting-Endpoints üstbilgisinde default uç noktası tanımlanmıyorsa bu tür raporlar (oluşturulsalar bile) gönderilmez.

Değerler (URL'ler)

Her değer, raporların gönderileceği ve sizin seçeceğiniz bir URL'dir. Burada ayarlanacak URL, 1. Adım'da ne karar verdiğinize bağlıdır.

Uç nokta URL'si:

Örnekler

Reporting-Endpoints: my-coop-endpoint="https://reports.example/coop", my-csp-endpoint="https://reports.example/csp", default="https://reports.example/default"

Daha sonra, adlandırılmış her uç noktayı uygun politikada kullanabilir veya tüm politikalarda tek bir uç nokta kullanabilirsiniz.

Başlık nereye ayarlansın?

Bu yayında ele alınan yeni Reporting API'de raporlar belgeler kapsamına alınır. Bu, belirli bir kaynak için site.example/page1 ve site.example/page2 gibi farklı belgelerin farklı uç noktalara rapor gönderebileceği anlamına gelir.

Sitenizin herhangi bir sayfasında gerçekleşen ihlaller veya kullanımdan kaldırma işlemleriyle ilgili rapor almak için başlığı tüm yanıtlarda bir ara yazılım olarak ayarlayın.

Aşağıda, Express biçiminde bir örnek verilmiştir:

const REPORTING_ENDPOINT_BASE = 'https://report.example';
const REPORTING_ENDPOINT_MAIN = `${REPORTING_ENDPOINT_BASE}/main`;
const REPORTING_ENDPOINT_DEFAULT = `${REPORTING_ENDPOINT_BASE}/default`;

app.use(function (request, response, next) {
  // Set up the Reporting API
  response.set(
    'Reporting-Endpoints',
    `main-endpoint="${REPORTING_ENDPOINT_MAIN}", default="${REPORTING_ENDPOINT_DEFAULT}"`,
  );
  next();
});

Politikalarınızı düzenleme

Reporting-Endpoints başlığı yapılandırıldığına göre, ihlal raporu almak istediğiniz her politika başlığına report-to yönergesi ekleyin. report-to değeri, yapılandırdığınız adlandırılmış uç noktalardan biri olmalıdır.

Birden çok politika için birden çok uç noktayı veya politikalar genelinde farklı uç noktalar kullanabilirsiniz.

Her politika için report-to değeri, yapılandırdığınız adlandırılmış uç noktalardan biri olmalıdır.

Kullanımdan kaldırma, müdahale ve kilitlenme raporları için report-to gerekli değildir. Bu raporlar herhangi bir politikaya bağlı değildir. Bir default uç noktası ayarlandığı ve bu default uç noktasına gönderildiği sürece oluşturulurlar.

Örnek

# Content-Security-Policy violations and Document-Policy violations
# will be sent to main-endpoint
Content-Security-Policy: script-src 'self'; object-src 'none'; report-to main-endpoint;
Document-Policy: document-write=?0;report-to=main-endpoint;
# Deprecation reports don't need an explicit endpoint because
# these reports are always sent to the default endpoint

Örnek kod

Tüm bunları bir bağlam içinde görmek için aşağıda, Express kullanan ve bu makalede açıklanan tüm parçaları bir araya getiren bir Düğüm sunucusu örneği verilmiştir. Bu sayfada, birkaç farklı rapor türü için raporlamanın nasıl yapılandırılacağı gösterilmektedir.

Raporlama kurulumunuzda hata ayıklama

Bilinçli olarak rapor oluşturma

Reporting API'yi ayarlarken raporların beklendiği gibi oluşturulup oluşturulmadığını ve gönderilip gönderilmediğini kontrol etmek için muhtemelen politikalarınızı kasıtlı olarak ihlal etmeniz gerekecektir. Politikaları ihlal eden ve her türden rapor oluşturacak başka kötü davranışlarda bulunan örnek kodu görmek için demoya göz atın.

Zamandan kazanın

Raporlar gecikmeli olarak (yaklaşık bir dakika) gönderilebilir. Bu, hata ayıklama sırasında uzun bir süredir. ELIGIBLE. Neyse ki Chrome'da hata ayıklarken raporları oluşturulur oluşturulmaz almak için --short-reporting-delay işaretini kullanabilirsiniz.

Bu işareti etkinleştirmek için terminalinizde şu komutu çalıştırın:

YOUR_PATH/TO/EXECUTABLE/Chrome --short-reporting-delay

Geliştirici Araçları'nı kullanma

Gönderilen veya gönderilecek raporları görmek için Chrome'da Geliştirici Araçları'nı kullanın.

Ekim 2021 itibarıyla bu özellik deneyseldir. Bu özelliği kullanmak için şu adımları uygulayın:

  1. Chrome 96 ve daha yeni bir sürümünü kullanın (tarayıcınızda chrome://version yazarak kontrol edin)
  2. Chrome'un URL çubuğuna chrome://flags/#enable-experimental-web-platform-features yazın veya yapıştırın.
  3. Etkin'i tıklayın.
  4. Tarayıcınızı yeniden başlatın.
  5. Chrome Geliştirici Araçları'nı açın.
  6. Chrome Geliştirici Araçları'nda Ayarlar'ı açın. Denemeler'in altında Uygulama panelinde Raporlama API'sını Etkinleştir'i tıklayın.
  7. Geliştirici Araçları'nı yeniden yükleyin.
  8. Sayfanızı yeniden yükleyin. Geliştirici Araçları'nın açık olduğu sayfada oluşturulan raporlar, Chrome Geliştirici Araçları'nın Uygulama panelinde, Raporlama API'si altında listelenir.
Raporları listeleyen Geliştirici Araçları ekran görüntüsü
Chrome Geliştirici Araçları, sayfanızda oluşturulan raporları ve bunların durumlarını gösterir.

Rapor durumu

Durum sütunu, raporun başarıyla gönderilip gönderilmediğini gösterir.

Durum Açıklama
Success Tarayıcı raporu gönderdi ve uç nokta, bir başarı koduyla yanıt verdi (200 veya başka bir başarılı yanıt kodu 2xx).
Pending Tarayıcı şu anda raporu göndermeye çalışıyor.
Queued Rapor oluşturulmuş ve tarayıcı şu anda raporu göndermeye çalışmıyor. Rapor, aşağıdaki iki durumdan birinde Queued olarak görünür:
  • Rapor yenidir ve tarayıcı, göndermeyi denemeden önce daha fazla rapor gelip gelmediğini görmek için beklemektedir.
  • Rapor yeni değil. Tarayıcı, bu raporu göndermeyi denediği halde başarısız oldu ve tekrar denemeden önce bekliyor.
MarkedForRemoval Bir süre yeniden denedikten sonra (Queued), tarayıcı raporu gönderme girişimini durdurdu ve kısa süre içinde raporu gönderilecek raporlar listesinden kaldıracak.

Raporlar, başarıyla gönderilip gönderilmemesinden bağımsız olarak bir süre sonra kaldırılır.

Sorun giderme

Raporlar uç noktanıza beklendiği gibi oluşturulmuyor veya gönderilmiyor mu? Aşağıda bu sorunu gidermek için birkaç ipucu verilmiştir.

Raporlar oluşturulmaz

Geliştirici Araçları'nda gösterilen raporlar doğru şekilde oluşturulmuştur. Beklediğiniz rapor bu listede gösterilmiyorsa:

  • Politikalarınızda report-to olup olmadığını kontrol edin. Bu yanlış yapılandırılırsa rapor oluşturulmaz. Bu sorunu düzeltmek için Politikalarınızı düzenleme bölümüne gidin. Bu sorunu gidermenin diğer bir yolu da Chrome'daki Geliştirici Araçları konsolunu kontrol etmektir: Konsolda beklediğiniz ihlalle ilgili bir hata görüntülenirse politikanızın doğru yapılandırılmış olduğu anlamına gelir.
  • Bu listede yalnızca Geliştirici Araçları'nın açık olduğu doküman için oluşturulan raporların görüneceğini unutmayın. Örnek: site1.example siteniz bir politikayı ihlal eden site2.example iframe'i yerleştirdiği için bir rapor oluşturursa bu rapor, yalnızca iframe'i kendi penceresinde açıp bu pencere için Geliştirici Araçları'nı açarsanız Geliştirici Araçları'nda gösterilir.

Raporlar oluşturulur ancak gönderilmiyor veya alınmamaktadır

Geliştirici Araçları'nda bir raporu görebiliyor ancak uç noktanız raporu alamıyorsa ne olur?

  • Kısa gecikmeler kullandığınızdan emin olun. Bir raporu görememenizin nedeni, raporun henüz gönderilmemiş olmasıdır!
  • Reporting-Endpoints üst bilgi yapılandırmanızı kontrol edin. Sorun varsa doğru şekilde oluşturulmuş bir rapor gönderilmez. Bu durumda, Geliştirici Araçları'nda raporun durumu Queued olarak kalır (Pending öğesine atlayabilir ve ardından bir yayınlama denemesi yapıldığında hızlı bir şekilde Queued değerine geri dönebilir). Buna neden olabilecek bazı yaygın hatalar:

  • Uç nokta kullanılıyor ancak yapılandırılmadı. Örnek:

Hatalı kodlama
 Document-Policy: document-write=?0;report-to=endpoint-1;
 Reporting-Endpoints: default="https://reports.example/default"

Belge Politikası ihlal raporları endpoint-1 adresine gönderilmelidir ancak bu uç nokta adı Reporting-Endpoints'da yapılandırılmamış.

  • default uç noktası eksik. Desteği sonlandırma ve müdahale raporları gibi bazı rapor türleri yalnızca default adlı uç noktaya gönderilecek. Daha fazla bilgi için Reporting-Endpoints başlığını yapılandırma bölümüne bakın.

  • Politika üstbilgileri söz diziminizde eksik tırnak işaretleri gibi sorunları arayın. Ayrıntıları inceleyin

  • Uç noktanızın gelen istekleri işleyebildiğinden emin olun.

    • Uç noktanızın, CORS ön kontrol isteklerini desteklediğinden emin olun. Aksi takdirde raporları alamaz.

    • Uç noktanızın davranışını test edin. Bunun için raporları manuel olarak oluşturmak yerine, tarayıcının göndereceği görünümdeki uç nokta isteklerinize gönderim yaparak tarayıcı emülasyonu yapabilirsiniz. Aşağıdaki komutu çalıştırın:

    curl --header "Content-Type: application/reports+json" \
      --request POST \
      --data '[{"age":420,"body":{"columnNumber":12,"disposition":"enforce","lineNumber":11,"message":"Document policy violation: document-write is not allowed in this document.","policyId":"document-write","sourceFile":"https://dummy.example/script.js"},"type":"document-policy-violation","url":"https://dummy.example/","user_agent":"xxx"},{"age":510,"body":{"blockedURL":"https://dummy.example/img.jpg","destination":"image","disposition":"enforce","type":"corp"},"type":"coep","url":"https://dummy.example/","user_agent":"xxx"}]' \
      YOUR_ENDPOINT
    

    Uç noktanız, bir başarı kodu (200 veya başka bir başarılı yanıt kodu 2xx) ile yanıt vermelidir. Yanıt vermiyorsa yapılandırmasıyla ilgili bir sorun vardır.

Yalnızca Rapor

-Report-Only politika başlıkları ve Reporting-Endpoints birlikte çalışır.

Reporting-Endpoints ürününde yapılandırılan ve Content-Security-Policy, Cross-Origin-Embedder-Policy ile Cross-Origin-Opener-Policy arasındaki report-to alanında belirtilen uç noktalar, bu politikalar ihlal edildiğinde rapor alır.

Reporting-Endpoints içinde yapılandırılan uç noktalar, Content-Security-Policy-Report-Only, Cross-Origin-Embedder-Policy-Report-Only ve Cross-Origin-Opener-Policy-Report-Only öğelerinin report-to alanında da belirtilebilir. Bu politikalar ihlal edildiğinde bu yayıncılara da rapor gönderilir.

Raporlar her iki durumda da gönderilse de -Report-Only başlıkları bu politikaları zorunlu kılmaz: hiçbir şey bozulmaz veya gerçekten engellenmez, ancak nelerin bozulabileceğine veya nelerin engelleneceğine dair raporlar alırsınız.

ReportingObserver

ReportingObserver JavaScript API, istemci taraflı uyarıları gözlemlemenize yardımcı olabilir.

ReportingObserver ve Reporting-Endpoints üst bilgisi aynı görünen raporlar oluşturur, ancak bunlar biraz farklı kullanım alanları sağlar.

Aşağıdaki durumlarda ReportingObserver kullanın:

  • Yalnızca kullanımdan kaldırma işlemlerini ve/veya tarayıcı müdahalelerini izlemek istiyorsunuz. ReportingObserver, kullanımdan kaldırma ve tarayıcı müdahaleleri gibi istemci tarafı uyarıları gösterir ancak Reporting-Endpoints'in aksine, CSP veya COOP/COEP ihlalleri gibi diğer rapor türlerini yakalamaz.
  • Bu ihlallere gerçek zamanlı olarak müdahale etmeniz gerekir. ReportingObserver, bir ihlal etkinliğine geri arama eklemeyi mümkün kılar.
  • Özel geri çağırma yöntemini kullanarak hata ayıklamaya yardımcı olması için bir rapora ek bilgiler eklemek istiyorsunuz.

Diğer bir fark da ReportingObserver öğesinin yalnızca istemci tarafında yapılandırılmasıdır. Sunucu tarafı üst bilgileri üzerinde denetiminiz olmasa ve Reporting-Endpoints değeri ayarlanamıyorsa bile bunu kullanabilirsiniz.

Daha fazla bilgi

Nine Koepfer / @enka80 tarafından Unsplash'ta yayınlanan hero resim düzenlendi. Bu makaledeki inceleme ve önerilerinden dolayı Ian Clelland, Eiji Kitamura ve Milica Mihajlija'ya çok teşekkür ederiz.