WEB / WEB-16.S02
Command, template ve XML interpretation boundaries
Executable, template source, XML grammar ve kabul edilen verinin farklı sahiplerini izle.
1. Core · Mekanizma
Hareket olmadan bütün senaryoları oku
Sabit child
- Yorumlama isteği hazır
Örnekte command profili ve O'Reilly & Tea değeri hazırdır. Uygulama henüz interpreter’ı çalıştırmadı; sonuç görünümünde tamamlanmış veya kabul edilmiş çıktı yoktur.
- Girdi değeri
- O'Reilly & Tea
- Contract kontrolü
- Profil seçilmedi
- Interpreter
- Yorumlama tamamlanmadı
- Sonuç görünümü
- Sonuç yok
- Profil contract seçimi
Uygulama kendi Python executable’ını ve sabit argument-echo child code’unu seçer. O'Reilly & Tea yalnız tek argv değeridir; shell=False. Bu profil executable veya shell programı seçme yetkisi vermez.
- Girdi değeri
- O'Reilly & Tea
- Contract kontrolü
- Uygulama profili seçildi
- Interpreter
- Yorumlama tamamlanmadı
- Sonuç görünümü
- Sonuç yok
- Yorumlama tamamlandı
Child tamamlandı ve argc=1, title=O'Reilly & Tea JSON sonucunu döndürdü. Apostrophe ve ampersand tek title’da korundu; sonuç görünümü henüz güncellenmedi.
- Girdi değeri
- O'Reilly & Tea
- Contract kontrolü
- Uygulama profili seçildi
- Interpreter
- Yorumlama tamam; count=1
- Sonuç görünümü
- Sonuç yok
- Consumer shape kararı
Uygulama tamamlanan echo çıktısında tek argument ve aynı title’ı görür; command-data sonucu ACCEPT olur. Bu kabul başka aracın option, path veya privilege policy’sini doğrulamaz.
- Girdi değeri
- O'Reilly & Tea
- Contract kontrolü
- Çıktı kabul edildi
- Interpreter
- Yorumlama tamam; count=1
- Sonuç görünümü
- Sonuç yok
- Onaylı çıktı hazır
Consumer için kabul edilmiş çıktı hazırdır: argc=1; title=O'Reilly & Tea. Bu yerel hazırlık sonuç görünümünü henüz değiştirmez; yeni HTTP response veya browser delivery çizilmez.
- Girdi değeri
- O'Reilly & Tea
- Contract kontrolü
- Çıktı kabul edildi
- Interpreter
- argc=1; title=O'Reilly & Tea hazır
- Sonuç görünümü
- Sonuç yok
- Sonuç görünümü tamam
Sonuç görünümü şimdi kabul edilmiş argc=1; title=O'Reilly & Tea çıktısını gösterir. Interpreter completion ile consumer’ın bu çıktıyı kullanması ayrıdır; bu adım browser rendering veya başka business action kanıtı değildir.
- Girdi değeri
- O'Reilly & Tea
- Contract kontrolü
- Çıktı kabul edildi
- Interpreter
- argc=1; title=O'Reilly & Tea hazır
- Sonuç görünümü
- argc=1; title=O'Reilly & Tea
Sabit template
- Yorumlama isteği hazır
Örnekte template profili ve Tea & Bread değeri hazırdır. Uygulama henüz interpreter’ı çalıştırmadı; sonuç görünümünde tamamlanmış veya kabul edilmiş çıktı yoktur.
- Girdi değeri
- Tea & Bread
- Contract kontrolü
- Profil seçilmedi
- Interpreter
- Yorumlama tamamlanmadı
- Sonuç görünümü
- Sonuç yok
- Profil contract seçimi
Uygulama sabit <p>$title</p> string.Template source’unu seçer. Tea & Bread, HTML text context için Tea & Bread olarak temsil edilir; title yeni template source değildir.
- Girdi değeri
- Tea & Bread
- Contract kontrolü
- Uygulama profili seçildi
- Interpreter
- Yorumlama tamamlanmadı
- Sonuç görünümü
- Sonuç yok
- Yorumlama tamamlandı
Sabit template’in substitution işlemi <p>Tea & Bread</p> string’ini üretti. Bu tamamlanmış HTML text serialization’dır; browser parse veya pixel sonucu değildir.
- Girdi değeri
- Tea & Bread
- Contract kontrolü
- Uygulama profili seçildi
- Interpreter
- Yorumlama tamam; count=1
- Sonuç görünümü
- Sonuç yok
- Consumer shape kararı
Gerekli title mapping’i vardır ve template-data çıktısı ACCEPT olur. Sabit source ile encoded value ayrı kalır; bu karar başka output context’leri veya tam template engine güvenliğini doğrulamaz.
- Girdi değeri
- Tea & Bread
- Contract kontrolü
- Çıktı kabul edildi
- Interpreter
- Yorumlama tamam; count=1
- Sonuç görünümü
- Sonuç yok
- Onaylı çıktı hazır
Consumer için kabul edilmiş çıktı hazırdır: <p>Tea & Bread</p>. Bu yerel hazırlık sonuç görünümünü henüz değiştirmez; yeni HTTP response veya browser delivery çizilmez.
- Girdi değeri
- Tea & Bread
- Contract kontrolü
- Çıktı kabul edildi
- Interpreter
- <p>Tea & Bread</p> hazır
- Sonuç görünümü
- Sonuç yok
- Sonuç görünümü tamam
Sonuç görünümü şimdi kabul edilmiş <p>Tea & Bread</p> çıktısını gösterir. Interpreter completion ile consumer’ın bu çıktıyı kullanması ayrıdır; bu adım browser rendering veya başka business action kanıtı değildir.
- Girdi değeri
- Tea & Bread
- Contract kontrolü
- Çıktı kabul edildi
- Interpreter
- <p>Tea & Bread</p> hazır
- Sonuç görünümü
- <p>Tea & Bread</p>
Book XML
- Yorumlama isteği hazır
Örnekte xml profili ve <book><title>Tea</title></book> değeri hazırdır. Uygulama henüz interpreter’ı çalıştırmadı; sonuç görünümünde tamamlanmış veya kabul edilmiş çıktı yoktur.
- Girdi değeri
- <book><title>Tea</title></book>
- Contract kontrolü
- Profil seçilmedi
- Interpreter
- Yorumlama tamamlanmadı
- Sonuç görünümü
- Sonuç yok
- Profil contract seçimi
Uygulama 128 byte, depth=3 ve nodes=16 sınırları olan XML profilini seçer. DTD reddi ve external-entity policy ayrı ayarlardır; book/title domain shape’i parse sonrası denetlenir.
- Girdi değeri
- <book><title>Tea</title></book>
- Contract kontrolü
- Uygulama profili seçildi
- Interpreter
- Yorumlama tamamlanmadı
- Sonuç görünümü
- Sonuç yok
- Yorumlama tamamlandı
XML grammar parse’i tamamlandı: root=book, title=Tea ve executions=1. Parse edilmiş tree henüz kabul edilmiş book record’u değildir; sonuç görünümü değişmedi.
- Girdi değeri
- <book><title>Tea</title></book>
- Contract kontrolü
- Uygulama profili seçildi
- Interpreter
- Yorumlama tamam; count=1
- Sonuç görünümü
- Sonuç yok
- Consumer shape kararı
Root book, tek title child ve attributes/nested-child yokluğu domain contract’ını sağlar. xml-record ACCEPT olur; yalnız title=Tea projection’ı kabul edilir.
- Girdi değeri
- <book><title>Tea</title></book>
- Contract kontrolü
- Çıktı kabul edildi
- Interpreter
- Yorumlama tamam; count=1
- Sonuç görünümü
- Sonuç yok
- Onaylı çıktı hazır
Consumer için kabul edilmiş çıktı hazırdır: title=Tea. Bu yerel hazırlık sonuç görünümünü henüz değiştirmez; yeni HTTP response veya browser delivery çizilmez.
- Girdi değeri
- <book><title>Tea</title></book>
- Contract kontrolü
- Çıktı kabul edildi
- Interpreter
- title=Tea hazır
- Sonuç görünümü
- Sonuç yok
- Sonuç görünümü tamam
Sonuç görünümü şimdi kabul edilmiş title=Tea çıktısını gösterir. Interpreter completion ile consumer’ın bu çıktıyı kullanması ayrıdır; bu adım browser rendering veya başka business action kanıtı değildir.
- Girdi değeri
- <book><title>Tea</title></book>
- Contract kontrolü
- Çıktı kabul edildi
- Interpreter
- title=Tea hazır
- Sonuç görünümü
- title=Tea
Yanlış XML root
- Yorumlama isteği hazır
Örnekte xml profili ve <display><title>Tea</title></display> değeri hazırdır. Uygulama henüz interpreter’ı çalıştırmadı; sonuç görünümünde tamamlanmış veya kabul edilmiş çıktı yoktur.
- Girdi değeri
- <display><title>Tea</title></display>
- Contract kontrolü
- Profil seçilmedi
- Interpreter
- Yorumlama tamamlanmadı
- Sonuç görünümü
- Sonuç yok
- Profil contract seçimi
Uygulama 128 byte, depth=3 ve nodes=16 sınırları olan XML profilini seçer. DTD reddi ve external-entity policy ayrı ayarlardır; book/title domain shape’i parse sonrası denetlenir.
- Girdi değeri
- <display><title>Tea</title></display>
- Contract kontrolü
- Uygulama profili seçildi
- Interpreter
- Yorumlama tamamlanmadı
- Sonuç görünümü
- Sonuç yok
- Yorumlama tamamlandı
XML grammar parse’i tamamlandı: root=display, title=Tea ve executions=1. Parse edilmiş tree henüz kabul edilmiş book record’u değildir; sonuç görünümü değişmedi.
- Girdi değeri
- <display><title>Tea</title></display>
- Contract kontrolü
- Uygulama profili seçildi
- Interpreter
- Yorumlama tamam; count=1
- Sonuç görünümü
- Sonuç yok
- Consumer shape kararı
Root display, book/title contract’ına uymaz. Grammar parse’i tamamlanmış olsa da xml-shape REJECT olur; title=Tea kabul edilmiş book projection’ına dönüştürülmez.
- Girdi değeri
- <display><title>Tea</title></display>
- Contract kontrolü
- Reddedildi: xml-shape
- Interpreter
- Yorumlama tamam; count=1
- Sonuç görünümü
- Sonuç yok
- Reddedilen XML çıktısı tutuldu
XML parse tamamlandı ama display root’u book contract’ına uymadı. Output null tutulur; consumer için onaylı record hazırlanmaz.
- Girdi değeri
- <display><title>Tea</title></display>
- Contract kontrolü
- Reddedildi: xml-shape
- Interpreter
- Yalnız parse edilmiş tree; output null
- Sonuç görünümü
- Sonuç yok
- Sonuç görünümü tamam
Görünüm xml-shape reddini ve output=null sonucunu gösterir. Parse edilmiş display/title tree’si kabul edilmiş Tea book veya boş başarı olarak sunulmaz.
- Girdi değeri
- <display><title>Tea</title></display>
- Contract kontrolü
- Reddedildi: xml-shape
- Interpreter
- Yalnız parse edilmiş tree; output null
- Sonuç görünümü
- Sonuç yok; xml-shape
ROLLER · STATE · VERİ AKIŞI
Interpreter seçimi input’un işi değildir
Atlas book preview’de title, sabit bir programın argument’ı, sabit bir template’in value’su veya sabit bir XML record’un field’ı olabilir. Bu üç görev aynı string üzerinde aynı kuralla yürütülmez. Uygulama operation profile’ını seçer; caller title vererek executable, template source veya XML query expression yazma yetkisi kazanmaz. Önceki validation dersindeki typed record burada bir sonraki interpreter’a nasıl aktarılacağını belirleyen contract’la birleşir.
Bu artifact yalnız önceden belirlenmiş dört sıradan örnek kullanır: O'Reilly & Tea child argument’ı, Tea & Bread HTML text’i, book/title XML record’u ve sıradan display/title record’u. Profil eksikse NOT-COMPUTED, tanınmıyorsa REJECT olur. Tür veya uzunluk kontrolünü geçmek interpretation’ın başarıyla tamamlandığı anlamına gelmez. Native sonuç, interpreter’ın gerçek çıktısını ve uygulamanın onu kabul edilmiş record olarak tüketip tüketmediğini ayrı gösterir.
Command argument ile shell programı ayrılır
Native check kendi Python executable’ını, sabit child code’u ve title için tek argument’ı bir sequence içinde başlatır. shell=False kullanılır. Child yalnız argument count ve title’ı JSON olarak geri verir; O'Reilly & Tea tek title olarak kalır, argc=1 görülür. Bu gözlem bir shell escape tarifi değildir. Program source ve executable uygulamanın sabitleridir; title bu seçimi değiştirmez.
Argument’ları ayrı vermek yine de bütün business policy’nin yerine geçmez. Bazı araçlar argument’ları option, path veya destination olarak yorumlar; bu anlam ayrıca onaylı operation contract’ı ister. Buradaki child option parser kullanmaz ve network/file operation yapmaz. Sabit child environment, timeout=5 ve check=True bu çalıştırma için seçilen profildir; timeout genel OS resource isolation kanıtı değildir. Sonuç macOS’te gözlenmiştir; Python dokümantasyonunun Windows batch-file uyarısı bütün platformları tek davranışa indirgememeyi hatırlatır.
Template source sabit, value ayrı kalır
Bu örnekte Python string.Template için source <p>$title</p> uygulamada sabittir. Tea & Bread title’ı HTML text context için Tea & Bread olarak serialize edilir, sonra title value’su substitute edilir. Tamamlanan string <p>Tea & Bread</p> olur. Template seçimi ile output encoding farklı sorulardır: biri server’ın hangi presentation programını yorumladığı, diğeri value’nun hedef text context’inde nasıl temsil edildiğidir.
Bir value içine sıradan $catalog label’ı gelirse ikinci bir substitution pass yapılmaz. Native check bunu sabit Book: $title template’iyle gözler. Python string.Template, Python 3.14 t-string özelliği veya tam Jinja/Twig engine değildir. Bu basit engine’in sonucu bütün server-side template engine sandbox’larının güvenli olduğunu kanıtlamaz. Template source’un kullanıcı girdisiyle birleştirilmesi, source/data ownership’ini değiştirir; bu derste executable user template veya vulnerability payload çalıştırılmaz.
XML parse ve domain record iki aşamadır
XML örneği, memory stream’den en çok 128 UTF-8 byte ve seçilmiş küçük tree sınırı ile okunur. Kullanılan SAX parser’da external-general ve external-parameter entity feature’ları false seçilir; lexical startDTD callback’i bütün DTD declaration’larını reddeder. Entity resolver dış kaynak açmak yerine isteği reddeder. Bu seçimler yalnız parser adı üzerinden varsayılmaz: native sonuç gözlenen feature değerlerini kaydeder.
Sıradan <book><title>Tea</title></book> parse olur. Sonra uygulama root book, tek title child, attributes yok, nested child yok ve title için 1–40 code point contract’ını kontrol eder. <display><title>Tea</title></display> grammar olarak parse olur ama domain shape’e uymaz. Bu nedenle XML execution count=1 iken kabul edilmiş çıktı yoktur; output null kalır. Parse edilmiş tree’yi başarıyla tüketilmiş book gibi göstermek iki boundary’yi birbirine karıştırır.
XML tree, XPath seçimi ve external kaynak farklıdır
Uygulamanın belirlediği title path’i ElementTree find ile seçilir. Bu library, ElementPath/XPath’in sınırlı bir alt kümesini sunar; native check tam bir XPath engine çalıştırmış sayılmaz. Kullanıcının title value’su selection expression’ına eklenmez. XML document fields’ını doğrulamak, bir query language expression’ının application tarafından sahiplenilmesinden farklı sorumluluktur. Namespace ve başka schema profilleri bu küçük book formatının dışında kalır.
External entity resolution, XML node seçimiyle aynı işlem değildir: resolver bir dış kaynağa erişim sınırı kurabilir. Burada hiçbir external reference veya entity payload verilmez. Sadece zararsız, boş bir DTD declaration seçilmiş callback’te reddedilerek policy’nin devreye girdiği gözlenir. Resolver call count bu sıradan örneklerde 0’dır. Bu gözlem bütün XML library’leri, XSLT transform’ları, document expansion ve general resource exhaustion için conformance veya network isolation kanıtı değildir.
2. Red · Güven ve etki
Hareket olmadan bütün senaryoları oku
XML shape
- XML consumer contract seçildi
XML profile book/title ve attributes/nested child bulunmayan shape ister. Input display/title olduğunda well-formed syntax aynı application record’u kurmaz.
- Interpreter source/input
- display/title input
- Interpretation/consumer gate
- Parser sonucu yok
- Output boundary
- Book record yok
- Parser bütçeleri ayrı okundu
byteBudget=128, maxDepth=3 ve maxNodes=16 seçilidir. Küçük ve normal XML input’un bu bütçeler içinde olması domain shape acceptance’ı tamamlamaz.
- Interpreter source/input
- Bounded XML input
- Interpretation/consumer gate
- Budget context known
- Output boundary
- Book record yok
- Interpretation sonucu consumer’dan ayrıldı
expected xml-shape executions=1 taşır; interpretation aşaması çalışmıştır. Root display olduğundan record extraction rule book/title ile eşleşmez.
- Interpreter source/input
- Parsed display root
- Interpretation/consumer gate
- Shape mismatch known
- Output boundary
- No accepted book record
- Output projection durduruldu
decision=REJECT, reason=xml-shape ve output=null kalır. Parse edilmiş title Tea, consumer’da kabul edilmiş Tea book record’u diye gösterilmez.
- Interpreter source/input
- Parsed data exists
- Interpretation/consumer gate
- Consumer rejected shape
- Output boundary
- Output=null
- Parser config schema yerine kullanılmadı
DTD reject ve external entity feature flags ayrı interpreter controls’dür. Bunların seçilmesi yanlış application root’unu kabul ettirmez.
- Interpreter source/input
- Interpreter profile known
- Interpretation/consumer gate
- Domain shape remains required
- Output boundary
- Output=null
- Failure owner’ı doğru kaldı
Bu branch syntax failure değil, consumer shape rejection’dır. Gerçek dış XML, entity expansion veya exploit payload çalıştırıldığı sonucu eklenmez.
- Interpreter source/input
- Known: interpretation ran
- Interpretation/consumer gate
- Known: xml-shape denial
- Output boundary
- No accepted output
Command data
- Uygulamanın process source’u seçildi
Profile executable ve fixed argument echo child’ı uygulama tarafından seçer. O'Reilly & Tea title’ı program source’u değil data argument’ıdır.
- Interpreter source/input
- Fixed echo profile
- Interpretation/consumer gate
- Data argument hazırlanıyor
- Output boundary
- Output yok
- Shell ve argument sözleşmesi ayrıldı
shell=false ve titleArguments=1 verilmiştir. Ampersand veya apostrophe’nin korunması arbitrary command seçme capability’si vermez.
- Interpreter source/input
- Title data only
- Interpretation/consumer gate
- One argument; shell=false
- Output boundary
- Output yok
- Tamamlanmış child output okundu
Expected output argc=1 ve title=O'Reilly & Tea taşır. Child result gelmeden consumer’ın bu sonucu bildiği varsayılmaz; bu scene tamamlanmış observation’ı inceler.
- Interpreter source/input
- Fixed process interpretation
- Interpretation/consumer gate
- Completed argc=1 output
- Output boundary
- Harmless title preserved
- Successful echo semantic permission sayılmadı
Bir argument’ın korunması conversion tool için option, destination veya privilege policy’yi doğrulamaz. shell=false bütün process sandbox’ı demek değildir.
- Interpreter source/input
- One data argument retained
- Interpretation/consumer gate
- Source/data boundary explicit
- Output boundary
- No arbitrary-tool permission
- Interpreter rolü diğer sink’lere taşınmadı
Command argument boundary, template source veya XML path için aynı API değildir. Her interpreter’ın trusted source ve data slot sözleşmesi ayrıca seçilir.
- Interpreter source/input
- Command data role known
- Interpretation/consumer gate
- Other interpreter contracts separate
- Output boundary
- No universal interpretation claim
- Native observation scope’u korundu
Artifact bu fixed echo’nun data sonucunu gösterir; yeni process bu scene tarafından çalıştırılmaz. Arbitrary command, network isolation veya general sandbox garantisi eklenmez.
- Interpreter source/input
- Known: fixed argument observation
- Interpretation/consumer gate
- Known: title preserved
- Output boundary
- Broader process safety unverified
VARSAYIM · SINIR · KONTROL
Review hangi source’u kimin seçtiğini izler
Command, template ve XPath review’lerinde aynı soru işe yarar: interpretation source’u hangi güvenilen code seçiyor, hangi alan yalnız data olarak geliyor? Program adı, child source, template source ve sabit title path artifact’te ayrı görünür. Sıradan title’ın eksiksiz korunması value boundary’sine ilişkin kanıttır. Bu kanıt, caller’ın executable veya expression seçebildiğini söylemez.
Review raporu library adını tek başına sonuç gibi sunmamalı. shell=False command semantic validation’ını otomatik yapmaz; HTML encoding server template source ownership’ini kurmaz; XML feature flag schema validation’ı tamamlamaz. Her biri başka bir boundary’ye aittir. Buradaki kontroller kullanılan runtime’da dar bir profili gözler, herhangi bir target üzerinde command/template/XML exploit denemesi yapmaz.
Başarılı interpreter, başarısız consumer olabilir
XML wrong-root case’inde parser’ın tamamlanması gözlenen bir olgudur; application’ın book record kabul etmesi başka bir karardır. Execution count=1 ve output null birlikte tutulur. Error’ı yalnız parse error diye adlandırmak gerçek failure boundary’yi kaybettirir. Command case’inde child’ın ürettiği stdout gelmeden result view değişmez; Template case’inde serialized output’a browser render sonucu eklenmez.
Eksik profil ile tanınmayan profil de eşitlenmez. Eksik kanıttan policy kararı üretmek, audit’in hangi source’u gördüğünü belirsiz bırakır. İnceleme için profil adı, typed value, tamamlanmış çıktı ve consumer kararı yeterli bir başlangıçtır. Native child code, güvenilen template ve örneğe ait memory XML dışında bir interpreter ya da özel dosya okunmaz; kanıt kapsamı bu sabit örneklerden elde edilen sıradan gözlemlerle sınırlıdır.
3. Blue · Güvenli geliştirme ve savunma
Hareket olmadan bütün senaryoları oku
Template output
- Template source/data observation seçildi
Template source sabit <p>$title</p> ve library string.Template’tir; t-string değildir. Source seçimi ile title data’sı ayrı kaydedilir.
- Interpretation observation
- Fixed template source
- Profile/result review
- Mapping incelenmedi
- Evidence conclusion
- Render evidence yok
- Harmless title mapping okundu
Input Tea & Bread title değeridir. Application’ın sabit slot’una verilir; input source registry’si veya başka template programı seçmez.
- Interpretation observation
- Tea & Bread data
- Profile/result review
- Fixed $title slot
- Evidence conclusion
- Render evidence yok
- HTML text serialization karşılaştırıldı
Expected output <p>Tea & Bread</p> olarak verilmiştir. executions=1 bu selected transformation’a aittir, browser parsing sonucuna değil.
- Interpretation observation
- Raw title known
- Profile/result review
- HTML text output known
- Evidence conclusion
- Browser parse not observed
- Context-specific encoder sınırı korundu
HTML text output’un doğru olması attribute, URL veya script encoding kurallarını tamamlamaz. Template source ownership ile output encoding de aynı kontrol değildir.
- Interpretation observation
- Fixed text context
- Profile/result review
- Other context rules separate
- Evidence conclusion
- No universal template safety claim
- Missing mapping empty success sayılmadı
Consumer required title alanını ister. Gerekli mapping eksik olduğunda boş kabul edilmiş book veya output üretildiği varsayılmaz; ilgili library error ayrıca gözlenir.
- Interpretation observation
- Required title mapping
- Profile/result review
- Missing-data handling separate
- Evidence conclusion
- No guessed empty success
- Transformation kanıtı kapsamlandı
Bu ledger fixed template ve benign title serialization sonucunu açıklar. Full template engine, server permission veya client pixels için ayrı runtime evidence gerekir.
- Interpretation observation
- Known: fixed source/data roles
- Profile/result review
- Known: encoded public output
- Evidence conclusion
- UNKNOWN: client rendering
Profile eksik
- Missing profile observation seçildi
missing.profile=null kaydı hangi interpreter contract’ının seçildiği hakkında yeterli input olmadığını gösterir. Normal command veya XML branch’i otomatik yerine konmaz.
- Interpretation observation
- Profile=null
- Profile/result review
- Interpreter seçilmedi
- Evidence conclusion
- Output yok
- NOT-COMPUTED sonucu okundu
decision=NOT-COMPUTED olarak verilmiştir. Bu durum known xml-shape rejection veya accepted command-data sonucu değildir.
- Interpretation observation
- Profile=null
- Profile/result review
- Decision NOT-COMPUTED
- Evidence conclusion
- Output yok
- Execution counter ayrı okundu
executions=0 hiç interpreter çalıştırılmadığı branch’i korur. Missing input’dan syntax, child exit veya crypto failure sonucu çıkarılmaz.
- Interpretation observation
- Profile=null
- Profile/result review
- Executions=0
- Evidence conclusion
- No interpreter outcome
- Consumer output boş tutuldu
output=null kalır. Scope bilinmeden title Tea veya normal template body’si consumer’da accepted result gibi gösterilmez.
- Interpretation observation
- Profile=null
- Profile/result review
- No accepted projection
- Evidence conclusion
- Output=null
- Source ve profile kanıtı istendi
Profile adı, typed input ve completed result kendi source’larıyla gerekir. UI’daki seçenek adı bu eksik execution kararını tamamlamaz.
- Interpretation observation
- Missing profile known
- Profile/result review
- Profile/input/result evidence required
- Evidence conclusion
- UNKNOWN: intended interpretation
- Eksik profile hükmü genişlemedi
Bu case’de execution yapılmadığı bilinir; hangi interpreter başarılı veya hatalı olurdu bilinmez. Arbitrary input veya özel dosya okumaya geçilmez.
- Interpretation observation
- Known: no interpreter execution
- Profile/result review
- Known: output withheld
- Evidence conclusion
- UNKNOWN: intended profile outcome
UYGULAMA · GÜVENLİK KONTROLÜ · DOĞRULAMA
Profile ve consumer contract’ını birlikte kapat
Mümkün olan yerde built-in library kullanarak process invocation ihtiyacını azalt. Process gerektiğinde uygulamanın seçtiği executable ve sabit arguments ile başla; text’i shell programı olarak birleştirme. Bu örneğin child’ı yalnız title’ı geri okur. Gerçek bir conversion tool için option/destination policy, privileges ve resource limit ayrıca gerekir. Bunlar başarılı argc=1 sonucu üzerinden doğrulanmış sayılmaz.
Template için source registry ve data mapping ayrı tutulur. Output HTML text ise encoding o context’te yapılır; attribute, URL veya script context başka kurallar ister. XML için kullanılan parser config, DTD policy, external resolver policy ve domain shape ayrı kaydedilir. Parser değiştiğinde bu ayarların desteklendiği ve beklenen sonucu ürettiği yeniden kontrol edilmelidir; library adının aynı kalması yeterli değildir.
Sadece kabul edilmiş çıktı tüketilsin
Consumer’a parse edilmiş bütün tree’yi veya tamamlanmamış child state’ini verme. Interpretation tamamlandıktan sonra onaylı record/projection hazırlanır; reddedilen shape için output null kalır. XML case’in parsed display root’u UI’da kabul edilmiş Tea book gibi görünmez. Template mapping’de gerekli value eksikse KeyError gözlenir; eksik verinin otomatik olarak boş bir başarıya dönüşmesi beklenmez.
Bu ayrım regression check için bağımsız beklenen output gerektirir. Sıradan title child’dan aynı bir argument olarak dönmeli, ampersand sabit HTML text’te doğru serialize edilmeli, book/title record’u seçilmeli, display root’u reddedilmelidir. Zararsız DTD örneği yalnız callback rejection’ını doğrular. Network isolation, arbitrary entity expansion, command sandbox, full template engine veya full XPath conformance ayrıca kanıt ister. UI hareketi kapatıldığında aynı output/decision bilgisi metin halinde kalır.
ŞİMDİ VAKAYA UYGULA
Interpreter success hangi consumer kabulünü tamamlamaz?
Fixed command, template ve XML profile’ları source ile data rollerini ayırır. Shape denial ve missing profile aynı failure değildir.
Vakadaki input, server işleme ve response için karar sırasını çıkar. Parsed veya valid data ile completed operation aynı sonuç değildir; hangi owner’ın hangi koşulu değerlendirdiğini belirt.
Bağlı vaka dosyasını aç ↗ÖRNEĞİ BİRLİKTE OKUYALIM
Atlas interpreter ve onaylı çıktı kaydı
Bir alan seç; hangi sonucu desteklediğini ve nerede yetersiz kaldığını incele.
Ham kaydı ve alan açıklamalarını oku
{
"profiles": {
"command": {
"executable": "own Python runtime",
"source": "fixed argument echo child",
"shell": false,
"titleArguments": 1,
"timeoutSeconds": 5,
"childEnvironment": {
"PYTHONIOENCODING": "utf-8"
}
},
"template": {
"source": "<p>$title</p>",
"library": "string.Template; not t-string",
"encoding": "HTML text"
},
"xml": {
"byteBudget": 128,
"maxDepth": 3,
"maxNodes": 16,
"DTD": "reject startDTD",
"externalGeneralEntities": false,
"externalParameterEntities": false,
"path": "title",
"shape": "book/title with no attributes/nested child"
}
},
"inputs": {
"command": {
"profile": "command",
"value": "O'Reilly & Tea"
},
"template": {
"profile": "template",
"value": "Tea & Bread"
},
"xml": {
"profile": "xml",
"value": "<book><title>Tea</title></book>"
},
"xml-shape": {
"profile": "xml",
"value": "<display><title>Tea</title></display>"
}
},
"expected": {
"command": {
"decision": "ACCEPT",
"reason": "command-data",
"executions": 1,
"output": {
"argc": 1,
"title": "O'Reilly & Tea"
}
},
"template": {
"decision": "ACCEPT",
"reason": "template-data",
"executions": 1,
"output": "<p>Tea & Bread</p>"
},
"xml": {
"decision": "ACCEPT",
"reason": "xml-record",
"executions": 1,
"output": {
"title": "Tea"
}
},
"xml-shape": {
"decision": "REJECT",
"reason": "xml-shape",
"executions": 1,
"output": null
}
},
"missing": {
"profile": null,
"decision": "NOT-COMPUTED",
"executions": 0,
"output": null
}
}- profiles
- Uygulamanın seçtiği source, config ve consumer contract.
- executions
- Tamamlanan child/substitution/parse işlemi; XML shape reddi parse’den sonra olabilir.
- output
- Consumer’ın kabul ettiği çıktı; shape reddedilirse null.
- missing
- Eksik profile hakkında yorumlama sonucu uydurulmaz.
Örneğin sabit Python child işlemi, string.Template/HTML text ve sınırlandırılmış sıradan SAX/limited ElementPath işlemleri. Shell, çalıştırılabilir client template, XXE payload, dış kaynak, full XPath/engine sandbox, browser veya authorization çalıştırılmaz.
İki yanlış kanı
shell=False bütün argument semantiğini doğrular.
Shell sınırı ile aracın option/path/destination policy’si farklıdır.
XML parse veya HTML escape, her interpretation boundary’yi kapatır.
Source sahipliği, parser policy’si, schema ve output context ayrı kararlar ister.
SIRA SENDE
Bu hikâyeyi sen çöz.
Sonucu tahmin et, kanıtın sınırını bul ve nedenini kendi cümlenle anlat.
XML parse çalışıyor, fakat root display; sözleşme book/title istiyor. Output record kabul edilir mi?
- Evet. Title text’i bulunduysa bütün XML root’ları eşdeğerdir.
- Hayır. xml-shape REJECT; output=null.
Gerekçeli cevabı oku
Hayır. xml-shape REJECT; output=null. — executions=1 parser’ın çalışmasını gösterir. Bu, root/child sözleşmesinin kabul edildiği anlamına gelmez.
O’Reilly & Tea başlığı bu command örneğinde neden tek data argümanı olarak kalıyor?
Dersten seçilen artifact alanları; öğretim örneği
- profiles.command.shell
- false
- profiles.command.titleArguments
- 1
- inputs.command.value
- O'Reilly & Tea
- expected.command.output
- {"argc":1,"title":"O'Reilly & Tea"}
- shell=false ve output argc=1.
- Ampersand bulunduğu için her zaman ikinci command çalışır.
Gerekçeli cevabı oku
shell=false ve output argc=1. — Başlık ayrı argv değeri olarak sabit echo child’a verilir. Bu sözleşme onu shell source veya executable seçimi olarak kullanmaz.
Template source sabit <p>$title</p>; output <p>Tea & Bread</p>. Template, command ve XML için neden tek bir escaping çözümü yeterli değildir?
Gerekçeli cevabı oku
Template bu örnekte sabit string.Template source’una HTML text olarak encoded data yerleştirir; data yeni template source değildir. Command ayrı argv ve shell=false kullanır. XML kendi byte/depth/node, DTD ve entity policy’siyle parse edilir. Bir context’in encoding’i diğer interpreter’ın bütün güven koşullarını sağlamaz. Bu sonlu örnekler keyfi template, command veya XML runtime’ı sunmaz.
□ Data ile interpreter source’unu ayırdım.
□ Her context’in ayrı grammar ve policy koşullarını belirttim.
Uygulama konsolunu aç · request / response / browser
Request, URL, cookie ve DOM örneklerini ayrıca aç
Kaynaklar ve kapsam
- OWASP — OS Command Injection DefenseDefense Option 1: Avoid calling OS commands directly · Defense option 3: Parameterization in conjunction with Input Validation
- Python — subprocessSecurity Considerations · subprocess.run; timeout/check/env
- Python — stringTemplate strings ($-strings); distinct from t-strings · Template.substitute
- PortSwigger — Server-side template injectionWhat is server-side template injection?; source/data definition only
- Python — xml.sax.handlerLexicalHandler.startDTD · feature_external_ges / feature_external_pes · EntityResolver.resolveEntity
- OWASP — XML External Entity PreventionGeneral Guidance; DTD and external resource policy
- Python — ElementTreeXPath support; limited subset · Supported XPath syntax; tag selection
- Python — htmlhtml.escape