Hacker DirectoryHacker Directory
Öğrenmeye devam et
ENHTML kaydet ↓

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.

CORE · RED · BLUE · ARTIFACT · PRACTICE

1. Core · Mekanizma

Hareket olmadan bütün senaryoları oku

Onaylı arşiv

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

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

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

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

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

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

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

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

  1. Evet. Geçerli width/height bütün decoder sonucunu garanti eder.
  2. 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"}]
  1. Hayır. Bu failure sonucu hiçbir output vermiyor.
  2. 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