Reporting API ile web uygulamanızı izleme

Güvenlik ihlallerini, desteği sonlandı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. Bu etkinlikleri yerel olarak veya gerçek kullanıcılar, gerçek ağlar ve gerçek cihazlar ve oyunu değiştireceksiniz. Reporting API bu hatalardan bazılarını yakalamaya yardımcı olur: veya desteği sonlandırılmış ve yakında sonlandırılacak API gibi durumlarda arama yapar ve bunları izlediğiniz bir uç noktaya iletir. belirtiliyor.

HTTP üst bilgileri aracılığıyla neleri izlemek istediğinizi belirtmenizi sağlar ve tarayıcı tarafından işletilir.

Reporting API'yi ayarladığınızda, kullanıcılar bir sorun yaşadığında bilgi edinmiş olursunuz ve onları nasıl düzeltebilirsiniz?

Bu yayında, bu API'nin neler yapabileceği ve nasıl kullanılacağı açıklanmaktadır. Haydi başlayalım.

Demo ve kod

Reporting API'nin işleyiş şeklini Chrome 96 ve daha yeni sürümler (Chrome (Ekim 2021 itibarıyla) Beta veya Canary.

Genel Bakış

Rapor oluşturma işleminden geliştirici tarafından rapor erişimine kadar aşağıdaki adımları özetleyen şema
Raporların oluşturulma ve gönderilme şekli.

site.example sitenizin İçerik Güvenliği Politikası ve Doküman Politikası olduğunu varsayalım. Bunların ne işe yaradığını bilmiyor musunuz? Sorun değil, anlayabildiğimi umuyorum.

Sitenizi, bu politikaların ne zaman ihlal edildiğini öğrenmek için izlemeye karar verirsiniz. kod tabanınızın kullanıyor olabileceği desteği sonlandırılan veya yakında desteği sonlandırılacak API'lere dikkat etmeniz önerilir.

Bunun için bir Reporting-Endpoints üstbilgisi yapılandırır ve bu uç noktayı eşlersiniz adlarını report-to yönergesi aracılığıyla kullanabilirsiniz.

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 durumlar olur ve bu politikalar, yardımcı olur.

Örnek ihlaller

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, yükleyen: index.html

// 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ı bir İGP ihlal raporu, Doküman-Politika ihlali raporu ve desteğin sonlandırılmasını oluşturur bir rapor oluşturmanız gerekir.

Tarayıcı, bir dakika kadar kısa bir gecikmeyle raporları bu ihlal türü için yapılandırılmış uç noktadır. Raporlar, bant dışı (sunucunuz veya siteniz tarafından değil).

Uç noktalar bu raporları alır.

Artık bu uç noktalarla ilgili raporlara erişebilir ve hataları takip edebilirsiniz. Kullanıcılarınızı etkileyen sorunu gidermeye başlamak için 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, birçok ilginç uyarı veya sorunu izlemenize yardımcı olacak şekilde yapılandırılabilir. en az ne kadar geçtiğine dikkat edin:

Rapor türü Bir raporun oluşturulacağı durum örneği
İGP ihlali (yalnızca 3. Düzey) Sayfalarınızdan birinde Content-Security-Policy (İGP) ayarladınız ama sayfa, İGP'niz tarafından izin verilmeyen bir komut dosyası yüklemeye çalışıyor.
COOP ihlali Bir sayfada Cross-Origin-Opener-Policy ayarladınız ancak kaynaklar arası pencere, dokümanla doğrudan etkileşim kurmaya çalışıyor.
COEP ihlali Bir sayfada Cross-Origin-Embedder-Policy ayarladınız ancak doküman, kaynaklar arası dokümanlar tarafından yüklenmeyi kabul etmeyen bir ç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, desteği sonlandırılmış veya artık kaldırılacak bir API kullanıyordur; veya üst düzey bir üçüncü taraf komut dosyası aracılığıyla çağrıda bulunur.
Müdahale Sayfa, güvenlik, performans veya kullanıcı deneyimi nedeniyle tarayıcının dikkate almamaya karar verdiği bir şey yapmaya çalışıyor. Chrome'daki örnek: Sayfa yavaş ağlarda document.write kullanıyor veya kullanıcının henüz etkileşimde bulunmadığı bir çapraz kaynak çerçevesinde navigator.vibrate çağrısı yapıyor.
Kaza Siteniz açıkken tarayıcı kilitlenir.

Raporlar

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

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

POST
Content-Type: application/reports+json

Bu isteklerin yükü raporlar listesidir.

Ö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 aşağıda açıklanmıştır:

Alan Açıklama
age Raporun zaman damgası ile geçerli zaman arasındaki milisaniye sayısı.
body JSON dizesi olarak serileştirilmiş gerçek rapor verileri. Bir raporun body öğesinde yer alan alanlar, raporun type parametresiyle belirlenir. ⚠️ Farklı türlerdeki raporların farklı gövdeleri vardır. Her 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ı izleyin.
type Bir rapor türü (örneğin, csp-violation veya coep).
url Raporun oluşturulduğu belgenin 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 bilgisili raporlar

Raporu oluşturan sayfayla aynı kaynağa sahip raporlama uç noktaları kimlik bilgilerini alır (çerezler) tanımlamasına olanak tanır.

Yeterlilik belgeleri, rapor hakkında faydalı ek bilgiler sağlayabilir; şunun için: Örneğin, belirli bir kullanıcı hesabının sürekli olarak hata tetikleyip tetiklemediği veya belirli bir sıralamanın oranında işlem, bu sayfada bir raporu tetikliyor.

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

Raporlar, sitenizden bant dışında sunulur: Tarayıcı, ne zaman yapılandırılmış uç noktalara gönderilirler. Ayrıca ne zaman ne zaman tarayıcı raporlar gönderir; yakalar, sıraya sokar ve e-postaları otomatik olarak zaman alabilir.

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

Raporları toplu olarak gönderme olasılığını artırmak için raporlar bir dakikaya kadar gecikmeli gönderilir. Bu, özellikle de kullanıcının ağ bağlantısına saygılı bir şekilde, bant genişliğinden önemli hale geldi. Tarayıcı, daha yüksek öncelikli işlemeyle meşgul olduğunda da teslimi geciktirebilir. veya kullanıcı o sırada yavaş ve/veya sıkışık bir ağdaysa kullanılabilir.

Üçüncü taraf ve birinci taraf sorunları

Sayfanızda gerçekleşen ihlaller veya desteği sonlandırma işlemleri nedeniyle oluşturulan raporlar gönderilir uç noktalara gönderir. Buna üçüncü taraf komut dosyaları tarafından yapılan ihlaller dahildir yardımcı olur.

Sayfanıza yerleştirilmiş kaynaklar arası iframe'de gerçekleşen ihlaller veya desteği sonlandırmalar uç noktalarınıza raporlanmaz (en azından varsayılan olarak raporlanmaz). Bir iframe, kendi kendini raporlama hizmetine ve hatta sitenizin (birinci tarafın) raporlama hizmetine raporlama işlevini yerine getirmeniz gerekir; ama bu kadar bunu da kullanabilirsiniz. Ayrıca çoğu raporun yalnızca sayfanın politikası ihlal edildiğinde oluşturulduğunu unutmayın. ve sayfanızın politikaları ile iframe politikalarının farklı olduğunu unutmayın.

Desteği sonlandırmayla ilgili ö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 raporlanır. Sayfanıza yerleştirilmiş bir iframe tarafından çağrılan ve desteği sonlandırılmış API, uç noktanıza bildirilmez. Kullanımdan kaldırma raporu yalnızca iframe sunucusu Raporlama Uç Noktaları&#39;nı ayarlamışsa oluşturulur ve bu rapor iframe 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 raporlanır. Sayfanıza yerleştirilmiş bir iframe tarafından çağrılan ve desteği sonlandırılmış API, uç noktanıza bildirilmez. Kullanımdan kaldırma raporu yalnızca iframe sunucusu Raporlama Uç Noktaları'nı ayarlamışsa oluşturulur ve bu rapor iframe sunucusunun ayarladığı uç noktaya gönderilir.

Tarayıcı desteği

Aşağıdaki tabloda Reporting API v1 için tarayıcı desteği özetlenmiştir. Reporting-Endpoints üstbilgisi. Reporting API v0 (Report-To üstbilgisi) için tarayıcı desteği aynı, bir rapor türü hariç: Ağ Hatası Günlüğü, yeni Reporting API'de desteklenmemektedir. Ayrıntılar için taşıma rehberini okuyun.

Rapor türü Chrome Chrome iOS Safari Firefox Edge
İGP ihlali (yalnızca 3. düzey)* ✔ 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: Belge 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 desteği özetlenmektedir. Reporting-Endpoints hizmetine geçmek istiyorsanız İGP raporlarını taşımayla ilgili ipuçlarını okuyun.

Reporting API'yi kullanma

Raporların nereye gönderileceğine karar verme

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

  • Raporları mevcut bir rapor toplayıcı hizmetine gönderin.
  • Raporları, kendi oluşturduğunuz ve işlettiğiniz bir rapor toplayıcıya gönderin.

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

Rapor toplayıcı hizmetlerine bazı örnekler:

Başka çözümler biliyorsanız bize bildirmek için bir sorun açın, bu yayını güncelleriz!

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ı destekler.
  • Uygulamanızın URL'lerinden herhangi birini üçüncü taraf rapor toplayıcıyla rahatça paylaşabiliyor musunuz? Tarayıcı bu URL'lerden hassas bilgileri çıkarsa bile hassas bilgiler bu şekilde sızdırılabilir. Bu işlem, kendi raporlama uç noktanızı çalıştırın.

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

Rapor alan kendi sunucunuzu oluşturmak çok basit değildir. Başlamak için bize çatallanır, hafif ortak metin. Express ile oluşturulmuştur ve raporları alıp görüntüleyebilir.

  1. Ortak rapor toplayıcıya gidin.

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

  3. Artık klonunuz var! Kendi amaçlarınıza göre özelleştirebilirsiniz.

Ortak metni kullanmıyorsanız ve kendi sunucunuzu sıfırdan oluşturuyorsanız:

  • Raporların tanınması için Content-Type değeri application/reports+json olan POST isteklerini kontrol edin isteklerin uç noktanıza gönderilmesine olanak tanır.
  • Uç noktanız sitenizden farklı bir kaynakta çalışıyorsa CORS ön kontrol isteklerini desteklediğinden emin olun.
ziyaret edin.

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

Belirli bir sağlayıcının bazı rapor türleriyle ilgilenmesine izin vermek isteyebilirsiniz, ancak bunu yaparken şirket içinde de bir çözüm üretmeyi başardık.

Bu durumda, birden fazla 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 başlığını yapılandırma

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

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 ikisini de ayarlayın. Taşıma rehberinde ayrıntılı bilgi bulabilirsiniz. Özellikle de raporlama sistemini kullanıyorsanız Content-Security-Policy ihlali yalnızca report-uri yönergesiyle ihlal edilmişse İ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 tuş, main-endpoint veya endpoint-1 gibi istediğiniz bir ad olabilir. Farklı raporlar için farklı adlandırılmış uç noktalar ayarlamaya karar verebilirsiniz türler (örneğin, my-coop-endpoint, my-csp-endpoint). Böylece, raporları, türlerine bağlı olarak farklı uç noktalara yönlendirebilir.

Müdahale, kullanımdan kaldırma ve/veya çökme almayı istiyorsanız default adlı bir uç nokta ayarlayın.

Reporting-Endpoints üstbilgisi hiçbir default uç noktası tanımlamıyorsa bu türdeki raporlar gönderilmez (yine de bu tür raporlar oluşturulur).

Değerler (URL'ler)

Her değer, raporların gönderileceği, seçtiğiniz bir URL'dir. URL 1. Adım'da belirlediğiniz karara 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"

Ardından, adlandırılmış her uç noktayı uygun politikada veya tek bir Tüm politikalarda tek bir uç nokta.

Üstbilgi nereye ayarlanır?

Yeni Reporting API'de, bu kılavuzda ele alınan post- raporlar, dokümanlar kapsamında değerlendirilir. Bu, tek bir veri türü için kaynak, farklı dokümanlar, örneğin site.example/page1 ve site.example/page2, farklı uç noktalara rapor gönderebilir.

Hesabınızın herhangi bir sayfasındaki ihlaller veya desteği sonlandırmalarla ilgili rapor almak için kullanıyorsanız, üstbilgiyi tüm yanıtlarda ara katman yazılımı olarak ayarlayın.

Aşağıda Express'ten 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 üstbilgisi yapılandırıldığına göre artık bir report-to ekleyin. ihlalini almak istediğiniz her bir politika başlığına yönerge raporlar. report-to değeri, ayarladığınız adlandırılmış uç noktalardan biri olmalıdır yapılandırıldı.

Birden çok politika için çoklu uç noktayı veya farklı ve uç noktalarda kod yazmaktır.

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 için report-to gerekli değildir raporlar. Bu raporlar herhangi bir politikaya bağlı değildir. Oluşturulması koşuluyla bir default uç noktası ayarlanır ve bu default uç noktasına gönderilir.

Ö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ı bağlam içinde görmek için aşağıda, Express kullanan bir Düğüm sunucusu örneği gösterilmektedir ve bu makalede ele alınan tüm parçaları bir araya getirir. Bu projede Raporlamayı birkaç farklı rapor türü için yapılandırın ve sonuçları görüntüleyin.

Raporlama ayarlarınızdaki hataları ayıklama

Raporları bilinçli olarak oluşturma

Reporting API'yi kurarken büyük olasılıkla sorunları kasıtlı olarak ihlal etmeniz gerekir. politikalarınızı inceleyerek raporların beklendiği gibi oluşturulup gönderilmediğini kontrol edin. Politikaları ihlal eden ve her tür raporu oluşturmak için demoya göz atın.

Zamandan kazanın

Raporlar yaklaşık bir dakika, yani uzun bir gecikmeyle gönderilebilir. dikkat edin. ↗ Neyse ki, Chrome'da hata ayıklama sırasında bayrağı kullanabilirsiniz. Raporları oluşturuldukları anda almak için --short-reporting-delay.

Bu işareti açmak için terminalinizde şu komutu çalıştırın:

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

Geliştirici Araçları'nı kullanma

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

Ekim 2021 itibarıyla bu özellik deneme aşamasındadır. Kullanmak için aşağıdaki adımları izleyin:

  1. Chrome 96 ve daha yeni sürümlerini kullanın (tarayıcınıza 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 bölümünde, Uygulama paneline gidin.
  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 sayfa tarafından oluşturulan raporlar "Chrome Geliştirici Araçları" Raporlama API'si altındaki Uygulama panelinde görünür.
ziyaret edin.
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örüntüler.

Rapor durumu

Durum sütunu, bir 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 (200 veya başka bir başarılı yanıt kodu 2xx) yanıt verdi.
Pending Tarayıcı şu anda raporu göndermeyi deniyor.
Queued Rapor oluşturuldu ve tarayıcı şu anda raporu göndermeye çalışmıyor. Aşağıdaki iki durumdan birinde rapor Queued olarak görünür:
  • Rapor yenidir ve tarayıcı, söz konusu raporu göndermeye çalışmadan önce başka raporların da ulaşıp ulaşmadığını görmek için beklemektedir.
  • Rapor yeni değildir; tarayıcı bu raporu göndermeyi zaten denedi, başarısız oldu ve yeniden denemeden önce bekliyor.
MarkedForRemoval Tarayıcı, bir süre yeniden denedikten sonra (Queued) raporu göndermeyi durdurdu ve kısa süre içinde raporu gönderilecek raporlar listesinden kaldıracak.

Raporlar, başarıyla gönderilip gönderilmediklerinden 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örünmüyorsa:

  • Politikalarınızda report-to bölümünü kontrol edin. Bu yapılandırma yanlışsa oluşturulmaz. Aşağıdakileri yapmak için Politikalarınızı düzenleme bölümüne gidin. bu sorunu düzelt. 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ünüyorsa bu, politikanızın büyük olasılıkla yapılandırdığınızdan emin olun.
  • Yalnızca Geliştirici Araçları'nın açık olduğu doküman için oluşturulan raporların, görünür. Örnek: site1.example siteniz bir iFrame site2.example yerleştirirse ve dolayısıyla rapor oluşturursa bu rapor, Geliştirici Araçları'nda yalnızca iframe'i kendi penceresinde açın ve bu pencere için Geliştirici Araçları'nı açın.

Raporlar oluşturuluyor ancak gönderilmiyor veya alınmıyor

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

  • Kısa gecikmelere dikkat edin. Bir raporu görememenizin nedeni, henüz gönderilmedi!
  • Reporting-Endpoints üstbilgisi yapılandırmanızı kontrol edin. Konuyla ilgili bir sorun varsa bu durumu değeri gönderilmez. Geliştirici Araçları'nda raporun durumu Queued (Pending noktasına atlayabilir ve ardından teslimat girişimi olduğunda hızlı bir şekilde Queued konumuna geri dönebilir) unutmayın. Bu duruma neden olabilecek bazı yaygın hatalar şunlardır:

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

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

Belge-Politika ihlali raporlarının endpoint-1 adresine gönderilmesi gerekiyor ancak bu uç nokta adı şurada yapılandırılmamış: Reporting-Endpoints.

  • default uç noktası eksik. Desteğin sonlandırılması ve müdahale gibi bazı rapor türleri yalnızca default adlı uç noktaya gönderilir. Daha fazla bilgi için Raporlama Uç Noktaları başlığını yapılandırma bölümüne bakın.

  • Politika başlıklarının söz diziminde, tırnak işareti eksikliği 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. Bunu yapmak için uç nokta isteklerinize görünür göndererek tarayıcı emülasyonu yapabilirsiniz. bir uyarı oluşturacağız. 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ı koduyla (200 veya başka bir başarı yanıt kodu 2xx) yanıt vermelidir. Eşleşmezse yapılandırmasıyla ilgili bir sorun var.

Yalnızca Rapor

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

Reporting-Endpoints içinde yapılandırılan ve report-to alanında belirtilen uç noktalar Content-Security-Policy, Cross-Origin-Embedder-Policy ve Cross-Origin-Opener-Policy, bu politikalar ihlal edildiğinde rapor alacak.

Reporting-Endpoints içinde yapılandırılan uç noktalar, report-to alanı Content-Security-Policy-Report-Only, Cross-Origin-Embedder-Policy-Report-Only ve Cross-Origin-Opener-Policy-Report-Only. Ayrıca, bu politikalar ihlal edildiğinde de bildirim alırlar.

Raporlar her iki durumda da gönderilirken, -Report-Only başlıkları politika: hiçbir şey bozulmaz ya da engellenmez, ancak bu nelerin bozulacağı veya engelleneceği ile ilgili raporlar.

ReportingObserver

ReportingObserver JavaScript API size yardımcı olabilir ancak istemci taraflı uyarıları görebilirsiniz.

ReportingObserver ve Reporting-Endpoints üstbilgisi, aşağıdakilerin durumunu gösteren raporlar oluşturur: aynı görünür ancak biraz farklı kullanım alanları sağlar.

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

  • Yalnızca desteği sonlandırmaları ve/veya tarayıcı müdahalelerini izlemek istiyorsanız. ReportingObserver, kullanımdan kaldırma gibi istemci tarafı uyarıları gösterir. tarayıcı müdahaleleridir, ancak Reporting-Endpoints'in aksine CSP veya COOP/COEP ihlalleri gibi diğer türden raporları yakalamanız gerekir.
  • Bu ihlallere anlık olarak yanıt vermeniz gerekir. ReportingObserver yapar bir ihlal etkinliğine geri çağırma eklemek mümkündür.
  • Hata ayıklamaya yardımcı olması için rapora ek bilgiler eklemek özel geri arama aracılığıyla.

Diğer bir fark da ReportingObserver ürününün yalnızca istemci tarafında yapılandırılmış olmasıdır: sunucu tarafı üstbilgiler üzerinde denetim sahibi olmasanız ve Reporting-Endpoints ayarla.

Daha fazla bilgi

Nine Koepfer / @enka80'in hero resmi Unsplash, düzenlendi. Bu makaleyle ilgili yorumları ve önerileri için Ian Clelland, Eiji Kitamura ve Milica Mihajlija'ya teşekkür ederiz.