WEB / WEB-09.01
Proxy rolleri ve forwarded context
Proxy’nin kimin adına seçildiğini, message’da hangi alanı değiştirdiğini ve forwarded context’i hangi provenance ile taşıdığını ayır.
1. Core · Mekanizma
Hareket olmadan bütün senaryoları oku
Owned chain
- Başlangıç context’i
Client GET /notes için hazırdır. Atlas edge ve proxy henüz bu request’i almadı; application dış client veya scheme bilgisini kabul etmiş değildir. Sonuç ancak message ulaştıktan ve yerel provenance kontrolü tamamlandıktan sonra oluşur.
- Client / local peer
- Normal GET /notes hazır; external context untrusted
- Owned edge
- Owned edge idle; own observations ready
- Owned proxy
- Owned proxy idle; edge gate not evaluated
- Application
- Application idle; derived context unused
- Request edge’e ulaştı
Browser’ın HTTP message’ı Atlas edge’e ulaştı; dışarıdan gelen forwarded context doğrulanmış bilgi olarak kabul edilmedi.
- Client / local peer
- Normal GET /notes hazır; external context untrusted
- Owned edge
- Request received; external context untrusted pending
- Owned proxy
- Owned proxy idle; edge gate not evaluated
- Application
- Application idle; derived context unused
- Yeni context kuruldu
Atlas edge doğruladığı authority ve gözlediği scheme ile alanları kurar; client node 192.0.2.10’dur, kullanıcı authentication sonucu değildir.
- Client / local peer
- Normal GET /notes hazır; external context untrusted
- Owned edge
- External context discarded; first rebuilt; for=192.0.2.10; proto=https
- Owned proxy
- Owned proxy idle; edge gate not evaluated
- Application
- Application idle; derived context unused
- Yeni request alındı
Edge’in yeniden oluşturduğu message reverse proxy’ye ulaştı; local peer ve topology değerlendirmesi henüz tamamlanmadı.
- Client / local peer
- Normal GET /notes hazır; external context untrusted
- Owned edge
- External context discarded; first rebuilt; for=192.0.2.10; proto=https
- Owned proxy
- Edge message received; provenance gate pending
- Application
- Application idle; derived context unused
- Proxy hop’u eklendi
Edge izin verilen peer’dir ve channel bütünlüğü korunmuştur; proxy, gelen peer context’ini listenin en sağına ekler.
- Client / local peer
- Normal GET /notes hazır; external context untrusted
- Owned edge
- External context discarded; first rebuilt; for=192.0.2.10; proto=https
- Owned proxy
- Edge trusted; second element appended; for=198.51.100.20
- Application
- Application idle; derived context unused
- Forwarded message alındı
İki element taşıyan message application’a ulaştı; message’ı almak, içindeki context’in güvenilirliğini kabul etmek değildir.
- Client / local peer
- Normal GET /notes hazır; external context untrusted
- Owned edge
- External context discarded; first rebuilt; for=192.0.2.10; proto=https
- Owned proxy
- Edge trusted; second element appended; for=198.51.100.20
- Application
- Message received; context acceptance pending
- Application context kararı
Doğrudan peer, transport bütünlüğü, topology ve edge’in yeniden kurduğu alanlar uygun olduğu için context kabul edilir. Kullanıcı izni ayrı bir kontroldür.
- Client / local peer
- Normal GET /notes hazır; external context untrusted
- Owned edge
- External context discarded; first rebuilt; for=192.0.2.10; proto=https
- Owned proxy
- Edge trusted; second element appended; for=198.51.100.20
- Application
- Context accepted; client=192.0.2.10; userAuth=false; resourceAuth=false
Privacy alias
- Başlangıç context’i
Client GET /notes için hazırdır; bu dalda edge kendi request’e özgü _atlasOnce alias’ını kullanacaktır. Alias henüz application’a ulaşmadı. Context kabul edilse bile kalıcı kullanıcı kimliği veya resource izni üretilmez.
- Client / local peer
- Normal GET /notes hazır; external context untrusted
- Owned edge
- Owned edge idle; own observations ready
- Owned proxy
- Owned proxy idle; edge gate not evaluated
- Application
- Application idle; derived context unused
- Request edge’e ulaştı
Browser’ın HTTP message’ı Atlas edge’e ulaştı; dışarıdan gelen forwarded context doğrulanmış bilgi olarak kabul edilmedi.
- Client / local peer
- Normal GET /notes hazır; external context untrusted
- Owned edge
- Request received; external context untrusted pending
- Owned proxy
- Owned proxy idle; edge gate not evaluated
- Application
- Application idle; derived context unused
- Yeni context kuruldu
Atlas edge doğruladığı authority ve gözlediği scheme ile alanları kurar; client node için _atlasOnce alias’ı kullanılır, bu kullanıcı authentication sonucu değildir.
- Client / local peer
- Normal GET /notes hazır; external context untrusted
- Owned edge
- External context discarded; first rebuilt; for=_atlasOnce; proto=https
- Owned proxy
- Owned proxy idle; edge gate not evaluated
- Application
- Application idle; derived context unused
- Yeni request alındı
Edge’in yeniden oluşturduğu message reverse proxy’ye ulaştı; local peer ve topology değerlendirmesi henüz tamamlanmadı.
- Client / local peer
- Normal GET /notes hazır; external context untrusted
- Owned edge
- External context discarded; first rebuilt; for=_atlasOnce; proto=https
- Owned proxy
- Edge message received; provenance gate pending
- Application
- Application idle; derived context unused
- Proxy hop’u eklendi
Edge izin verilen peer’dir ve channel bütünlüğü korunmuştur; proxy, gelen peer context’ini listenin en sağına ekler.
- Client / local peer
- Normal GET /notes hazır; external context untrusted
- Owned edge
- External context discarded; first rebuilt; for=_atlasOnce; proto=https
- Owned proxy
- Edge trusted; second element appended; for=198.51.100.20
- Application
- Application idle; derived context unused
- Forwarded message alındı
İki element taşıyan message application’a ulaştı; message’ı almak, içindeki context’in güvenilirliğini kabul etmek değildir.
- Client / local peer
- Normal GET /notes hazır; external context untrusted
- Owned edge
- External context discarded; first rebuilt; for=_atlasOnce; proto=https
- Owned proxy
- Edge trusted; second element appended; for=198.51.100.20
- Application
- Message received; context acceptance pending
- Application context kararı
Doğrudan peer, transport bütünlüğü, topology ve edge’in yeniden kurduğu alanlar uygun olduğu için context kabul edilir. Kullanıcı izni ayrı bir kontroldür.
- Client / local peer
- Normal GET /notes hazır; external context untrusted
- Owned edge
- External context discarded; first rebuilt; for=_atlasOnce; proto=https
- Owned proxy
- Edge trusted; second element appended; for=198.51.100.20
- Application
- Context accepted; client=_atlasOnce; userAuth=false; resourceAuth=false
Peer onaylı değil
- Başlangıç context’i
Onaylanmamış local peer normal GET /notes message’ını application’a göndermek üzeredir. Edge ve proxy üzerinden kurulmuş bir provenance zinciri yoktur; application henüz message almadı veya derived context kararı vermedi.
- Client / local peer
- Normal GET /notes hazır; external context untrusted
- Owned edge
- Owned edge idle; own observations ready
- Owned proxy
- Owned proxy idle; edge gate not evaluated
- Application
- Application idle; derived context unused
- Message application’da
Farklı bir local peer application’a typed message ulaştırır. Alan byte’ları gösterilmez; doğrudan peer’in kim olduğu ayrı bir girdidir.
- Client / local peer
- Normal GET /notes hazır; external context untrusted
- Owned edge
- Owned edge idle; own observations ready
- Owned proxy
- Owned proxy idle; edge gate not evaluated
- Application
- Message received; immediate peer unapproved-local-peer
- Peer kontrolü başarısız
approvedPeer=false ve approvedTopology=false olduğundan bu context kullanılmaz. Bir alanın parse edilmiş olması onu güvenilir yapmaz.
- Client / local peer
- Normal GET /notes hazır; external context untrusted
- Owned edge
- Owned edge idle; own observations ready
- Owned proxy
- Owned proxy idle; edge gate not evaluated
- Application
- Context accepted=false; derived client/scheme absent
- Connection bilgisi ayrı
Application doğrudan peer bilgisini ayrı tutar; dış scheme veya client identity türetmez. Resource authorization sonucu bu sahnede verilmez.
- Client / local peer
- Normal GET /notes hazır; external context untrusted
- Owned edge
- Owned edge idle; own observations ready
- Owned proxy
- Owned proxy idle; edge gate not evaluated
- Application
- Direct peer retained; userAuth=false; resourceAuth=false
ROLLER · STATE · VERİ AKIŞI
Intermediary aynı programda iki rol kurar
HTTP intermediary bir connection’da request alan server, sonraki connection’da request gönderen client olabilir. Atlas browser’dan GET /notes istediğinde CDN veya reverse proxy request’i application’a iletebilir, cache’ten yanıtlayabilir ya da policy gereği durdurabilir. “Araya girdi” demek, request’in nasıl yönlendirildiğini veya TLS plaintext’ini kimin görebildiğini açıklamaz. Connection sınırı ile HTTP message sınırını ayrı düşün.
Request origin yönüne (inbound), response browser yönüne (outbound) ilerler; connection’lar önceden açık olabilir ve yeniden kullanılabilir. RFC’de upstream/downstream, message’ın akışına göre tanımlanır; reverse-proxy configuration’ında upstream diye adlandırılan sabit hedefle aynı şey değildir. Aynı upstream connection’daki request’leri aynı kullanıcıya ait sayma: intermediary birçok client’ın request’lerini aynı connection pool’da birleştirebilir. Örnekteki okuma request’i bu ayrımı gösterir. Application’ın doğrudan bağlandığı peer, kullanıcının istediği public authority ve proxy’nin yeniden oluşturduğu context ayrı alanlardır.
Forward proxy client tarafından seçilir
Forward proxy, client’ın configuration veya policy yoluyla seçtiği intermediary’dir. Client hangi origin resource’u istediğini bilir; proxy o hedefe erişime aracılık eder. Normal HTTP forwarding’de absolute target bilgisi kullanılır. HTTPS için CONNECT ile tunnel kurulduğunda proxy sonraki byte’ları TLS’yi terminate etmeden taşıyabilir. Tunnel kurulmuş olması, proxy’nin içindeki HTTP body’yi okuyabildiğini göstermez.
CONNECT target, origin request authority ve proxy’nin kendi authentication context’i farklıdır. Proxy’ye giriş yapmak, origin resource’una erişim izni vermez. Rol tablosunda client’ın seçtiği forwarder ile şifreli byte’ları içeriğini görmeden taşıyan tunnel bu yüzden ayrıdır. Tunnel’da TLS peer’leri browser ve origin olarak kalabilir; inspection için farklı bir architecture gerekir. Tablo bu rolleri karşılaştırır, bir CONNECT alışverişini çalıştırmaz.
Reverse proxy service tarafında seçilir
Reverse proxy, client’a origin service adına yanıt veren gateway’dir. Atlas kullanıcısı notes.example.org ister; request’in app.example.org upstream’ine gideceğini service configuration belirler. Load balancing, caching veya routing bu yerleşimde bulunabilir; reverse proxy olmak için hepsinin bulunması gerekmez. CDN de reverse-proxy rolü oynayabilir. CDN veya proxy etiketi, tek bir TLS endpoint ya da tek bir güven kararı olduğunu göstermez.
Reverse proxy, public authority’yi izin verilen bir mapping ile upstream’e taşıyabilir veya upstream için başka bir authority kullanabilir. Bu gateway davranışını client’ın seçtiği forward proxy’nin target koruma kurallarıyla aynı sayma. Örnekte public authority notes.example.org olarak kalırken application’ın doğrudan bağlandığı peer proxy.example.org’dur. Application route seçerken ve link üretirken hangi ismi kullandığını bilmelidir.
Transparent adı plaintext erişimini kanıtlamaz
Güncel HTTP semantics’te interception proxy, client onu seçmeden network flow’un yönlendirildiği intermediary’dir; transparent sözcüğü de sıkça bu anlamda kullanılır. Eski RFC2616 ise transparent proxy’yi, gerekli proxy işlemleri dışında message’ı değiştirmeyen proxy olarak tanımlıyordu. Aynı belgedeki semantically transparent cache de response semantics’ini korur. Bu tarihsel tanımlar güncel interception tanımının yerine geçmez. Transparent derken hangi anlamın kullanıldığını belirt; interception rolü de TLS termination’ı kendiliğinden kanıtlamaz.
TLS inspection kullanılan bir architecture’da browser’ın trust context’i ve TLS’yi terminate eden peer değişir. Pass-through tunnel ise application’ın TLS endpoint’lerini koruyabilir. Rol tablosundaki “client seçmeden yönlendirme” ile “plaintext erişimi koşula bağlı” alanları bu nedenle ayrıdır. Bu ayrım bir trust store kurulumu veya interception işlemi göstermez; rol adından cryptographic guarantee çıkarılamayacağını anlatır.
Forwarded message kendi hop context’ini taşır
Intermediary, aldığı message’ı aynen kopyalamak zorunda değildir. HTTP/1.1 forwarding’de Connection alanında adlandırılan connection-specific alanlar ve Connection’ın kendisi sonraki hop’a aktarılmadan kaldırılır. Bazı protocol version’larında bu alanlara zaten izin verilmez. Via, intermediary’nin protocol bilgisini; Forwarded ise client-facing context parametrelerini taşır. İkisinin liste sıralarını birleştirip kesin bir topology çıkaramazsın.
RFC7239 Forwarded list’inde katılan ilk proxy’nin element’i solda, sonradan ekleyen proxy’lerin element’leri sağdadır. for, o proxy’ye request yapan node’u; by, client-facing interface’i; host, aldığı Host context’ini; proto ise gelen protocol’ü anlatır. Her proxy bu optional alanı eklemeyebilir. Bu yüzden element sayısı toplam network hop sayısı değildir. IPv6 adresinde bracket ve colon bulunduğu için quoted-string gerekir. Örnek yalnız kurallı, typed IPv4 verisini gösterir; bütün header syntax’ını işleyen bir parser değildir.
Forwarded ve X-Forwarded-* için provenance
X-Forwarded-For, X-Forwarded-Proto ve X-Forwarded-Host yaygın convention’lardır; hepsini tek bir standart syntax veya aynı hop listesi gibi düşünme. Forwarded, parametreleri element içinde gruplayan standart biçimdir. Ayrı X-Forwarded-* listelerinin nasıl eklendiğini bilmeden bunları her zaman kayıpsız dönüştüremezsin. Hiçbiri kendi başına doğrulanmış kimlik değildir. Header’da IP veya https yazması, authenticated peer kanıtı üretmez.
Atlas’ın yönettiği edge, dışarıdan gelen forwarded context’i doğrulanmamış bir assertion olarak ayırır. Kendi gözlediği client endpoint’i, doğruladığı public authority ve gelen scheme ile yeni alanları kurar. Atlas reverse proxy, edge’in channel identity’sini ve topology policy’sini kabul ettikten sonra kendi hop element’ini ekler. Application ancak doğrudan peer izin verilen peer olduğunda ve internal transport’un bütünlüğü korunduğunda bu zinciri context olarak kullanır. Resource için kullanıcı authentication ve authorization kontrolleri ayrıca yapılır.
2. Red · Güven ve etki
Hareket olmadan bütün senaryoları oku
Approved chain
- External assertion ile edge gözlemi ayrıldı
GET /notes request’i external context class’ı untrusted olarak taşır; external bytes gösterilmez. Edge approvedAuthority notes.example.org, observed endpoint 192.0.2.10 ve incoming scheme https bilgisini kendi gözleminden kurar.
- Hop context
- External assertion untrusted / edge observes context
- Provenance gate
- Review bekliyor
- Identity boundary
- Verdict yok
- Reconstruction tek açık policy’den yapıldı
Edge incoming forwarded context’i atar ve owned observations’dan yeniden kurar. Bu policy her unknown HTTP field’ı silmez; Accept application/json, GET ve /notes anlamı korunur. Connection close bu hop’a aittir ve outbound’da taşınmaz.
- Hop context
- External assertion untrusted / edge observes context
- Provenance gate
- Edge rebuild / GET-path-Accept preserved
- Identity boundary
- Verdict yok
- Header parsing user authentication sayılmadı
Normal contextAccepted true olabilir; userAuthenticated ve resourceAuthorized false kalır. Provenance control, client endpoint ve scheme yorumunu sınırlar. Bir doğru context, authenticated principal veya object grant’i üretmez.
- Hop context
- External assertion untrusted / edge observes context
- Provenance gate
- Edge rebuild / GET-path-Accept preserved
- Identity boundary
- Context accepted / user=false / resource=false
- İkinci writer kendi incoming hop’unu tanımladı
Owned proxy appended element’te forNode 198.51.100.20, by 203.0.113.30 verir. Her element writer’ın incoming context’ine aittir. İlk adresi her topology’de gerçek client diye seçmek genel güvenlik kuralı değildir.
- Hop context
- Writers: owned-edge then owned-proxy
- Provenance gate
- Edge rebuild / GET-path-Accept preserved
- Identity boundary
- Context accepted / user=false / resource=false
- Trusted conjunction açık koşullarla değerlendirildi
Approved immediate peer, secured internal transport, approved topology ve edge reconstruction birlikte true’dur. Bu bounded chain için derived context kullanılabilir. Forwarded list’i bütün network route’unun veya yazmayan hop’ların kanıtı değildir.
- Hop context
- Writers: owned-edge then owned-proxy
- Provenance gate
- Peer + transport + topology + rebuild = true
- Identity boundary
- Context accepted / user=false / resource=false
- Acceptance kapsamı identity’ye genişletilmedi
Derived client 192.0.2.10 ve scheme https bu sabit topology için kabul edilir. NAT veya proxy context’i endpoint’i account kimliğine dönüştürmez. Protected request için bağımsız trusted principal ve resource policy evidence gerekir.
- Hop context
- Writers: owned-edge then owned-proxy
- Provenance gate
- Peer + transport + topology + rebuild = true
- Identity boundary
- Derived context accepted / authn-authz separate
Unapproved peer
- Aynı typed context farklı peer’den geldi
unapproved-peer case’i immediatePeer unapproved-local-peer verir. Request method ve path normaldir; kötü header değeri eklenmez. Parse edilebilir context ile güvenilir writer farklı sorulardır.
- Hop context
- Immediate peer unapproved-local-peer
- Provenance gate
- Review bekliyor
- Identity boundary
- Verdict yok
- Channel başarısı diğer koşulları telafi etmedi
securedInternalTransport true olsa da approvedPeer ve approvedTopology false’tur; edgeReconstructed da false’tur. Conjunction tamamlanmaz. Güvenli görünen channel, provenance şartlarının atlanmasına izin vermez.
- Hop context
- Immediate peer unapproved-local-peer
- Provenance gate
- Transport true / peer-topology-rebuild false
- Identity boundary
- Verdict yok
- Derived context kullanılmadı
contextAccepted false olur; derivedClient ve derivedScheme null kalır. Bu sonuç connection facts’ini silmez, yalnız untrusted derivation’ı kullanmaz. Application request receipt ile policy acceptance tek alan olarak yazılmaz.
- Hop context
- Immediate peer unapproved-local-peer
- Provenance gate
- Transport true / peer-topology-rebuild false
- Identity boundary
- Context rejected / derived values null
- List syntax provenance eksikliğini kapatmadı
Forwarded ile X-Forwarded-* aynı uniform syntax değildir. Bağımsız lists’i index index zip etmek host, proto ve node ilişkisini yanlış kurabilir. Via ile Forwarded için de otomatik aynı-hop eşlemesi yapılmaz.
- Hop context
- Syntax and list positions do not establish writer trust
- Provenance gate
- Transport true / peer-topology-rebuild false
- Identity boundary
- Context rejected / derived values null
- Deployment değişimi trust koşulunu yeniden açtı
Bu profile explicit peer aliases ve sabit topology kullanır. Trusted hop count, topology değişince yanlış peer’i seçebilir. Control, incoming provenance ve reconstruction contract’ını gerçekten sahip olunan observations’a bağlamaktır.
- Hop context
- Syntax and list positions do not establish writer trust
- Provenance gate
- Explicit peer/topology contract required
- Identity boundary
- Context rejected / derived values null
- Negative outcome saldırı attribution’ı olmadı
Bu normal typed negative case, derived context’in kullanılmadığını gösterir. Gerçek proxy veya network trust verification çalıştırılmaz. User ve resource decisions false kalır; bir provenance rejection’dan actor niyeti çıkarılmaz.
- Hop context
- Syntax and list positions do not establish writer trust
- Provenance gate
- Explicit peer/topology contract required
- Identity boundary
- Derived context withheld / intent unknown
VARSAYIM · SINIR · KONTROL
Context’i identity’ye dönüştüren varsayım
Forwarded field’ın parse edilebilir olması doğru provenance’a sahip olduğunu göstermez. Direct peer ile header’da tarif edilen client ayrı observations’dır; NAT, proxy pool ve privacy alias yüzünden bunları aynı kişi saymak ayrıca hatalıdır. Kırılan varsayım client-originated context’i server-authoritative identity gibi kullanmaktır. Bu model external context’i belirli bir kötü değerle canlandırmaz; provenance class’ı tek başına trust kararını ayırmaya yeter.
Necessary conditions selected chain için immediate peer identity, approved topology, secured internal transport ve owned reconstruction policy’sidir. Birisi false ise application derived external context’i kullanmaz; direct connection facts ayrı kalır. Bu outcome gerçek saldırı veya bypass evidence değildir, control boundary’sinin şartlarını gösterir. Header’ı auth proof sayma yerine application principal evidence’ını bağımsız kur.
Hop sırası bütün route’un kanıtı değildir
Forwarded element’leri participating writer sırasını korur, fakat yazmayan hop’ları görünmez bırakabilir. Listed first address ile gerçek client’ın aynı olması için ilk trusted writer’ın gözlemi ve daha eski untrusted prefix’in kullanımı açık olmalıdır. Atlas fixture edge’de reset/reconstruct seçtiği için bounded iki element’in provenance’ı tanımlıdır; bu, arbitrary Internet chain için genel bir first-address rule değildir.
X-Forwarded-* conversion’da bağımsız listeleri keyfi zip etmek host, protocol ve node ilişkisinin yanlış kurulmasına yol açabilir. Via list’ini de Forwarded ile index index birleştirme. Bu riskleri öğrenciye göstermek için gerçek header mutation workflow’ü gerekmez: hangi relationship’in kaynak tarafından garanti edildiğini ve hangisinin local policy olduğunu belirtmek yeterlidir.
Context’in gizlilik ve retention etkisi
Client endpoint’i diagnostics için useful olabilir ama user identity değildir ve privacy-sensitive olabilir. for alanındaki full IP’yi bütün internal hops ve logs üzerinde tutmak “güvenli chain”in zorunlu sonucu değildir. Atlas privacy branch ilk writer’da per-request obfuscated alias seçer; IP inference yapılmaz. Bu alias stable tracking identity veya authorization principal olarak kullanılmaz.
Model derived context accepted olsa bile business authorization false kalır. Böylece positive topology evidence’ın başka policy domain’ına yayılması engellenir. Review’da “header doğru” ile “bu veriyi tutmaya ihtiyaç var” sorularını ayrı cevapla; metadata’nın client’a response içinde geri döndürülmesi internal topology ve endpoint bilgisi açabilir.
3. Blue · Güvenli geliştirme ve savunma
Hareket olmadan bütün senaryoları oku
Writer review
- Writer ile direct peer aynı satırda okundu
İncelediğin kayıt, örnekteki edge ve proxy işlemlerinin hazırladığı typed context defteridir; canlı proxy log’u değildir. edgeOutbound ile proxyOutbound hangi writer’ın hangi element’i eklediğini, cases ise application’ın peer kontrolü sonucunu gösterir. Privacy dalında _atlasOnce görülebilir, fakat atlanan IP bu kayıttan geri çıkarılamaz. İlk element writer owned-edge, observedDirectPeer 192.0.2.10’dur. İkinci writer owned-proxy, direct peer 198.51.100.20’dir. Review listed client ile immediate peer’i aynı kişi gibi birleştirmez.
- Writer ledger
- Two participating writers / two direct peers
- Provenance comparison
- Review bekliyor
- Evidence scope
- Verdict yok
- Normal field ilişkileri policy ile karşılaştırıldı
Edge reset/reconstruct ve proxy append, sabit chain’in contract’ıdır. approvedAuthority ile forwarded host notes.example.org eşleşir. Bu matching arbitrary Internet chain’i veya bütün intermediary davranışını doğrulamaz.
- Writer ledger
- Two participating writers / two direct peers
- Provenance comparison
- Owned rebuild + append / approved authority matches
- Evidence scope
- Verdict yok
- Role label plaintext access garantisi sayılmadı
Forward proxy client configuration ile seçilebilir; CONNECT tunnel opaque kalabilir. Reverse proxy bu seçilmiş termination profile’da plaintext okuyabilir. Role adını tek başına TLS interception evidence diye kullanmak yanlış scope’tur.
- Writer ledger
- Role selection ≠ universal plaintext access
- Provenance comparison
- Owned rebuild + append / approved authority matches
- Evidence scope
- Verdict yok
- Negative case conjunction şartını sınadı
Unapproved peer satırında transport true ama diğer required koşullar false’tur; derived values null kalır. Normal ve negative sonuçlar control’ün ayrı predicate’lerini sınar. Bunlar general header parser testleri değildir.
- Writer ledger
- Role selection ≠ universal plaintext access
- Provenance comparison
- Approved accepts / unapproved withholds derivation
- Evidence scope
- Verdict yok
- Missing writer evidence sonucu sınırladı
Yeni bir trace’te writer identity veya reconstruction evidence yoksa normal fixture’ın relationship’i aktarılmaz. Derived-client provenance UNKNOWN kalır. Header text mevcutken bile observation source bilinmeden identity hükmü verilmez.
- Writer ledger
- Role selection ≠ universal plaintext access
- Provenance comparison
- Approved accepts / unapproved withholds derivation
- Evidence scope
- UNKNOWN without writer/reconstruction coverage
- Regression minimum provenance evidence’a bağlandı
Immediate peer role, trusted channel outcome, reconstruction kararı ve bounded correlation yeterli olabilir. Full chain’i response’a kopyalamak veya session secret toplamak gerekmez. Gerçek proxy integration claim’i ayrıca owned runtime evidence ister.
- Writer ledger
- Role selection ≠ universal plaintext access
- Provenance comparison
- Approved accepts / unapproved withholds derivation
- Evidence scope
- Needed: peer/channel/rebuild/correlation scope
Privacy alias
- Per-request alias identity’den ayrıldı
İncelediğin kayıt, örnekteki edge ve proxy işlemlerinin hazırladığı typed context defteridir; canlı proxy log’u değildir. edgeOutbound ile proxyOutbound hangi writer’ın hangi element’i eklediğini, cases ise application’ın peer kontrolü sonucunu gösterir. Privacy dalında _atlasOnce görülebilir, fakat atlanan IP bu kayıttan geri çıkarılamaz. Privacy case’inde derivedClient _atlasOnce olur; stableUserIdentity false’tur. Bu alias normal provenance sonucunu korurken original IP bilgisini taşımaz. Stable tracking identity veya principal olarak yorumlanmaz.
- Writer ledger
- Derived client _atlasOnce / stable identity false
- Provenance comparison
- Review bekliyor
- Evidence scope
- Verdict yok
- Privacy seçimi acceptance predicate’ini değiştirmedi
Approved peer, secured transport, topology ve reconstruction yine true’dur. contextAccepted true olur; derivedScheme https kalır. Trust outcome’un aynı kalması IP retention’ın zorunlu olmadığını bu seçilmiş profile’da gösterir.
- Writer ledger
- Derived client _atlasOnce / stable identity false
- Provenance comparison
- Context accepted / scheme https / IP omitted
- Evidence scope
- Verdict yok
- Original endpoint’in yokluğu alarm sayılmadı
Per-request obfuscation deliberate minimization’dır. Bu field’da original IP beklemek normal privacy branch’ini missing-data failure diye etiketler. Observer, seçilmiş retention policy’yi correlation ihtiyacıyla birlikte okur.
- Writer ledger
- IP deliberately absent / no stable tracking claim
- Provenance comparison
- Context accepted / scheme https / IP omitted
- Evidence scope
- Verdict yok
- Client response echo koşulu ayrıca kontrol edildi
responseEchoAllowed false’tur. Internal chain’i reader’a döndürmek acceptance’ın sonucu değildir. Diagnostic kayıt ile public response farklı recipient scope’larına aittir; metadata minimization her ikisi için ayrı sorulur.
- Writer ledger
- IP deliberately absent / no stable tracking claim
- Provenance comparison
- Response echo disallowed
- Evidence scope
- Verdict yok
- Privacy outcome authn veya authz sayılmadı
User authenticated ve resource authorized bu profile’da false kalır. Alias’ın düzgün kullanılması access grant sağlamaz. Privacy kararı ile protected request authority aynı control değil, farklı sahiplerin koşullarıdır.
- Writer ledger
- IP deliberately absent / no stable tracking claim
- Provenance comparison
- Response echo disallowed
- Evidence scope
- Privacy preserved / authn-authz false
- Evidence sonucu seçilmiş topology’de kaldı
Bu privacy branch sabit typed context üzerinde incelenir; gerçek proxy, arbitrary parser veya network trust verification ölçülmez. Başka topology’de aynı alias policy’nin yeterli olması ayrıca kanıtlanmalıdır.
- Writer ledger
- IP deliberately absent / no stable tracking claim
- Provenance comparison
- Response echo disallowed
- Evidence scope
- Fixed privacy contract / external topology unknown
UYGULAMA · GÜVENLİK KONTROLÜ · DOĞRULAMA
Owned edge’de tek reconstruction policy
İncelediğin kayıt, örnekteki edge ve proxy işlemlerinin hazırladığı typed context defteridir; canlı proxy log’u değildir. edgeOutbound ile proxyOutbound hangi writer’ın hangi element’i eklediğini, cases ise application’ın peer kontrolü sonucunu gösterir. Privacy dalında _atlasOnce görülebilir, fakat atlanan IP bu kayıttan geri çıkarılamaz. Edge config’inde kabul edilen public authority mapping, observed incoming scheme ve direct client endpoint source’u yazılı olmalıdır. Incoming external context normal request’ten çıkarılır; approved normal fields edge’in own observations’ından yeniden kurulur. Bu policy, bütün unknown HTTP fields’i silmek veya arbitrary client message semantics’i değiştirmek değildir. Forwarded ve legacy X-Forwarded-* compatibility için tek açık contract seçmek conflicting interpretations’ı azaltır.
Internal writers’ın hangi fields’i preserve veya append edeceğini kayıt altına al. Application immediate peer’i ve channel provenance’ını trusted kabul etmeden derived context’i işleme sokmasın. Trusted-hop-count gibi implementation seçenekleri otomatik genel güvenlik çözümü değildir; deployment topology değişince aynı count yanlış peer’e güvenebilir. Selected fixture explicit peer aliases ve fixed chain kullanır, arbitrary header parser değildir.
Regression provenance kararını gözlemlesin
Normal case’te edge rebuild, proxy append ve application context acceptance ayrı local işlemlerdir. Message transfer tamamlandığında receiver receipt state’i güncellenir; acceptance ancak sonraki local gate’te oluşur. Unapproved-peer branch normal typed request’i application’a getirir fakat trust conjunction false olduğu için derived context kullanılmaz. Network receipt, syntactic validity ve policy trust tek success alanına sığdırılmaz.
Positive evidence approved peer + secured hop + rebuilt first element ilişkisidir. Negative evidence external scheme ve client endpoint’in provenance olmadan kullanılmamasıdır. User authenticated ve resource authorized sonuçları bu fixture’de false bırakılır; application’ın başka katmanından gelecek evidence burada üretilmez. Bu ayrım gerçek integration test’inde neyin ayrıca ölçülmesi gerektiğini de belirler.
Forwarding uyumluluğunu ve privacy’yi koru
HTTP/1.1 Connection için reserved close option seçilen inert message’ta current hop’a aittir. Outbound message bu field’ı kaldırır; GET method ve /notes path korunur. Bu canonical örnek bütün protocol framing veya field parsing edge case’lerini çözmez; özellikle HTTP/2 ve HTTP/3’te aynı Connection field’ını taşımak geçerli sayılmaz. Gateway authority mapping ayrı configuration’dır, client-selected proxy için sınırsız rewrite izni değildir.
Logs’ta full chain yerine outcome category, immediate peer role ve gerektiğinde bounded correlation kullan. Per-request obfuscated for alias privacy branch’inde doğru trust outcome’u korur ama original IP bilgisi deliberately absent olur. Response’a Forwarded chain’i kopyalama. Böylece data minimization, diagnostics ve application authorization birbirine karışmadan sürdürülebilir.
ŞİMDİ VAKAYA UYGULA
Forwarded client, direct peer ve authenticated subject neden ayrı tutulur?
Kontrolümüzdeki edge, /notes için external context’i atıp kendi endpoint ve scheme gözlemlerinden yeniden kurar. Kontrolümüzdeki proxy bir element ekler. Application bu iki writer’ın provenance koşullarını değerlendirir; privacy branch’inde client endpoint yerine _atlasOnce kullanılır.
Vakadaki representation hangi cache owner’dan geliyor? Key kapsamı, freshness ve kullanıcının context’ini birlikte değerlendir; hit olması doğru viewer’a ait olduğunu kanıtlamaz.
Bağlı vaka dosyasını aç ↗ÖRNEĞİ BİRLİKTE OKUYALIM
Atlas · Proxy rolleri ve forwarded context
Bir alan seç; hangi sonucu desteklediğini ve nerede yetersiz kaldığını incele.
Ham kaydı ve alan açıklamalarını oku
{
"profile": {
"httpVersion": "HTTP/1.1 teaching representation",
"actualProxyNetworkRun": false,
"arbitraryHeaderParserRun": false
},
"roles": [
{
"role": "forward-proxy",
"selection": "client configuration",
"tlsPlaintextAccess": "not implied; CONNECT tunnel can remain opaque"
},
{
"role": "reverse-proxy",
"selection": "service routing",
"tlsPlaintextAccess": "yes in selected termination profile"
},
{
"role": "interception-proxy",
"selection": "network redirect without client selection",
"tlsPlaintextAccess": "conditional architecture, not implied"
},
{
"role": "semantically-transparent",
"selection": "historical semantic usage",
"tlsPlaintextAccess": "not a peer guarantee"
}
],
"inputMessage": {
"method": "GET",
"path": "/notes",
"authority": "notes.example.org",
"fields": {
"Connection": "close",
"Accept": "application/json"
},
"incomingExternalContextClass": "untrusted external assertion",
"incomingExternalContextBytesIncluded": false
},
"edgePolicy": {
"discardIncomingForwardedContext": true,
"reconstructFromOwnedObservations": true,
"approvedAuthority": "notes.example.org",
"observedClientEndpoint": "192.0.2.10",
"observedIncomingScheme": "https"
},
"edgeOutbound": {
"method": "GET",
"path": "/notes",
"fields": {
"Accept": "application/json",
"Forwarded": "for=192.0.2.10;by=198.51.100.20;host=notes.example.org;proto=https"
}
},
"forwardedElements": [
{
"forNode": "192.0.2.10",
"by": "198.51.100.20",
"host": "notes.example.org",
"proto": "https",
"writer": "owned-edge",
"observedDirectPeer": "192.0.2.10"
},
{
"forNode": "198.51.100.20",
"by": "203.0.113.30",
"host": "notes.example.org",
"proto": "https",
"writer": "owned-proxy",
"observedDirectPeer": "198.51.100.20"
}
],
"proxyOutbound": {
"fields": {
"Accept": "application/json",
"Forwarded": "for=192.0.2.10;by=198.51.100.20;host=notes.example.org;proto=https, for=198.51.100.20;by=203.0.113.30;host=notes.example.org;proto=https"
}
},
"legacyConventions": {
"names": [
"X-Forwarded-For",
"X-Forwarded-Proto",
"X-Forwarded-Host"
],
"uniformNormativeSyntax": false,
"arbitraryListsCanAlwaysBeLosslesslyConverted": false
},
"privacy": {
"perRequestForAlias": "_atlasOnce",
"stableUserIdentity": false,
"responseEchoAllowed": false
},
"cases": [
{
"case": "normal",
"immediatePeer": "owned-proxy",
"approvedPeer": true,
"securedInternalTransport": true,
"approvedTopology": true,
"edgeReconstructed": true,
"contextAccepted": true,
"derivedClient": "192.0.2.10",
"derivedScheme": "https",
"userAuthenticated": false,
"resourceAuthorized": false
},
{
"case": "unapproved-peer",
"immediatePeer": "unapproved-local-peer",
"approvedPeer": false,
"securedInternalTransport": true,
"approvedTopology": false,
"edgeReconstructed": false,
"contextAccepted": false,
"derivedClient": null,
"derivedScheme": null,
"userAuthenticated": false,
"resourceAuthorized": false
},
{
"case": "privacy",
"immediatePeer": "owned-proxy",
"approvedPeer": true,
"securedInternalTransport": true,
"approvedTopology": true,
"edgeReconstructed": true,
"contextAccepted": true,
"derivedClient": "_atlasOnce",
"derivedScheme": "https",
"userAuthenticated": false,
"resourceAuthorized": false
}
]
}- roles
- Role seçimi plaintext access garantisi değildir.
- forwardedElements
- Participating writer’lar soldan sağa sıralıdır; her element kendi incoming context’ini tarif eder.
- cases
- Approved peer/topology/transport/reconstruction conjunction; user permission ayrı kalır.
Owned fixed topology ve typed normal context’tir; general Forwarded parser, gerçek proxy, client-header mutation veya network trust verification yoktur. Context acceptance authentication ve authorization değildir.
İki yanlış kanı
Forwarded içindeki ilk IP authenticated user’dır.
Alan context assertion’ıdır; NAT/proxy ve provenance user authentication’ın yerine geçmez.
Transparent proxy her HTTPS body’sini okur.
Interception selection, TLS termination ve opaque tunnel farklı architecture koşullarıdı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.
Doğrudan peer onaylı değil. Bu profile göre Forwarded context kabul edilir mi?
- Evet. Forwarded standard header olduğu için her writer güvenilirdir.
- Hayır. Türetilen client ve scheme null kalır.
Gerekçeli cevabı oku
Hayır. Türetilen client ve scheme null kalır. — Onaylı peer, topology ve edge reconstruction koşulları kurulmamıştır; contextAccepted=false.
İkinci Forwarded element’te forNode neden ilk client IP’si değil?
Dersten seçilen artifact alanları; öğretim örneği
- forwardedElements[0]
- {"forNode":"192.0.2.10","by":"198.51.100.20","host":"notes.example.org","proto":"https","writer":"owned-edge","observedDirectPeer":"192.0.2.10"}
- forwardedElements[1]
- {"forNode":"198.51.100.20","by":"203.0.113.30","host":"notes.example.org","proto":"https","writer":"owned-proxy","observedDirectPeer":"198.51.100.20"}
- İkinci proxy’nin direct peer’ı edge’dir.
- Her element original client IP’sini tekrar etmek zorundadır.
Gerekçeli cevabı oku
İkinci proxy’nin direct peer’ı edge’dir. — Bu topology’de önce edge, sonra proxy kendi gözlemini ekler. Chain, bu onaylı hop sırasıyla yorumlanır.
Forward proxy CONNECT tunnel ile reverse proxy TLS termination’ı plaintext görünürlüğü açısından karşılaştır.
Gerekçeli cevabı oku
Client’ın seçtiği forward proxy, CONNECT tunnel içindeki TLS plaintext’ini görmeyebilir. Reverse proxy TLS’yi terminate ediyorsa o hop’un plaintext’ini okuyabilir. Arada bulunmak tek başına TLS decryption kanıtı değildir. Kabul edilmiş Forwarded context de kullanıcı authentication veya resource authorization sonucu değildir.
□ Proxy role’ü ile termination mimarisini ayırdım.
□ Forwarded context’i kullanıcı izni saymadım.
Uygulama konsolunu aç · request / response / browser
Request, URL, cookie ve DOM örneklerini ayrıca aç
Kaynaklar ve kapsam
- HTTP Semantics3.3 Connections, Clients, and Servers; 3.7 Intermediaries · 4.2.2 https; 4.3.4 Certificate Verification · 7.4 Rejecting Misdirected Requests · 7.6.1 Connection; 7.6.3 Via; 7.7 Message Transformations · 9.3.6 CONNECT
- Forwarded HTTP Extension4 Forwarded HTTP Header Field · 5.1 by; 5.2 for; 5.3 host; 5.4 proto · 7.1 HTTP Lists; 7.3 Relation to Via; 7.4 Transition · 8.1 Header Validity and Integrity; 8.2 Information Leak; 8.3 Privacy
- HTTP/1.1 — historical terminology only (obsolete)1.3 Terminology: transparent proxy and semantically transparent cache, historical only