Tarih: 2026-09-28 · Durum: rapor — operatör kararı bekliyor Bağlı: PLAN-ARTF-002 F5 · raw/web-claude-artifacts-2026.md
Claude Artifacts'ın en güçlü izolasyonu iki-origin: artifact'lar ayrı
host'ta (kullanıcı-yüzü claude.ai'dan ayrı) sunulur; artifact JS'i kötü
niyetli olsa bile ana oturum/cookie/token'a erişemez. Bizde tek-origin
(artifacts.gonet.com.tr) + hart'ın default-src 'none'+script-src 'unsafe-inline' CSP iskeleti + review iframe'i var.
<iframe id="fr" src="/a/..."> — sandbox
attribute yok. Artifact ile parent same-origin olduğundan artifact
JS'i parent.document'a tam erişir: review sayfasının DOM'unu okur/
değiştirir, parent bağlamından /review/arti/api/* uçlarını
declare gate'i baypas ederek doğrudan çağırır.o/n'yi path'ten alır —
/review/arti/api/store/d1/BASKA ucu herkesin herkese açık
(link-sahipliği modeli; yorumlar da öyle). "Kişisel" veri için
bu yetersiz; shared state için kabul edilebilir.*.gonet.com.tr wildcard yok (foo-xyz-123 sorgusu boş).
NS Cloudflare (titan/evelyn) → wildcard cert DNS-01 + CF API token
ister.Host(artifacts.gonet.com.tr) && PathPrefix(/), review
PathPrefix(/review|/asistan). Yeni Host kuralı = compose'a bir
label bloğu (Coolify domains alanına domain eklemek de yeter).a.gonet.com.tr) için HTTP-01 yeterli —
wildcard cert şart DEĞİL.| Kim | Ne yapabilir bugün | Sonuç |
|---|---|---|
| Kötü artifact JS | parent DOM oku/yaz, arti API'lerini o/n kısıtsız çağır | yorumları taklit/deforme, başka store'ları oku/yaz; LLM kota tüketimi (rate+token frenli) |
| Bizde oturum yok | cookie/token ÇALAMAZ — çünkü yok | hesapsız model bu yüzden riski düşürür |
| hart CSP 'none' | dış ağ yok (connect-src none) | veri sızıntısı postMessage dışında yok — postMessage'ı da yalnız parent dinler |
Risk seviyesi: orta — bizde çalınacak oturum yok ama artifact'lar arası "güven sınırı" fiilen yok.
| Seçenek | Ne yapılır | Maliyet | Kazanç | Kayıp |
|---|---|---|---|---|
A (öneri) a.gonet.com.tr |
artifact /a/ trafiği ikinci host'a; review/asistan ana host'ta kalır |
DNS A kaydı (Cloudflare'da 1dk) + compose'a ikinci domain + arti protokol revizyonu | artifact JS parent'a artık same-origin DEĞİL — DOM erişimi imkânsız; declare gate gerçek sınıra döner; CSP postMessage'la köprü korunur | arti protokolü v2 gerekir (alt.) |
B wildcard *.gonet.com.tr |
her artifact kendi subdomain | DNS-01 + CF API token + hostname→artifact map katmanı (hart path-bazlı — ek middleware) | en güçlü izolasyon (Claude modeline en yakın) | en pahalı: DNS API entegrasyonu + map katmanı + her yeni alt-alanın servis tarafında çözülmesi |
| C sandbox iframe (ara adım) | <iframe sandbox="allow-scripts"> |
1 satır | parent DOM erişimi kesilir hemen | e.origin='null' + contentDocument kapanır → declare-meta okunamaz (aynı protokol fix'i yine şart); /a/ doğrudan açılırsa sandbox'suz kalır |
Kademeli: önce C, sonra A. C ucuz ve bugünkü en keskin açığı (parent DOM erişimi) hemen kapatır; A kalıcı hedef — Claude'un mimarisine denk düşer ve hediyesi: arti köprüsünün "iframe içi same-origin DOM okuma" bağımlılığı zaten kırılganlık kaynağı, ikisi aynı protokol fix'ini ister.
Protokol v2 (A veya C'de ortak): declare-meta okuması yerine shim
ilk mesajı kendisi ilan eder — arti.hello {caps:[...]} (aktif ilan).
Parent e.source===FR.contentWindow kontrolü yeterli (origin cross-
origin'de sabit değer değil). Caps listesi doğrulanamaz kaynaktan gelir
ama zaten doğrulanamazdı (meta'yı da artifact yazar) — gate'in işlevi
"kazara aşma" değil "kasıtlı aşma"yı sınırlamak değilse anlamlıdır;
asıl sınır server-side'da kalır.
a.gonet.com.tr A kaydı → cx53 IP (5 dk).a.gonet.com.tr → hart'a
Host(a.gonet.com.tr) && PathPrefix(/a|/_hart) kuralı; ana host'taki
/a/ kuralı 301'e döner ya da paralel kalır (geçiş süresince
paralel önerilir).arti.hello gönderir; parent caps'i mesajdan
alır (meta okuması kaldırılır — hem A hem C'ye hazır).https://a.gonet.com.tr/a/... olur; postMessage
targetOrigin https://a.gonet.com.tr.Operatöre: A / B / C / yok (status quo kabul) — öneri A.