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.
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](https://developer.chrome.com/static/docs/capabilities/web-apis/reporting-api/image/diagram-summarizing-step-7115c265c2e02.png?authuser=5&hl=tr)
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'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.](https://developer.chrome.com/static/docs/capabilities/web-apis/reporting-api/image/if-reporting-endpoints-h-c4facaee3ba26.png?authuser=5&hl=tr)
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.
Ortak rapor toplayıcı'ya gidin.
Projeyi düzenlenebilir hale getirmek için Düzenlenecek remiks'i tıklayın.
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 sahipPOST
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:
- Eğik çizgiyle (
/
) başlamalıdır. Göreli yollar desteklenmez. - Çapraz kaynak olabilir ancak bu durumda kimlik bilgileri raporlarla birlikte gönderilmez.
Ö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.
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:
- Chrome 96 ve daha yeni bir sürümünü kullanın (tarayıcınızda
chrome://version
yazarak kontrol edin) - Chrome'un URL çubuğuna
chrome://flags/#enable-experimental-web-platform-features
yazın veya yapıştırın. - Etkin'i tıklayın.
- Tarayıcınızı yeniden başlatın.
- Chrome Geliştirici Araçları'nı açın.
- 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.
- Geliştirici Araçları'nı yeniden yükleyin.
- 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ü](https://developer.chrome.com/static/docs/capabilities/web-apis/reporting-api/image/screenshot-devtools-list-adb1aaa437b6b.png?authuser=5&hl=tr)
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:
|
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 edensite2.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 durumuQueued
olarak kalır (Pending
öğesine atlayabilir ve ardından bir yayınlama denemesi yapıldığında hızlı bir şekildeQueued
değerine geri dönebilir). Buna neden olabilecek bazı yaygın hatalar:Uç nokta kullanılıyor ancak yapılandırılmadı. Örnek:
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ızcadefault
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 kodu2xx
) ile yanıt vermelidir. Yanıt vermiyorsa yapılandırmasıyla ilgili bir sorun vardır.
İlgili bildirim mekanizmaları
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 ancakReporting-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
- Reporting API v0'dan v1'e geçiş kılavuzu
- ReportingObserver
- Spesifikasyon: eski Reporting API (v0)
- Spesifikasyon: yeni Reporting API (v1)
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.