Hacker DirectoryHacker Directory
Öğrenmeye devam et
ENHTML kaydet ↓

WEB / WEB-11.04

CSP, sandbox ve secure context

Browser policy’nin bağlantı, execution, embedding ve environment sınırlarını ayır.

CORE · RED · BLUE · ARTIFACT · PRACTICE

1. Core · Mekanizma

Hareket olmadan bütün senaryoları oku

İzinli GET

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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

  1. 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
  2. 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
  3. 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
  4. 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

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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

  1. 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
  2. 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
  3. 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
  4. 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

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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
  6. Üç 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ü

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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?

  1. Hayır. Her CSP ihlali otomatik network block oluşturur.
  2. 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"}
  1. Parent’ın child URL izni ile child’ın ancestor izni farklıdır.
  2. 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