WEB / WEB-11.04
CSP, sandbox ve secure context
Browser policy’nin bağlantı, execution, embedding ve environment sınırlarını ayır.
1. Core · Mekanizma
Hareket olmadan bütün senaryoları oku
İzinli GET
- Document policy hazır
Atlas /notes/title için same-origin readonly GET seçer. Enforce connect-src self eşleşir, fakat local gate henüz değerlendirilmemiştir; endpoint’te request yoktur. Bu sahne redirect veya credential kararını çalıştırmaz.
- Browser
- Policy hazır; GET yok
- Notes endpoint
- Request yok
- Local CSP gate
connect-src self/none ve disposition birlikte okundu; normal GET’in gönderilip gönderilmeyeceği burada belirlendi.
- Browser
- CSP allow
- Notes endpoint
- Request yok
- GET endpoint’e ulaştı
Normal readonly GET endpoint’e ulaştı; bu arrival yalnız request receipt’tir, user yetkisi kararı değildir.
- Browser
- CSP allow
- Notes endpoint
- GET alındı; policy pending
- Server kendi gate’ini okur
Sentetik server bu önceden izinli readonly işlemi kabul etti; browser CSP server policy’sinin yerine geçmedi.
- Browser
- CSP allow
- Notes endpoint
- Readonly response hazır
- Response browser’da
Normal response browser’a ulaştı; report-only diagnostic varsa bu ayrı local kayıtta tutulur.
- Browser
- Response alındı; violation yok
- Notes endpoint
- Readonly response hazır
- Sonucu oku
Browser response’u readonly gösterim için kabul etti; burada gerçek report teslimi veya DOM çalışması yoktur.
- Browser
- Readonly sonuç; authz ayrı
- Notes endpoint
- Readonly response hazır
Bağlantı deny
- Document policy hazır
Atlas aynı /notes/title GET’ini seçer; değişen enforce connect-src none listesidir. Henüz local gate değerlendirilmemiştir ve endpoint request almamıştır; ret sonraki browser-local kararda oluşur.
- Browser
- Policy hazır; GET yok
- Notes endpoint
- Request yok
- Local CSP gate
connect-src self/none ve disposition birlikte okundu; normal GET’in gönderilip gönderilmeyeceği burada belirlendi.
- Browser
- CSP deny; gönderim yok
- Notes endpoint
- Request yok
- Diagnostic local
Enforce violation local olarak kaydedildi; endpoint’e herhangi bir normal GET arrival oluşmadı.
- Browser
- Violation kaydı; GET yok
- Notes endpoint
- Request yok
- Deny tamamlandı
Beklenen sonuç network öncesi deny’dır; endpoint state’i bu branch boyunca Request yok olarak kalır.
- Browser
- Deny; server receipt yok
- Notes endpoint
- Request yok
Report-only
- Document policy hazır
Atlas aynı /notes/title GET’ini seçer; connect-src none bu kez report disposition taşır. Sonraki local kontrol violation üretir, ancak bu policy request’i engellemez. Henüz endpoint receipt veya report teslimi yoktur.
- Browser
- Policy hazır; GET yok
- Notes endpoint
- Request yok
- Local CSP gate
connect-src self/none ve disposition birlikte okundu; normal GET’in gönderilip gönderilmeyeceği burada belirlendi.
- Browser
- CSP allow
- Notes endpoint
- Request yok
- GET endpoint’e ulaştı
Normal readonly GET endpoint’e ulaştı; bu arrival yalnız request receipt’tir, user yetkisi kararı değildir.
- Browser
- CSP allow
- Notes endpoint
- GET alındı; policy pending
- Server kendi gate’ini okur
Sentetik server bu önceden izinli readonly işlemi kabul etti; browser CSP server policy’sinin yerine geçmedi.
- Browser
- CSP allow
- Notes endpoint
- Readonly response hazır
- Response browser’da
Normal response browser’a ulaştı; report-only diagnostic varsa bu ayrı local kayıtta tutulur.
- Browser
- Response alındı; violation var
- Notes endpoint
- Readonly response hazır
- Sonucu oku
Report-only violation’a rağmen GET endpoint’e ulaştı ve readonly response browser’a döndü. Local diagnostic, reporting endpoint’e teslim kanıtı değildir; server authorization ve DOM çalışması bu sonuçtan çıkarılmaz.
- Browser
- Readonly sonuç; authz ayrı
- Notes endpoint
- Readonly response hazır
HTTP ancestor
- Ayrı context sorusu
Bu branch sıradan fetch’i değil secure context isteyen bir özelliğin environment önkoşulunu inceler.
- Browser
- HTTPS frame; gate pending
- Notes endpoint
- Request yok
- Creation context oku
HTTPS frame public HTTP parent içinde yer alır; yalnız child URL’sinin scheme’i yeterli kanıt değildir.
- Browser
- Top creation public HTTP
- Notes endpoint
- Request yok
- Context deny
Örnekteki environment secure değildir. API permission kararı verilmez ve endpoint’e request gönderildiği gösterilmez.
- Browser
- Secure context false
- Notes endpoint
- Request yok
- Boundary ayrı kaldı
Origin, sandbox flag’leri ve server policy’si bu context sonucundan bağımsız okunmalıdır.
- Browser
- Context deny; fetch ayrı
- Notes endpoint
- Request yok
ROLLER · STATE · VERİ AKIŞI
Hangi işlem hangi policy’ye bakar?
Atlas Notları document’i kendi script kaynaklarını ve normal bağlantı hedeflerini sınırlar. script-src çalıştırılabilecek script kaynaklarıyla, connect-src script arayüzlerinin bağlantı hedefleriyle ilgilenir. Bir source list’te görünmek API account veya tenant izni vermez. Browser’ın bir URL’ye bağlantı kurmasına izin vermesi ile server’ın o user için notu okumaya izin vermesi iki ayrı karardır; aynı normal request ikisinden de geçmelidir.
frame-src parent’ın hangi child document URL’lerini yükleyebileceğini söyler; frame-ancestors ise yüklenen resource’un hangi ancestor’lar içinde gömülebileceğini söyler. İkinci karar child response’un policy’sidir ve ancestor zincirini değerlendirir. frame-ancestors default-src’e geri düşmez; meta içinde de uygulanmaz. Artifact’te preview host’unu parent’a eklemek, preview response’un parent’ı kabul ettiği sonucunu otomatik üretmez.
Sandbox bir origin eşitliği değildir
iframe sandbox, document’in script, form, navigation ve origin davranışını flag’lerle kısıtlar. Boş token set’i bu örnekte script ve form submission’ını engeller, origin’i opaque yapar. allow-scripts yalnız script kısıtını kaldırır; normal origin’i geri getirmez. allow-same-origin ise ayrı origin flag’ini kaldırır, cross-origin bir document’i parent ile same-origin yapmaz. URL’nin değişmemesi, efektif origin ve yeteneklerin değişmediği anlamına gelmez.
Response’taki CSP sandbox da HTML sandbox kısıtları uygular; CSP sandbox, Report-Only header’da ve meta’da yok sayılır. Birden fazla enforce policy’den en gevşeğini seçmek doğru değildir: her applicable policy kendi kısıtını getirir. Script source policy, sandbox script flag’i ve SOP aynı soruyu cevaplamaz. Bu yüzden embedded preview’a yalnız gerçekten gereken yeteneği açıp kalan flag’leri açıkça okuyabilmek, “sandbox var” etiketinden daha değerlidir.
Secure context hangi çevreyi anlatır?
Secure context güçlü browser özelliklerinin sunulması için bir environment koşuludur. HTTPS ordinary top-level document için temel örnektir; HTTP loopback 127.0.0.0/8 ve ::1 de potentially trustworthy kabul edilir. localhost adları için güvenilir local resolution şartı vardır; file ve vendor scheme davranışını tek bir evrensel URL kuralına sıkıştırma. Güncel HTML, environment’ın top-level creation URL bağlamını, worker’da owner’ı kullanır. HTTP public parent içindeki HTTPS iframe yalnız kendi adresine bakılarak secure sayılamaz.
isSecureContext gerçek environment’ın sonucunu verir; origin serialization veya URL prefix karşılaştırması onun yerine geçmez. Opaque sandbox origin ile secure context birlikte mümkün olduğundan bu iki etiketi birbirine bağlama. Secure olmak user permission, Permissions Policy veya API availability garantisi de değildir. Normal fetch HTTP context’lerde de bulunur. Animasyon context-denied branch’inde yalnız ayrı secure-context gate’ini açıklıyor; sıradan readonly fetch’i HTTPS şartıyla engellendi diye göstermiyor.
2. Red · Güven ve etki
Hareket olmadan bütün senaryoları oku
Report ve enforce
- Aynı readonly işlem
Normal satır enforce disposition ve connectSources self kullanıyor. Request origin Atlas document ile eşleşiyor; requestSent true ve violation false. Bu sonuç yalnız connection source kararına ait.
- Policy tablosu
- self / enforce / sent true
- Boundary review
- Henüz değerlendirilmedi
- İşlem sonucu
- Henüz değerlendirilmedi
- Enforce engeli
Connect-denied satırında none listesi eşleşmiyor. Enforce kararı requestSent false, violation true üretiyor; server’a readonly GET ulaştığı varsayılmıyor.
- Policy tablosu
- self / enforce / sent true
- Boundary review
- none / enforce / sent false
- İşlem sonucu
- Henüz değerlendirilmedi
- Report devamı
Report-only satırı da none ile violation true verir, fakat requestSent true kalır. Diagnostic görülmesini engelleme başarısı diye sunmak, disposition farkını siler.
- Policy tablosu
- self / enforce / sent true
- Boundary review
- none / enforce / sent false
- İşlem sonucu
- none / report / sent true
- Rapor teslimi ayrı
Local diagnostic bir reporting endpoint’e teslim edilmiş rapor değildir. Tablo gerçek HTTP veya browser reporting çalıştırmıyor; dış raporun alınması için ayrıca recipient kanıtı gerekir.
- Policy tablosu
- Local diagnostic ≠ delivered report
- Boundary review
- none / enforce / sent false
- İşlem sonucu
- none / report / sent true
- Yetkiyi ekleme
CSP’nin connection’a izin vermesi server erişim yetkisi vermiyor. CORS, cookie ve object policy ayrı gate’ler; başarılı readonly response hepsinin doğru kurulduğunu kanıtlamıyor.
- Policy tablosu
- Local diagnostic ≠ delivered report
- Boundary review
- Connection policy ≠ server grant
- İşlem sonucu
- none / report / sent true
- Doğru etkileri adlandır
Enforce için local block, report için local violation ile devam kaydediliyor. Bu dar self/none örneğinden tam CSP parser, nonce/hash veya redirect davranışı çıkarılmıyor.
- Policy tablosu
- Local diagnostic ≠ delivered report
- Boundary review
- Connection policy ≠ server grant
- İşlem sonucu
- Disposition-specific outcomes retained
Context flag’leri
- HTTPS görünümü
Atlas HTTPS Document olabilir, ancak http-ancestor satırında top-level context public HTTP’dir ve expectedSecure false olur. Yalnız child URL’yi okumak tüm context kararını vermez.
- Policy tablosu
- HTTPS child / HTTP ancestor / false
- Boundary review
- Henüz değerlendirilmedi
- İşlem sonucu
- Henüz değerlendirilmedi
- Sandbox ayrımı
allow-scripts satırı scriptsAllowed true, formsAllowed false ve originKind opaque verir. Script izni form izni veya tuple origin sağlamaz; flag’lerin etkileri birbirine eklenmez.
- Policy tablosu
- HTTPS child / HTTP ancestor / false
- Boundary review
- Scripts true / forms false / opaque
- İşlem sonucu
- Henüz değerlendirilmedi
- Secure opaque örnek
Opaque-sandbox HTTPS context için expectedSecure true. Secure olmak same-origin kimliği veya permission grant’i değildir; opaque identity’nin güven varsayımı ayrı tutulur.
- Policy tablosu
- HTTPS child / HTTP ancestor / false
- Boundary review
- Scripts true / forms false / opaque
- İşlem sonucu
- Opaque / secure true / no permission grant
- Framing yönünü oku
frame-src parent’tan child URL’ye, frame-ancestors child’dan bütün ancestor zincirine bakar. İki directive farklı response sahibi ve işlem yönü taşır.
- Policy tablosu
- Parent frame-src / child frame-ancestors
- Boundary review
- Scripts true / forms false / opaque
- İşlem sonucu
- Opaque / secure true / no permission grant
- Delivery yerini kontrol et
frame-ancestors meta’da yok sayılır ve default-src fallback’i yoktur. Sandbox da report-only veya meta üzerinden bu örnekte uygulanmaz; policy metninin bulunması uygulanmış flag kanıtı değildir.
- Policy tablosu
- Parent frame-src / child frame-ancestors
- Boundary review
- Policy delivery/disposition required
- İşlem sonucu
- Opaque / secure true / no permission grant
- Üç ayrı karar
Framing, sandbox ve secure context ayrı sonuçlar olarak korunuyor. Bunların hiçbiri server user/object grant’i veya permission UI başarısı olarak raporlanmıyor.
- Policy tablosu
- Parent frame-src / child frame-ancestors
- Boundary review
- Policy delivery/disposition required
- İşlem sonucu
- Framing / flags / secure context separate
VARSAYIM · SINIR · KONTROL
İhlal görünmesi ile request’in durması
Normal ve connect-denied branch’leri aynı readonly endpoint’i kullanır; değişen enforce connect-src listesidir. Denied branch’inde browser local kontrolünde durur, server’a GET arrival gösterilmez. Report-only branch’inde aynı list violation üretir fakat request devam eder. Buradaki diagnostic yalnız inert local state’tir; gerçek reporting endpoint’e gönderildiği iddia edilmez. Bir report kaydı tek başına request’in durduğunu kanıtlamaz; disposition ve uygulanmış policy birlikte okunmalıdır.
API response gelmesi CSP’nin bütün security işini tamamladığını da göstermez. Enforce policy’nin izin verdiği normal code, server’ın object policy’sine yine tabidir. Bu derste yalnız aynı-origin, redirect’siz GET seçiyoruz; CORS, cookie gönderimi ve response exposure başka gate’lerdir. URL host eşleşmesi her CSP source ifadesinin tam algoritması değildir; scheme upgrade, redirect, nonce/hash ve script-specific kurallar daha geniş bağlam ister.
Yanlış boundary etkisini doğru adlandır
Preview’ın URL’si HTTPS diye bütün ancestor riskini veya sandbox kısıtını yok saymak, capability açıklamasını yanlış yapar. Scripts allowed satırı forms allowed satırı değildir; opaque origin’in null gösterimi de trusted preview identity’si değildir. Kısıtların gereğinden fazla kaldırılması browser’daki işlem yüzeyini genişletebilir, fakat hangi veri veya user eylemi etkilenir sorusu document ve application policy’siyle cevaplanır. Burada bozulmuş varsayımı table üzerinden değerlendiririz; bir script payload veya dış hedef akışı çalıştırmayız.
3. Blue · Güvenli geliştirme ve savunma
Hareket olmadan bütün senaryoları oku
Policy kontrolü
- Directive sahibini seç
policyRows browser’ın connection gate kararını, contextRows ise verilen creation context beklentilerini kaydeder. Header/disposition sahibi, local violation ve endpoint receipt farklı gözlem noktalarıdır. normal ve report-only GET’i endpoint’e taşır; connect-denied ve ayrı context sorusu bu akışta endpoint’e ulaşmaz. report-gap yalnız violation verir: disposition, gönderim ve report teslimi belirsiz kalır. Envanter script execution, connection, child URL ve ancestor iznini ayrı gösteriyor. Header hangi Document response’una ait sorusu, incelemeye doğru policy sahibinden başlamamızı sağlıyor.
- İşlem envanteri
- Four operations / explicit document owners
- Policy review
- Henüz değerlendirilmedi
- Regression kanıtı
- Henüz değerlendirilmedi
- Disposition’u kaydet
Normal, connect-denied ve report-only satırlarının sent/violation sonuçları birlikte karşılaştırılıyor. Aynı none source listesi disposition’a göre farklı gönderim sonucu veriyor.
- İşlem envanteri
- Four operations / explicit document owners
- Policy review
- Normal true/false; deny false/true; report true/true
- Regression kanıtı
- Henüz değerlendirilmedi
- Flag sonuçlarını kaydet
Boş sandbox token listesi scripts ve forms’u kapatıyor; allow-scripts yalnız scripts’i, allow-forms yalnız forms’u açıyor. Üç satırda originKind opaque korunuyor.
- İşlem envanteri
- Four operations / explicit document owners
- Policy review
- Normal true/false; deny false/true; report true/true
- Regression kanıtı
- Independent scripts/forms / all opaque
- Context karşılaştırması
Top HTTPS ve loopback true, public HTTP ve HTTP ancestor false. HTTPS opaque sandbox true olabilir; context sonucu origin kind’den ayrı kaydediliyor.
- İşlem envanteri
- Secure context matrix / identity independent
- Policy review
- Normal true/false; deny false/true; report true/true
- Regression kanıtı
- Independent scripts/forms / all opaque
- Katmanları birleştirme
Multiple enforce policies kesişir; biri izin verince diğerinin reddi yok sayılmaz. Server access, browser permission ve rapor teslimi ise bu yerel policy tablosunun dışında kendi kanıtını ister.
- İşlem envanteri
- Secure context matrix / identity independent
- Policy review
- Enforce intersection / separate external evidence
- Regression kanıtı
- Independent scripts/forms / all opaque
- Dar regression sonucu
Karşılaştırma source list, disposition, flag ve context alanlarını ayrı koruyor. Bu sonuç browser parser veya permission UI çalıştı demiyor; hangi policy kararı için hangi kanıtın eksik olduğunu açık tutuyor.
- İşlem envanteri
- Secure context matrix / identity independent
- Policy review
- Enforce intersection / separate external evidence
- Regression kanıtı
- Finite policy known / browser enforcement unmeasured
Rapor boşluğu
- Tek violation kaydı
policyRows browser’ın connection gate kararını, contextRows ise verilen creation context beklentilerini kaydeder. Header/disposition sahibi, local violation ve endpoint receipt farklı gözlem noktalarıdır. normal ve report-only GET’i endpoint’e taşır; connect-denied ve ayrı context sorusu bu akışta endpoint’e ulaşmaz. report-gap yalnız violation verir: disposition, gönderim ve report teslimi belirsiz kalır. İnceleme yalnız violation görüyor; disposition, effective policy ve request receipt kaydı yok. Enforce block ile report-only continuation bu tek gözlemden seçilemiyor.
- İşlem envanteri
- Violation known / disposition missing
- Policy review
- Henüz değerlendirilmedi
- Regression kanıtı
- Henüz değerlendirilmedi
- Normal tabloyu sınırla
PolicyRows beklenen dar sonuçları gösteriyor. Eksik olayın enforce olduğunu varsayıp requestSent false yazmak, normal tabloyu gerçek olay kaydı yerine kullanır.
- İşlem envanteri
- Violation known / disposition missing
- Policy review
- Expected matrix ≠ event evidence
- Regression kanıtı
- Henüz değerlendirilmedi
- Gönderimi açık bırak
Bu kayıtta request’in gönderilip gönderilmediği UNKNOWN. Local diagnostic reporting recipient’ine ulaşma kanıtı da değil; iki belirsizlik ayrı tutuluyor.
- İşlem envanteri
- Violation known / disposition missing
- Policy review
- Expected matrix ≠ event evidence
- Regression kanıtı
- Request sending/report delivery UNKNOWN
- Gerekli policy bağlamı
Document response sahibi, enforce/report disposition ve uygulanmış policy set’i gerekli. Connection kararı için endpoint, framing kararı için parent/ancestor yönü ayrıca belirtilmeli.
- İşlem envanteri
- Needed: owner/disposition/effective policy
- Policy review
- Expected matrix ≠ event evidence
- Regression kanıtı
- Request sending/report delivery UNKNOWN
- Doğru observer’ı seç
Browser enforcement için browser gözlemi, server receipt için server kaydı gerekir. Violation label’ı permission başarısı veya server’ın object grant’i yerine kullanılamaz.
- İşlem envanteri
- Needed: owner/disposition/effective policy
- Policy review
- Browser and server observers separate
- Regression kanıtı
- Request sending/report delivery UNKNOWN
- Sınırlı sonuç bildir
Bilinen violation kaydediliyor; gönderim ve rapor teslimi belirsiz kalıyor. Yeni kanıt geldiğinde normal ve report-only kontrolleri korunarak disposition’a bağlı sonuç karşılaştırılmalı.
- İşlem envanteri
- Needed: owner/disposition/effective policy
- Policy review
- Browser and server observers separate
- Regression kanıtı
- Retain violation / collect scoped receipt evidence
UYGULAMA · GÜVENLİK KONTROLÜ · DOĞRULAMA
Policy’yi işlem envanterine bağla
policyRows browser’ın connection gate kararını, contextRows ise verilen creation context beklentilerini kaydeder. Header/disposition sahibi, local violation ve endpoint receipt farklı gözlem noktalarıdır. normal ve report-only GET’i endpoint’e taşır; connect-denied ve ayrı context sorusu bu akışta endpoint’e ulaşmaz. report-gap yalnız violation verir: disposition, gönderim ve report teslimi belirsiz kalır. Atlas için code source, connection destination, child URL ve embedding ancestor envanterini ayrı tut. Header’ın hangi response’a ait olduğunu, enforce/report disposition’ını ve sandbox flag set’ini kaydet. Normal preview ve readonly request olumlu kontrollerdir; yanlış source değil, seçili policy’nin beklenen deny davranışı karşılaştırılır. CSP input handling, output encoding ve server authorization’ın yerine kurulmaz. Kaynak olarak kullandığımız CSP3 metni Working Draft’tır; yalnız bu örnekteki yerleşik directive anlamlarını anlatıyoruz.
Report-only gözlemini enforce kararına çevirmeden önce gerçek uygulamanın normal ihtiyaçlarını incele; otomatik olarak bütün violation hedeflerini allowlist’e ekleme. Frame izni parent ve child tarafında ayrı doğrulanır; frame-ancestors’ın meta’da yok sayıldığını ve default-src fallback’inin olmadığını kontrol et. Sandbox token’ları görev ihtiyacına göre seçilir ve her relax edilen flag’in gerekçesi açıklanır. Testte sadece marker’ın varlığını değil, scripts/forms/origin sonuçlarını karşılaştır.
Kanıtın browser ve model sınırı
Context tablosu HTTPS, public HTTP ancestor, loopback ve HTTPS içindeki opaque sandbox örneklerini ayırır. Gerçek üründe API feature detection ile isSecureContext birlikte değerlendirilir; permission ve lifecycle hatası başka sebeplerle oluşabilir. Bu fixture’da yalnız verilen context snapshot’ı ve source list kararı hesaplanır; browser’ın CSP parser’ı, sandbox navigation’ı veya permission UI’ı çalışmaz. Server receipt için server kanıtı, policy enforce sonucu için browser kanıtı gerekir; çizimdeki hareket bu bağımsız kanıtları üretmez.
ŞİMDİ VAKAYA UYGULA
Violation kaydı request’in durduğunu kanıtlıyor mu?
Atlas aynı readonly path için self ve none connection policy’lerini karşılaştırıyor. Enforce none isteği durduruyor; report-only none ise violation üretirken isteğin devam etmesine izin veriyor. Preview’ın framing izni, sandbox flag’leri ve secure context kararı bu connection sonucundan ayrı.
Vakadaki browser policy hangi ilişkiyi kontrol ediyor? Response exposure, destination veya framing kararını server’ın object permission kararıyla karıştırmadan açıkla.
Bağlı vaka dosyasını aç ↗ÖRNEĞİ BİRLİKTE OKUYALIM
Atlas browser policy karar tablosu
Bir alan seç; hangi sonucu desteklediğini ve nerede yetersiz kaldığını incele.
Ham kaydı ve alan açıklamalarını oku
{
"profile": {
"documentOrigin": "https://atlas.example.org",
"readOnlyPath": "/notes/title",
"noRedirects": true,
"noActualBrowser": true,
"noActualHTTP": true,
"sourceMatching": "Declared self/none and one explicit HTTPS host; no full CSP parser",
"contextProfile": "Existing ordinary Window snapshots; selected trustworthy URL inputs only"
},
"directions": [
{
"directive": "script-src",
"owner": "Atlas document",
"operation": "script execution source",
"direction": "document -> script source"
},
{
"directive": "connect-src",
"owner": "Atlas document",
"operation": "script connection destination",
"direction": "document -> endpoint"
},
{
"directive": "frame-src",
"owner": "Atlas parent",
"operation": "child document URL",
"direction": "parent -> child"
},
{
"directive": "frame-ancestors",
"owner": "Preview response",
"operation": "allowed embedding ancestors",
"direction": "child <- every ancestor"
}
],
"policyRows": [
{
"case": "normal",
"disposition": "enforce",
"connectSources": [
"self"
],
"requestOrigin": "https://atlas.example.org",
"matched": true,
"requestSent": true,
"violation": false
},
{
"case": "connect-denied",
"disposition": "enforce",
"connectSources": [
"none"
],
"requestOrigin": "https://atlas.example.org",
"matched": false,
"requestSent": false,
"violation": true
},
{
"case": "report-only",
"disposition": "report",
"connectSources": [
"none"
],
"requestOrigin": "https://atlas.example.org",
"matched": false,
"requestSent": true,
"violation": true
}
],
"framing": {
"parentFrameSources": [
"https://preview.example.org"
],
"childFrameAncestors": [
"https://atlas.example.org"
],
"ancestorChain": [
"https://atlas.example.org"
],
"allowedChild": "https://preview.example.org",
"otherChild": "https://catalog.example.org",
"defaultSrcAppliesToFrameAncestors": false,
"frameAncestorsInMetaIgnored": true
},
"sandboxRows": [
{
"tokens": [],
"scriptsAllowed": false,
"formsAllowed": false,
"originKind": "opaque"
},
{
"tokens": [
"allow-scripts"
],
"scriptsAllowed": true,
"formsAllowed": false,
"originKind": "opaque"
},
{
"tokens": [
"allow-forms"
],
"scriptsAllowed": false,
"formsAllowed": true,
"originKind": "opaque"
}
],
"contextRows": [
{
"case": "top-https",
"creationURL": "https://atlas.example.org",
"topLevelCreationURL": "https://atlas.example.org",
"originKind": "tuple",
"expectedSecure": true
},
{
"case": "http-ancestor",
"creationURL": "https://atlas.example.org",
"topLevelCreationURL": "http://catalog.example.org",
"originKind": "tuple",
"expectedSecure": false
},
{
"case": "loopback",
"creationURL": "http://127.0.0.1:4173",
"topLevelCreationURL": "http://127.0.0.1:4173",
"originKind": "tuple",
"expectedSecure": true
},
{
"case": "ordinary-http",
"creationURL": "http://atlas.example.org",
"topLevelCreationURL": "http://atlas.example.org",
"originKind": "tuple",
"expectedSecure": false
},
{
"case": "opaque-sandbox",
"creationURL": "https://preview.example.org",
"topLevelCreationURL": "https://atlas.example.org",
"originKind": "opaque",
"expectedSecure": true
}
],
"delivery": {
"sandboxInReportOnlyIgnored": true,
"sandboxInMetaIgnored": true,
"multipleEnforcePoliciesIntersect": true
},
"boundaries": {
"cspGrantsServerAccess": false,
"sandboxGrantsServerAccess": false,
"secureContextGrantsPermission": false,
"localDiagnosticIsDeliveredReport": false,
"ordinaryFetchRequiresSecureContext": false
}
}- directions
- Directive’i owning document ve işlem yönüyle eşler.
- policyRows
- Aynı-origin GET için self/none ve enforce/report kararı.
- sandboxRows
- Script, form ve opaque origin flag’leri ayrı sonuçlardır.
- contextRows
- Creation context ile origin kind birbirinden bağımsızdır.
Sentetik ordinary Window snapshot’ları ve dar self/none kararlarıdır. Tam CSP parser, permission, document navigation, browser veya HTTP çalıştırmaz.
İki yanlış kanı
frame-src beni kimin embed edeceğini belirler.
frame-src child hedeflerini, resource response’undaki frame-ancestors embedding ancestor’larını sınırlar.
HTTPS adresi her browser yeteneğini açar.
Environment/ancestor bağlamı, sandbox, feature availability ve permission ayrı gate’lerdir; loopback gibi trustworthy istisnalar da vardır.
SIRA SENDE
Bu hikâyeyi sen çöz.
Sonucu tahmin et, kanıtın sınırını bul ve nedenini kendi cümlenle anlat.
Report-only policy’de connect-src none ihlali görülüyor. Read-only request gönderilir mi?
- Hayır. Her CSP ihlali otomatik network block oluşturur.
- Evet. Bu report-only örneğinde requestSent=true.
Gerekçeli cevabı oku
Evet. Bu report-only örneğinde requestSent=true. — Report-only ihlal gözlemi üretir, fakat bu policy request’i engellemez.
frame-src ve frame-ancestors neden aynı izin listesi değildir?
Dersten seçilen artifact alanları; öğretim örneği
- directions[2]
- {"directive":"frame-src","owner":"Atlas parent","operation":"child document URL","direction":"parent -> child"}
- directions[3]
- {"directive":"frame-ancestors","owner":"Preview response","operation":"allowed embedding ancestors","direction":"child <- every ancestor"}
- Parent’ın child URL izni ile child’ın ancestor izni farklıdır.
- Parent frame-src, child’ın ancestor policy’sini geçersiz kılar.
Gerekçeli cevabı oku
Parent’ın child URL izni ile child’ın ancestor izni farklıdır. — frame-src parent’ın hangi child’ı yükleyebileceğini; frame-ancestors child’ın hangi ancestor’lar altında embed edilebileceğini sınırlar. İkisi birlikte değerlendirilebilir.
HTTP ancestor altındaki HTTPS iframe için secureContext=false olabilir; HTTP loopback için true olabilir. Neden yalnız https string’i yeterli değildir?
Gerekçeli cevabı oku
Secure context değerlendirmesi document’ın oluşturulma koşullarını, ancestor zincirini ve trustworthiness kurallarını kullanır. Scheme tek başına bütün sonucu vermez; loopback bazı koşullarda trustworthy kabul edilir. Secure context bazı browser feature’larının kullanılabilirliğini etkiler, fakat application user/action izni vermez. CSP ve sandbox da server authorization yerine geçmez.
□ Scheme değerlendirmesine ancestor context’ini dahil ettim.
□ Browser feature koşulunu server izni saymadım.
Uygulama konsolunu aç · request / response / browser
Request, URL, cookie ve DOM örneklerini ayrıca aç
Kaynaklar ve kapsam
- W3C Content Security Policy Level 3 — Working Draft 16 September 2026§3.1–3.3 policy delivery · §6.1.2 connect-src · §6.1.5 frame-src · §6.1.10 script-src · §6.3.2 sandbox · §6.4.2 frame-ancestors · §8.1 multiple policies
- WHATWG HTML — sandboxing§7.1.5 Sandboxing: origin/forms/scripts flags; parse a sandboxing directive
- W3C Secure Contexts§1.1–1.3 documents and owners · §2.2.2–2.2.3 feature detection and HTML integration · §3.1–3.2 potentially trustworthy origin/URL; localhost resolution qualification
- WHATWG HTML — environments and secure contexts§8.1.3.1 environment top-level creation URL · §8.1.3.5 secure context algorithm; worker owner; worklet · isSecureContext getter
- MDN Secure contextsWhen is a context considered secure? top-level/framed documents and workers · Potentially trustworthy URLs/origins; Feature detection