WEB / WEB-16.S04
Archives ve media processing isolation
Processing kabulünü, sınırlandırılmış işi ve kabul edilen çıktıyı ayrı olgular olarak izle.
1. Core · Mekanizma
Hareket olmadan bütün senaryoları oku
Onaylı arşiv
- Processing girdisi hazır
Örnekte ZIP: 226 byte; catalog.txt=3, notes.txt=5 girdisi hazırdır. Uygulamanın archive ve media profilleri farklıdır; henüz decompression, raster kabulü veya consumer çıktısı yoktur.
- Processing girdisi
- ZIP: 226 byte; catalog.txt=3, notes.txt=5
- Profil kontrolü
- Processing kararı yok
- Örneğin worker’ı
- Tamamlanmış işlem yok
- Sonuç consumer’ı
- Sonuç yok
- İşleme kabul kararı
226 byte input, tam iki onaylı member ve toplam 8 byte bildirilen boyut, 1024 input/16 expanded budget koşullarını sağlar. Bu admission gerçek stream read veya record publish değildir.
- Processing girdisi
- ZIP: 226 byte; catalog.txt=3, notes.txt=5
- Profil kontrolü
- Profil kabul edildi
- Örneğin worker’ı
- Tamamlanmış işlem yok
- Sonuç consumer’ı
- Sonuç yok
- Sınırlı işlem yürütülür
İki bounded stream read tamamlandı: catalog.txt Tea ile 3, notes.txt Bread ile 5 byte verdi; toplam 8 byte ve iki member işlendi. Memory record hazırlanır, filesystem extraction yapılmaz.
- Processing girdisi
- ZIP: 226 byte; catalog.txt=3, notes.txt=5
- Profil kontrolü
- Profil kabul edildi
- Örneğin worker’ı
- Member sayısı=2; byte sayısı=8
- Sonuç consumer’ı
- Sonuç yok
- Tamamlanan çıktı kontrolü
Gözlenen member uzunlukları bildirilen değerlerle eşleşir; her iki title strict UTF-8 ve domain contract’ını sağlar. İki tamamlanmış record kabul edilir; process ayrımı bu archive akışının şartı değildir.
- Processing girdisi
- ZIP: 226 byte; catalog.txt=3, notes.txt=5
- Profil kontrolü
- Tamamlanmış çıktı kabul edildi
- Örneğin worker’ı
- Member sayısı=2; byte sayısı=8
- Sonuç consumer’ı
- Sonuç yok
- Consumer projection hazır
record-1/title=Tea ve record-2/title=Bread projection’ı hazırdır. Bunlar uygulama ID’leridir; archive member adları output path’e dönüştürülmedi. Consumer henüz güncellenmedi.
- Processing girdisi
- ZIP: 226 byte; catalog.txt=3, notes.txt=5
- Profil kontrolü
- Tamamlanmış çıktı kabul edildi
- Örneğin worker’ı
- İki onaylı record
- Sonuç consumer’ı
- Sonuç yok
- Publish kararı tamamlandı
Consumer iki onaylı memory record’u aldı: Tea ve Bread. expandedBytes=8, decompressedMembers=2 bilgisi bu tamamlanmış sonuçla ilişkilidir; genel archive isolation kanıtı değildir.
- Processing girdisi
- ZIP: 226 byte; catalog.txt=3, notes.txt=5
- Profil kontrolü
- Tamamlanmış çıktı kabul edildi
- Örneğin worker’ı
- İki onaylı record
- Sonuç consumer’ı
- Public record sayısı=2
Açılım sınırı
- Processing girdisi hazır
Örnekte ZIP: 226 byte; catalog.txt=3, notes.txt=5 girdisi hazırdır. Uygulamanın archive ve media profilleri farklıdır; henüz decompression, raster kabulü veya consumer çıktısı yoktur.
- Processing girdisi
- ZIP: 226 byte; catalog.txt=3, notes.txt=5
- Profil kontrolü
- Processing kararı yok
- Örneğin worker’ı
- Tamamlanmış işlem yok
- Sonuç consumer’ı
- Sonuç yok
- İşleme kabul kararı
Input 226 byte ile 1024 sınırının içindedir, fakat bildirilen member toplamı 3+5=8 byte, bu dalın 7 byte expanded budget’ını aşar. Admission REJECT olur; küçük input kabul için yetmez.
- Processing girdisi
- ZIP: 226 byte; catalog.txt=3, notes.txt=5
- Profil kontrolü
- Reddedildi: expanded-budget
- Örneğin worker’ı
- Tamamlanmış işlem yok
- Sonuç consumer’ı
- Sonuç yok
- Decompression başlamadı
Bildirilen toplam 8 byte, seçilen 7 byte budget’ı aştığı için hiçbir member decompress edilmez; sayaçlar 0 kalır.
- Processing girdisi
- ZIP: 226 byte; catalog.txt=3, notes.txt=5
- Profil kontrolü
- Reddedildi: expanded-budget
- Örneğin worker’ı
- Member sayısı=0; byte sayısı=0
- Sonuç consumer’ı
- Sonuç yok
- Output kontrolü atlandı
Admission reddi nedeniyle domain record kontrolüne geçilmez. İşlenmiş bir member veya onaylı çıktı yoktur.
- Processing girdisi
- ZIP: 226 byte; catalog.txt=3, notes.txt=5
- Profil kontrolü
- Reddedildi: expanded-budget
- Örneğin worker’ı
- Member sayısı=0; byte sayısı=0
- Sonuç consumer’ı
- Sonuç yok
- Consumer çıktısı tutuldu
expanded-budget reddi için output null kalır. Consumer’a kısmi veya tamamlanmış record hazırlanmaz.
- Processing girdisi
- ZIP: 226 byte; catalog.txt=3, notes.txt=5
- Profil kontrolü
- Reddedildi: expanded-budget
- Örneğin worker’ı
- Output null; publication yok
- Sonuç consumer’ı
- Sonuç yok
- Publish kararı tamamlandı
Consumer expanded-budget reddini ve output=null sonucunu gösterir. decompressedMembers=0, expandedBytes=0 kalır; Tea veya Bread record’u yayımlanmadı.
- Processing girdisi
- ZIP: 226 byte; catalog.txt=3, notes.txt=5
- Profil kontrolü
- Reddedildi: expanded-budget
- Örneğin worker’ı
- Output null; publication yok
- Sonuç consumer’ı
- Sonuç yok; expanded-budget
Tam raster
- Processing girdisi hazır
Örnekte P6: 14 byte; dimensions=1×1 girdisi hazırdır. Uygulamanın archive ve media profilleri farklıdır; henüz decompression, raster kabulü veya consumer çıktısı yoktur.
- Processing girdisi
- P6: 14 byte; dimensions=1×1
- Profil kontrolü
- Processing kararı yok
- Örneğin worker’ı
- Tamamlanmış işlem yok
- Sonuç consumer’ı
- Sonuç yok
- İşleme kabul kararı
P6 input 64 byte limit’in içindedir ve seçilen dar formatta değerlendirilir. Child worker’ın farklı process olması tam OS sandbox değildir; dimensions ve raster sonucu henüz consumer verisi değildir.
- Processing girdisi
- P6: 14 byte; dimensions=1×1
- Profil kontrolü
- Profil kabul edildi
- Örneğin worker’ı
- Tamamlanmış işlem yok
- Sonuç consumer’ı
- Sonuç yok
- Sınırlı işlem yürütülür
Sabit media worker P6 header’ını okudu: dimensions=[1,1], Maxval=255. Bu boyut üç RGB raster byte gerektirir. Header’ın parse edilmesi, eksiksiz pixel çıktısını henüz kanıtlamaz.
- Processing girdisi
- P6: 14 byte; dimensions=1×1
- Profil kontrolü
- Profil kabul edildi
- Örneğin worker’ı
- Parse edilen dimensions=1×1
- Sonuç consumer’ı
- Sonuç yok
- Tamamlanan çıktı kontrolü
Raster tam üç byte içerir ve seçilen profile uyar; RGB [15,118,110] kabul edilir. Bu pixel listesi color calibration, browser render veya başka codec davranışı değildir.
- Processing girdisi
- P6: 14 byte; dimensions=1×1
- Profil kontrolü
- Tamamlanmış çıktı kabul edildi
- Örneğin worker’ı
- Parse edilen dimensions=1×1
- Sonuç consumer’ı
- Sonuç yok
- Consumer projection hazır
Tamamlanmış tek RGB pixel [15,118,110] consumer projection’ı için hazırdır. Worker sonucu ile consumer’ın onu kullanması ayrı yerel aşamalardır; görünüm henüz güncellenmedi.
- Processing girdisi
- P6: 14 byte; dimensions=1×1
- Profil kontrolü
- Tamamlanmış çıktı kabul edildi
- Örneğin worker’ı
- Bir onaylı RGB pixel
- Sonuç consumer’ı
- Sonuç yok
- Publish kararı tamamlandı
Consumer kabul edilen RGB [15,118,110] listesini aldı. Bu dar P6 sonucu, başka coder/delegate veya OS resource enforcement koşullarının doğrulandığını göstermez.
- Processing girdisi
- P6: 14 byte; dimensions=1×1
- Profil kontrolü
- Tamamlanmış çıktı kabul edildi
- Örneğin worker’ı
- Bir onaylı RGB pixel
- Sonuç consumer’ı
- RGB: 15,118,110
Eksik raster
- Processing girdisi hazır
Örnekte P6: 13 byte; dimensions=1×1 girdisi hazırdır. Uygulamanın archive ve media profilleri farklıdır; henüz decompression, raster kabulü veya consumer çıktısı yoktur.
- Processing girdisi
- P6: 13 byte; dimensions=1×1
- Profil kontrolü
- Processing kararı yok
- Örneğin worker’ı
- Tamamlanmış işlem yok
- Sonuç consumer’ı
- Sonuç yok
- İşleme kabul kararı
P6 input 64 byte limit’in içindedir ve seçilen dar formatta değerlendirilir. Child worker’ın farklı process olması tam OS sandbox değildir; dimensions ve raster sonucu henüz consumer verisi değildir.
- Processing girdisi
- P6: 13 byte; dimensions=1×1
- Profil kontrolü
- Profil kabul edildi
- Örneğin worker’ı
- Tamamlanmış işlem yok
- Sonuç consumer’ı
- Sonuç yok
- Sınırlı işlem yürütülür
Sabit media worker P6 header’ını okudu: dimensions=[1,1], Maxval=255. Bu boyut üç RGB raster byte gerektirir. Header’ın parse edilmesi, eksiksiz pixel çıktısını henüz kanıtlamaz.
- Processing girdisi
- P6: 13 byte; dimensions=1×1
- Profil kontrolü
- Profil kabul edildi
- Örneğin worker’ı
- Parse edilen dimensions=1×1
- Sonuç consumer’ı
- Sonuç yok
- Tamamlanan çıktı kontrolü
13 byte input’ta raster gerekli üç byte’ı tamamlamaz. dimensions=[1,1] bilinse de raster-length REJECT olur; eksik pixel tahmin edilmez ve pixels=null kalır.
- Processing girdisi
- P6: 13 byte; dimensions=1×1
- Profil kontrolü
- Reddedildi: raster-length
- Örneğin worker’ı
- Parse edilen dimensions=1×1
- Sonuç consumer’ı
- Sonuç yok
- Eksik raster tutuldu
Dimensions bilinse de raster-length reddi nedeniyle pixels null kalır. Consumer’a image sonucu hazırlanmaz.
- Processing girdisi
- P6: 13 byte; dimensions=1×1
- Profil kontrolü
- Reddedildi: raster-length
- Örneğin worker’ı
- Output null; publication yok
- Sonuç consumer’ı
- Sonuç yok
- Publish kararı tamamlandı
Consumer raster-length reddini gösterir; pixels=null, dimensions=[1,1] olarak kalır. Header bilgisi tamamlanmış image veya boş başarı gibi sunulmaz.
- Processing girdisi
- P6: 13 byte; dimensions=1×1
- Profil kontrolü
- Reddedildi: raster-length
- Örneğin worker’ı
- Output null; publication yok
- Sonuç consumer’ı
- Sonuç yok; raster-length
ROLLER · STATE · VERİ AKIŞI
Upload kabulü processing izni değildir
Bir attachment’ın storage’a alınması, onun bütün parser ve converter’lara verilebileceğini söylemez. Atlas bu derste seçilmiş iki profil kullanır: kendi küçük ZIP’inden public catalog text record’ları çıkarmak ve kendi dar P6 profiline ait görüntü byte’larını sınırlı bir worker’da okumak. Processing profili, input formatı, işlem sınırı ve consumer’a verilecek çıktı uygulama tarafından ayrı seçilir. Kullanıcının verdiği filename, decoder’ı veya archive extraction hedefini belirlemez.
Arşivin normal dalında catalog.txt:Tea ve notes.txt:Bread bulunur. Media dalı ise 1×1 raster ve üç channel byte içerir. Bu veriler malware scan, tam bir media codec veya genel archive safety kanıtı değildir. Önceki upload/download geçişlerine burada processing kabulü, yürütülen iş ve publish kararı eklenir. Consumer yalnız gerekli kontrollerin tamamlanmasından sonra değişir.
Compressed bytes, expanded bytes ve entry sayısı ayrı budget’tır
Örnekteki ZIP 226 byte’dır. Member’ların açılmış boyutları 3 ve 5 byte, toplam 8 byte’dır. Arşiv profili en çok 1024 input byte, tam iki onaylı member adı, DEFLATE yöntemi ve 16 byte expanded budget kabul eder. Budget 7 seçildiğinde bildirilen toplam 8 byte bu sınırı aşar; decompression başlamadan ret verilir. decompressedMembers=0, expandedBytes=0 ve output null kalır. Küçük input, açılmış boyuta ilişkin policy’nin yerine geçmez.
Header’daki file_size ile member’dan okunan byte sayısı aynı gözlem değildir. Kabul edilen dal, her stream’den en çok kalan budget+1 byte okur; okunan uzunluğu bildirilen boyutla karşılaştırır ve strict UTF-8 text’i domain record’a dönüştürür. Normal örnekte 8 byte okunur ve iki member tamamlanır. Bu küçük profil, genel decompressor memory/time sınırlarını veya bütün malformed archive türlerini güvenceye almaz.
Archive member adı filesystem destination olmaz
Bu model extractall veya arbitrary directory extraction kullanmaz. Seçilen member’lar memory stream’den okunur ve uygulamanın belirlediği record-1 / record-2 ID’lerine map edilir. catalog.txt ve notes.txt archive metadata’sıdır; bunlar output filesystem path’i olarak birleştirilmez. Sıradan draft.txt adı seçilen manifest’e uymaz ve hiçbir member decompress edilmeden reddedilir. Path containment için önceki dersin storage naming/root boundary’si ayrı sorumluluktur.
İkinci sıradan text member UTF-8 admission’ını geçmezse önceki Tea record’u public result olarak yayımlanmaz. Native check iki read’in yürütüldüğünü gözlese de output null tutulur. Geçici ara işlemler ile consumer’ın kabul ettiği sonuç farklıdır. Arşivin kısmi çıktısını tamamlanmış import gibi sunmak, failure’ın hangi noktada olduğunu gizler. File extraction, symbolic link entry, permission restoration veya archive overwrite behavior bu modelde çalıştırılmaz.
Media bytes, dimensions ve raster ayrı okunur
Worker yalnız dar bir P6 profili kabul eder: P6 newline, width height newline, 255 newline ve RGB channel raster. Normal girdi 14 byte’dır; width=1 ve height=1 için raster tam 3 byte olmalıdır. Channel değerleri 15, 118, 110 olarak döner. Bu sonuç color calibration veya browser render ölçümü değildir. Netpbm PPM’in comments, multiple images, diğer Maxval ve varyantlarını kabul eden tam bir decoder burada yoktur.
Eksik raster örneği 13 byte olduğunda header ve dimensions okunur; ancak beklenen raster uzunluğu sağlanmaz. reason=raster-length, dimensions=[1,1] ve pixels null olur. width=3, seçilen küçük dimension sınırına takılır. Pixel çıktısı yalnız profil kontrolleri tamamlandıktan sonra tüketilir. File extension veya Content-Type bu kontrollerin yerine geçmez; worker genel amaçlı PNG/JPEG/SVG/PDF converter değildir.
Process ayrımı isolation kanıtı değildir
Media processing ayrı bir Python child process’te gerçekleşir. Child PID, parent PID’den farklıdır. Uygulama sabit worker code’unu argument sequence ile başlatır; shell kullanmaz ve timeout=5 seçer. Python -I, interpreter’ın import/environment davranışını daraltır. Ayrı process veya bu seçenek tek başına OS sandbox, network ya da filesystem privilege boundary oluşturmaz.
Gerçek bir media pipeline’da allowed coder/format, delegate ve external resource policy, memory/disk/time/image-count limits, worker privileges ve publish gate birlikte tasarlanır. ImageMagick’in birincil security policy dokümanı bu ayarların farklı sorumluluklarını anlatır; burada ImageMagick çalıştırılmaz veya policy.xml değiştirilmez. Bir subprocess timeout veya başarılı pixel decode üzerinden bütün processing isolation kontrollerini başarılı saymak kanıttan fazlasını söylemek olur.
Publish gate tamamlanmış record’a bakar
Archive output’u doğrulanmış iki public record, media output’u tamamlanmış pixel listesi olur. Worker’ın başlaması, header’ın okunması veya bir member’ın açılması başarıyla yayımlanmış output değildir. Scene work snapshot’ı ile Result consumer’ın snapshot’ı bu yüzden ayrı tutulur. Archive budget rejection herhangi bir expansion yapmaz; media incomplete case parsed dimensions gösterir ama consumer’a pixels vermez.
Arşiv veya media için kanıt eksikse durum NOT-COMPUTED kalır. Input boyutu, bildirilen ve gözlenen member boyutu, tamamlanmış record, child return code ve raster koşulları ayrı okunmalıdır. Arşiv dalı memory’de record üretir; file extraction yapmaz. Böylece bir ara işlemin tamamlanması ile consumer’a yayımlanabilecek çıktının hazır olması birbirine karıştırılmaz.
2. Red · Güven ve etki
Hareket olmadan bütün senaryoları oku
Archive bütçesi
- Formatın kabul koşulları ayrıldı
Arşiv için inputLimit=1024 seçilmiş; iki üyenin bildirilen boyutları 3 ve 5 byte. Sıkıştırılmış giriş boyutu ile açılacak toplam boyut ayrı sınırlardır.
- İşleme profili
- ZIP input: 226 bytes
- Format ve bütçe kararı
- Karar bekliyor
- Consumer çıktısı
- Output hazırlanmadı
- Negatif branch profili seçildi
archive-budget kaydı expanded-budget nedeniyle reddi tanımlar. Normal profilde expandedBudget=16 olması, bu farklı bütçe kararını normal kabul olarak okumayı haklı çıkarmaz.
- İşleme profili
- ZIP input: 226 bytes
- Format ve bütçe kararı
- Reason: expanded-budget
- Consumer çıktısı
- Output henüz kapalı
- İşleme sınırında ret verildi
Beklenen karar REJECT’tir. Bu branch decompressedMembers=0 ve expandedBytes=0 tutar; ret, tamamlanmış extraction’ın sonradan gizlenmesi değildir.
- İşleme profili
- ZIP input: 226 bytes
- Format ve bütçe kararı
- REJECT
- Consumer çıktısı
- Members=0; bytes=0
- Ara bilgi consumer verisi olmadı
Üye adlarının bilinmesi uygulama record’larının hazır olduğu anlamına gelmez. Budget gate açılmadığı için Tea ve Bread çıktısı bu branch’te üretilmez.
- İşleme profili
- ZIP input: 226 bytes
- Format ve bütçe kararı
- İşleme ilerlemedi
- Consumer çıktısı
- Consumer verisi yok
- Output sınırı kapalı tutuldu
output=null kalır. Dosya adları veya girişin küçük olması bu profile göre application record yayınlamak için yeterli değildir.
- İşleme profili
- ZIP input: 226 bytes
- Format ve bütçe kararı
- Ret kesin
- Consumer çıktısı
- Output=null
- Kontrolün kapsamı doğru bırakıldı
Bu karar bütçe politikasını gösterir; arşivin her özelliğinin güvenli olduğunu kanıtlamaz. Normal branch yalnız izinli iki üyeyi memory record’a çevirir ve diske extraction yapmaz.
- İşleme profili
- ZIP input: 226 bytes
- Format ve bütçe kararı
- Sınırlı format politikası
- Consumer çıktısı
- Yayınlanmış çıktı yok
Raster eksik
- Formatın kabul koşulları ayrıldı
Media profili en fazla 2 × 2 boyut ve 64 byte giriş kabul eder. Header’ın 1 × 1 boyut bildirmesi, gerekli üç raster byte’ın bulunduğunu henüz göstermez.
- İşleme profili
- P6 dimensions: 1 × 1
- Format ve bütçe kararı
- Karar bekliyor
- Consumer çıktısı
- Output hazırlanmadı
- Negatif branch profili seçildi
media-incomplete kaydı boyutların okunabildiği, ancak raster uzunluğunun uyuşmadığı branch’tir. Boyut bilgisi ile tamamlanmış pixel array aynı kanıt değildir.
- İşleme profili
- P6 dimensions: 1 × 1
- Format ve bütçe kararı
- Reason: raster-length
- Consumer çıktısı
- Output henüz kapalı
- İşleme sınırında ret verildi
Beklenen karar REJECT’tir. dimensions=[1,1] bilinirken pixels=null kalır; eksik raster başarılı decode veya boş resim olarak sunulmaz.
- İşleme profili
- P6 dimensions: 1 × 1
- Format ve bütçe kararı
- REJECT
- Consumer çıktısı
- Pixels=null
- Ara bilgi consumer verisi olmadı
Header’dan okunan boyutlar yalnız format değerlendirmesine katkı sağlar. Consumer’ın render edebileceği pixel içeriği doğrulanmadığından görüntü teslimi yapılmaz.
- İşleme profili
- P6 dimensions: 1 × 1
- Format ve bütçe kararı
- Decode kabul edilmedi
- Consumer çıktısı
- Consumer verisi yok
- Output sınırı kapalı tutuldu
pixels=null korunur. Ayrı bir worker’ın çalışması, eksik raster’ı kabul edilir hâle getirmez; format kararı output contract’tan önce geçmelidir.
- İşleme profili
- P6 dimensions: 1 × 1
- Format ve bütçe kararı
- Ret kesin
- Consumer çıktısı
- No image delivery
- Kontrolün kapsamı doğru bırakıldı
Bu karar dar P6 profilinin raster kontrolünü gösterir. Başka formatların decoder güvenliği veya işletim sistemi isolation garantisi bu sonuçtan çıkarılamaz.
- İşleme profili
- P6 dimensions: 1 × 1
- Format ve bütçe kararı
- Sınırlı format politikası
- Consumer çıktısı
- Yayınlanmış çıktı yok
VARSAYIM · SINIR · KONTROL
Review byte’ların hangi yetkiyle yorumlandığını sorar
Processing review, upload’un hangi extension’ı taşıdığıyla bitmez. Format admission sonrası hangi decoder, hangi resource budget ve hangi output contract seçiliyor? Archive metadata’sından filesystem path veya media name’den external delegate türetilmesi başka bir interpretation boundary açar. Bu örnekte seçilen paths/source sabittir ve işlemler örneğe ait sıradan byte’lar üzerinde yürütülür.
ZIP header listesi, decompress edilen byte sayısı ve yayımlanan record listesi ayrı olgulardır. Budget 7 nedeniyle ret verilirse hiçbir member işlenmez. İkinci member’ın içeriği reddedildiğinde ise okuma yapılmıştır ama çıktı yayımlanmaz. İkisini yalnız import failed diye birleştirmek hata sınırını saklar. İnceleme, hangi işin tamamlandığını ve consumer gate’in neyi tuttuğunu birlikte göstermelidir.
Worker adı bir trust sınırı icat etmez
Child PID’nin farklı olması process ayrımını kanıtlar. Child’ın memory, disk, network veya kernel privileges için ayrıca uygulanan bir sınır bulunduğunu kanıtlamaz. Python -I da bu sorumlulukları karşılamaz. Gerçek isolation incelemesinde gözlenen enforcement, izin verilen format/delegate kümesi ve publish gate için ayrı kanıt aranır; çalışan tek bir örnek bütün decoder ailesine genellenmez.
Eksik P6 raster dalında dimensions bilinirken pixels yoktur. Consumer bu bilgiyi tamamlanmış image gibi kullanmamalıdır. Başka format varyantlarına ilişkin kanıt bulunmuyorsa NOT-COMPUTED veya out-of-profile durumunu başarı gibi göstermek yanlış güven oluşturur. Bu örnek yalnız 14 ve 13 byte’lık iki raster girdisini ve küçük ZIP’in koşullarını kapsar; geniş bir decoder veya archive güvenliği sonucu çıkarılamaz.
3. Blue · Güvenli geliştirme ve savunma
Hareket olmadan bütün senaryoları oku
Üye hatası
- Üye işleme kaydı açıldı
partialMemberFailure kaydı decompressedMembers=2 bildirir. Bu sayı iki üyenin işleme alındığını gösterir; kabul edilen domain output sayısı değildir.
- İşleme gözlemi
- Members=2
- Kanıt karşılaştırması
- Output incelenmedi
- İnceleme sonucu
- Sonuç bekliyor
- Hata nedeni çıktıdan ayrıldı
reason=member-content ikinci kontrolün tamamlanamadığı durumu işaretler. Bir üye için hazırlanmış ara veri, tüm arşiv için kabul kararı değildir.
- İşleme gözlemi
- Reason: member-content
- Kanıt karşılaştırması
- Kabul kanıtı yok
- İnceleme sonucu
- Sonuç bekliyor
- Yayın sınırı doğrulandı
Kaydın output alanı null’dır. İşlenen iki üyeyi iki yayınlanmış record gibi saymak bu önemli negatif sınırı kaybeder.
- İşleme gözlemi
- Members=2
- Kanıt karşılaştırması
- Output=null
- İnceleme sonucu
- Yayın doğrulanmadı
- Normal kabul kaydı karşılaştırıldı
Normal archive kaydı expandedBytes=8 ile Tea ve Bread record’larını içerir. Negatif kayıtta bu array bulunmadığı için normal sonuç buraya taşınmaz.
- İşleme gözlemi
- Normal: 8 bytes
- Kanıt karşılaştırması
- Failure: output=null
- İnceleme sonucu
- Branch sonuçları ayrı
- Başarısızlık raporu dar tutuldu
İşleme başlamıştır fakat consumer output’u oluşmamıştır. Bu, sıfır işleme yapılan budget ret kaydından farklıdır; iki neden aynı sayaçla açıklanamaz.
- İşleme gözlemi
- Members işlendi
- Kanıt karşılaştırması
- Content check başarısız
- İnceleme sonucu
- Consumer output yok
- Gerekli gözlem alanları seçildi
İnceleme decision, reason, işlenen üye sayısı ve output’u birlikte ister. Yalnız işlem sayısını görmek, yayın veya başarılı decode kararı vermeye yetmez.
- İşleme gözlemi
- Sayı tek başına yetmez
- Kanıt karşılaştırması
- Output alanı gerekli
- İnceleme sonucu
- Başarı çıkarımı yok
Worker sınırı
- Worker tanımı okundu
Media worker ayrı bir Python process olarak tanımlanır. Ayrı PID, uygulama process’inin ordinary memory’sinden ayrılığı anlatır; tam bir OS sandbox garantisi vermez.
- İşleme gözlemi
- Separate process
- Kanıt karşılaştırması
- Policy incelenmedi
- İnceleme sonucu
- Sandbox sonucu yok
- Kabul edilen format daraltıldı
Bu worker yalnız dar P6 profilini işler. Normal 1 × 1 raster’da üç byte [15,118,110] bulunması, başka coder veya delegate’ların çalıştırıldığını göstermez.
- İşleme gözlemi
- P6: 1 × 1
- Kanıt karşılaştırması
- Raster: 3 bytes
- İnceleme sonucu
- Diğer coder bilinmez
- Format ve isolation kanıtı ayrıldı
Kabul edilen pixels array’i format sonucu için kanıttır. Memory, disk, network ve kernel sınırlarının uygulanması için ayrı policy ve enforcement gözlemi gerekir.
- İşleme gözlemi
- Pixels doğrulandı
- Kanıt karşılaştırması
- OS sınırları gözlenmedi
- İnceleme sonucu
- Isolation bilinmez
- Python isolation flag’i sınırlandı
Python’ın isolated mode’u interpreter ortamını sınırlar. Bunu worker’a işletim sistemi resource isolation verildiği şeklinde okumak farklı katmanları birleştirir.
- İşleme gözlemi
- Interpreter ortamı
- Kanıt karşılaştırması
- OS sandbox kanıtı değil
- İnceleme sonucu
- İddia sınırlı
- Bilinmeyen resource koşulları yazıldı
Timeout, cancellation, child cleanup ve resource policy için kanıt yoksa sonuç bilinmez kalır. Normal pixel output’u bu eksik koşulları kendiliğinden tamamlamaz.
- İşleme gözlemi
- Format sonucu bilinir
- Kanıt karşılaştırması
- Resource evidence eksik
- İnceleme sonucu
- UNKNOWN: OS enforcement
- İnceleme sonucu doğru kapsamda kaldı
Dar format kabulü ve ayrı process gözlemi birlikte tutulur; tam isolation sonucu verilmez. Consumer’a sunulan pixel verisi ile worker yetkileri farklı sorulardır.
- İşleme gözlemi
- P6 kabulü bilinir
- Kanıt karşılaştırması
- Process ayrı
- İnceleme sonucu
- Tam sandbox kanıtı yok
UYGULAMA · GÜVENLİK KONTROLÜ · DOĞRULAMA
Admission, work ve publish ayrı kapılar olsun
Archive entry count, compressed input, advertised expanded size ve işlemde üretilen byte’lar ayrı ölçülmeli. Seçilen manifest’i doğruladıktan sonra bounded stream read ve domain validation yapılır. Output storage için uygulamanın belirlediği isim seçilir; bu örnek memory record projection kullanır. Genel extraction policy’si eklenirse onun path/permissions/cleanup sorumluluğu ayrıca tasarlanmalıdır.
Media için seçilmiş format ve dimensions/output contract, converter’ın kaynak ve yetki politikasına bağlanır. ImageMagick gibi geniş araçlarda coder, delegate, memory, disk, time ve image sequence sınırları aynı ayar değildir. Bir runtime upgrade policy defaults’ını değiştirebilir; kullanılan runtime’ın enforcement davranışı yeniden gözlenir. Burada çalıştırılan worker bunları test ettiğini iddia etmez, seçilen dar P6 profilinin davranışını kanıtlar.
Eksik çıktı consumer’a geçmesin
Başarı koşulu yalnız process exit veya parse edilmiş header değildir. Archive’de kabul edilen bütün text record’ları, media’da beklenen raster verisi eksiksiz olmalıdır. Native checks, output null üreten dalları bağımsız beklenen sonuçlarla karşılaştırır. İkinci member’daki hata daha önce hazırlanmış record’u yayımlamaz; raster-length hatasında dimensions bilinse bile pixels teslim edilmez. Model durumu bu hata sınırını motion kapalıyken de gösterir.
İşin başlatılması, yürütülen işin sayacı ve publish kararı aynı ledger’da ayrı alanlar olarak tutulur. Worker error, cancellation ve timeout için cleanup; sonraki denemeler için retry policy ayrıca tasarlanmalıdır. Bunların uygulanması, başarılı tek bir decode sonucundan çıkarılamaz. Source, format ve kernel enforcement sınırları açık olduğunda bir runtime değişikliğinin hangi kontrolleri yeniden gerektirdiği anlaşılır.
ŞİMDİ VAKAYA UYGULA
Format, bütçe ve worker sınırları aynı sonucu mu kanıtlar?
İzinli katalog arşivi ve dar P6 profili farklı kontrollere sahiptir. İnceleme ara sayaçları consumer output’u veya OS isolation ile eşitlemez.
Vakadaki accepted, delivery ve committed effect kayıtlarını farklı owner’lar üzerinden oku. Caller’ın bilinmeyen sonucunu business rollback olarak yeniden adlandırma.
Bağlı vaka dosyasını aç ↗ÖRNEĞİ BİRLİKTE OKUYALIM
Atlas processing sorumluluk kaydı
Bir alan seç; hangi sonucu desteklediğini ve nerede yetersiz kaldığını incele.
Ham kaydı ve alan açıklamalarını oku
{
"profiles": {
"archive": {
"wireBytes": 226,
"inputLimit": 1024,
"members": [
"catalog.txt",
"notes.txt"
],
"advertisedMemberBytes": [
3,
5
],
"expandedBudget": 16,
"output": "application-owned memory records; no extraction"
},
"media": {
"format": "selected minimal P6",
"rawBytes": 14,
"maxInputBytes": 64,
"maxDimensions": [
2,
2
],
"normalDimensions": [
1,
1
],
"rasterBytes": 3,
"worker": "own fixed separate Python process; no OS sandbox claim"
}
},
"expected": {
"archive": {
"decision": "ACCEPT",
"reason": "approved-records",
"decompressedMembers": 2,
"expandedBytes": 8,
"output": [
{
"id": "record-1",
"title": "Tea"
},
{
"id": "record-2",
"title": "Bread"
}
]
},
"archive-budget": {
"decision": "REJECT",
"reason": "expanded-budget",
"decompressedMembers": 0,
"expandedBytes": 0,
"output": null
},
"media": {
"decision": "ACCEPT",
"reason": "selected-p6",
"dimensions": [
1,
1
],
"pixels": [
[
15,
118,
110
]
]
},
"media-incomplete": {
"decision": "REJECT",
"reason": "raster-length",
"pixels": null,
"dimensions": [
1,
1
]
}
},
"missing": {
"decision": "NOT-COMPUTED",
"output": null
},
"partialMemberFailure": {
"decompressedMembers": 2,
"output": null,
"reason": "member-content"
}
}- profiles
- Seçilen format, boyut ve consumer contract; genel amaçlı decoder değildir.
- decompressedMembers / expandedBytes
- Header’da bildirilen değerlerden ayrı, tamamlanmış ve sınırlandırılmış işlem.
- dimensions / pixels
- Dimensions alanının parse edilmesi, geçerli raster’ın teslim edildiği anlamına gelmez.
- output
- Publish gate yalnız tamamlanmış ve onaylanmış record’ları/pixel verisini kabul eder.
Örneğe ait, memory’de tutulan ZIP ve ayrı process’te çalışan sabit, dar P6 worker’ı; filesystem extraction yapılmaz. Full codec, libnetpbm/ImageMagick, OS sandbox/resource/network isolation, rastgele payload veya production intake doğrulanmaz.
İki yanlış kanı
Küçük upload ve başarılı parser bütün processing güvenliğini kanıtlar.
Arşiv açılınca oluşan byte’lar, format/dimension/work ve consumer gate ayrı policy ister.
Ayrı process veya Python -I tam security sandbox’tır.
Process/import ayrımı ile OS privilege/resource/network sınırlarının uygulanması farklı kanıtlar gerektirir.
SIRA SENDE
Bu hikâyeyi sen çöz.
Sonucu tahmin et, kanıtın sınırını bul ve nedenini kendi cümlenle anlat.
P6 için dimensions=[1,1], fakat raster-length koşulu geçmiyor. Pixel sonucu kabul edilir mi?
- Evet. Geçerli width/height bütün decoder sonucunu garanti eder.
- Hayır. media-incomplete REJECT; pixels=null.
Gerekçeli cevabı oku
Hayır. media-incomplete REJECT; pixels=null. — Dimension bilgisi bilinse de raster tam değil. Bu profile eksik pixel verisini tahmin ederek başarı üretmez.
İki member decompress edildi, fakat member-content hatası var ve output=null. İlk kayıtların yayımlandığı çıkarılır mı?
Dersten seçilen artifact alanları; öğretim örneği
- profiles.archive.output
- application-owned memory records; no extraction
- partialMemberFailure
- {"decompressedMembers":2,"output":null,"reason":"member-content"}
- expected.archive.output
- [{"id":"record-1","title":"Tea"},{"id":"record-2","title":"Bread"}]
- Hayır. Bu failure sonucu hiçbir output vermiyor.
- Evet. Decompress edilen her member anında public file olur.
Gerekçeli cevabı oku
Hayır. Bu failure sonucu hiçbir output vermiyor. — decompressedMembers=2 başarıya eşit değildir. Output application-owned memory record’larıdır; disk extraction veya kısmi publication gösterilmez.
Archive için input limit ve expanded budget hangi farklı boyutları sınırlar? Media worker’ın ayrı process’te çalışması neden tam OS sandbox kurulduğunu göstermez?
Gerekçeli cevabı oku
Archive input limit sıkıştırılmış girdinin byte sayısını; expanded budget açılacak member toplamını sınırlar. Member content ayrıca doğrulanır. Media akışında sabit P6 worker ayrı process’te çalışır ve dimensions/raster koşullarını kontrol eder; archive bu child’da işleniyor sayılmaz. Ayrı process tek başına filesystem/network/capability isolation veya kernel sınırlarını kanıtlamaz. Her profil kendi kabul ve consumer output koşullarını sağlamalıdır.
□ Wire/input bütçesi ile expanded output bütçesini ayırdım.
□ Ayrı process’i tam OS sandbox veya genel decoder güvenliği saymadım.
Uygulama konsolunu aç · request / response / browser
Request, URL, cookie ve DOM örneklerini ayrıca aç
Kaynaklar ve kapsam
- Python — zipfileZipFile.infolist / ZipFile.open / ZipInfo.file_size · Decompression pitfalls; resources and interruption
- OWASP — File Upload Cheat SheetFile Content Validation; media processing limitations · Upload and Download Limits; expanded-size considerations
- Netpbm — PPM Format SpecificationTHE FORMAT; width/height/Maxval/raster · Minimal Subset; one image
- ImageMagick — Security PolicySelecting the Right Security Policy for Your Environment · Security Policy Discussion; delegate/format/resource controls
- Python — subprocesssubprocess.run; timeout/check/env · Security Considerations
- Python — Command line and environment-I; Python isolated mode is import/environment behavior