WEB / WEB-17.S03
Deserialization ve object reconstruction boundaries
Parse, schema, permission ve trusted constructor sınırlarını ayır.
1. Core · Mekanizma
Hareket olmadan bütün senaryoları oku
DTO izinli
- Sabit JSON hazır
Uygulama book-note/v1 text’ini hazırlamıştır: id=note-A, title=Tea & Bread, pageCount=12 integer. Parser ve constructor aynı process’te yerel çalışır; dış veriden davranış seçilmez.
- Fixed JSON data
- note-A / Tea & Bread / 12 integer
- DTO / constructor
- Local parser waiting; no object constructed
- Plain values parse
JSON.parse yerel olarak plain values üretir; text method veya runtime class seçmez ve reviver kullanılmaz.
- Fixed JSON data
- note-A / Tea & Bread / 12 integer
- DTO / constructor
- Parsed plain object; Book instance=false
- Schema kararı
id, title ve pageCount tam olarak izinli üç key’dir. id=note-A, title length=11 ve pageCount=12 integer koşulları geçer; schema kabulü henüz readAllowed kararı değildir.
- Fixed JSON data
- note-A / Tea & Bread / 12 integer
- DTO / constructor
- Schema valid; context pending
- Context kararı
contextPresent=true ve readAllowed=true uygulamanın JSON’dan bağımsız girdileridir. Bu koşullar geçtikten sonra üç-field DTO sabit Book constructor’ına aktarılabilir; input herhangi bir class veya method seçmez.
- Fixed JSON data
- note-A / Tea & Bread / 12 integer
- DTO / constructor
- Schema and context accepted; projection pending
- Explicit projection
Schema ve read context’i geçtiği için uygulama yalnız id/title/pageCount’u sabit Book constructor’ına açıkça kopyalar. Book instance artık vardır; caption henüz üretilmemiştir.
- Fixed JSON data
- note-A / Tea & Bread / 12 integer
- DTO / constructor
- Fixed Book constructed; plain caption pending
- Yerel sonuç hazır
Caption yalnız düz string’dir; DOM/store/network delivery veya object üzerinde mutation bu scene’in parçası değildir.
- Fixed JSON data
- note-A / Tea & Bread / 12 integer
- DTO / constructor
- Caption ready: Tea & Bread (12 pages); mutation=false
Unknown field
- Sabit JSON hazır
Uygulama book-note/v1 text’ini hazırlamıştır: id=note-A, title=Tea & Bread, pageCount=12 integer; subtitle=Reading notes. Parser ve constructor aynı process’te yerel çalışır; dış veriden davranış seçilmez.
- Fixed JSON data
- note-A / Tea & Bread / 12 integer; subtitle=Reading notes
- DTO / constructor
- Local parser waiting; no object constructed
- Plain values parse
JSON.parse yerel olarak plain values üretir; text method veya runtime class seçmez ve reviver kullanılmaz.
- Fixed JSON data
- note-A / Tea & Bread / 12 integer; subtitle=Reading notes
- DTO / constructor
- Parsed plain object; Book instance=false
- Schema kararı
subtitle=Reading notes geçerli JSON data’sıdır, fakat izinli id/title/pageCount key set’inin dışındadır. unknownFieldMode=reject nedeniyle DTO reddedilir; context ve constructor çalıştırılmaz.
- Fixed JSON data
- note-A / Tea & Bread / 12 integer; subtitle=Reading notes
- DTO / constructor
- Schema denied; constructor not run
- Schema reddi korunuyor
Schema reddedildiği için context gate’ine geçilmez. Bu dal actor permission hakkında yeni bir karar vermez; reconstruction yapılmaz.
- Fixed JSON data
- note-A / Tea & Bread / 12 integer; subtitle=Reading notes
- DTO / constructor
- Schema reddi; context değerlendirilmedi
- Explicit projection
Bu ret dalında explicit DTO projection ve Book constructor çağrısı yapılmaz. Constructor count=0, domain object ve caption yoktur; önceki normal dalın object’i burada yeniden kullanılamaz.
- Fixed JSON data
- note-A / Tea & Bread / 12 integer; subtitle=Reading notes
- DTO / constructor
- Constructor count=0; protected body absent
- Yerel sonuç hazır
Caption yalnız düz string’dir; DOM/store/network delivery veya object üzerinde mutation bu scene’in parçası değildir.
- Fixed JSON data
- note-A / Tea & Bread / 12 integer; subtitle=Reading notes
- DTO / constructor
- No caption/body/delivery; mutation=false
Type uyuşmaz
- Sabit JSON hazır
Uygulama book-note/v1 text’ini hazırlamıştır: id=note-A, title=Tea & Bread, pageCount="12" string. Parser ve constructor aynı process’te yerel çalışır; dış veriden davranış seçilmez.
- Fixed JSON data
- note-A / Tea & Bread / "12" string
- DTO / constructor
- Local parser waiting; no object constructed
- Plain values parse
JSON.parse yerel olarak plain values üretir; text method veya runtime class seçmez ve reviver kullanılmaz.
- Fixed JSON data
- note-A / Tea & Bread / "12" string
- DTO / constructor
- Parsed plain object; Book instance=false
- Schema kararı
pageCount="12" JSON string’idir. Bu contract 1–1000 arası integer ister ve coercion seçmemiştir; type gate’i reddeder. Parse başarısına rağmen context ve constructor çalıştırılmaz.
- Fixed JSON data
- note-A / Tea & Bread / "12" string
- DTO / constructor
- Schema denied; constructor not run
- Schema reddi korunuyor
Schema reddedildiği için context gate’ine geçilmez. Bu dal actor permission hakkında yeni bir karar vermez; reconstruction yapılmaz.
- Fixed JSON data
- note-A / Tea & Bread / "12" string
- DTO / constructor
- Schema reddi; context değerlendirilmedi
- Explicit projection
Bu ret dalında explicit DTO projection ve Book constructor çağrısı yapılmaz. Constructor count=0, domain object ve caption yoktur; önceki normal dalın object’i burada yeniden kullanılamaz.
- Fixed JSON data
- note-A / Tea & Bread / "12" string
- DTO / constructor
- Constructor count=0; protected body absent
- Yerel sonuç hazır
Caption yalnız düz string’dir; DOM/store/network delivery veya object üzerinde mutation bu scene’in parçası değildir.
- Fixed JSON data
- note-A / Tea & Bread / "12" string
- DTO / constructor
- No caption/body/delivery; mutation=false
Context eksik
- Sabit JSON hazır
Uygulama book-note/v1 text’ini hazırlamıştır: id=note-A, title=Tea & Bread, pageCount=12 integer. Parser ve constructor aynı process’te yerel çalışır; dış veriden davranış seçilmez.
- Fixed JSON data
- note-A / Tea & Bread / 12 integer
- DTO / constructor
- Local parser waiting; no object constructed
- Plain values parse
JSON.parse yerel olarak plain values üretir; text method veya runtime class seçmez ve reviver kullanılmaz.
- Fixed JSON data
- note-A / Tea & Bread / 12 integer
- DTO / constructor
- Parsed plain object; Book instance=false
- Schema kararı
id, title ve pageCount tam olarak izinli üç key’dir. id=note-A, title length=11 ve pageCount=12 integer koşulları geçer; schema kabulü henüz readAllowed kararı değildir.
- Fixed JSON data
- note-A / Tea & Bread / 12 integer
- DTO / constructor
- Schema valid; context pending
- Context kararı
Normal JSON shape’i geçer, fakat contextPresent=false ve readAllowed=null’dır. Permission bilinmez tutulur; güvenli ret seçilir ve constructor/projection yapılmaz. Bu, izin false bulundu demek değildir.
- Fixed JSON data
- note-A / Tea & Bread / 12 integer
- DTO / constructor
- Context yok; permission UNKNOWN; constructor yok
- Explicit projection
Bu ret dalında explicit DTO projection ve Book constructor çağrısı yapılmaz. Constructor count=0, domain object ve caption yoktur; önceki normal dalın object’i burada yeniden kullanılamaz.
- Fixed JSON data
- note-A / Tea & Bread / 12 integer
- DTO / constructor
- Constructor count=0; protected body absent
- Yerel sonuç hazır
Caption yalnız düz string’dir; DOM/store/network delivery veya object üzerinde mutation bu scene’in parçası değildir.
- Fixed JSON data
- note-A / Tea & Bread / 12 integer
- DTO / constructor
- No caption/body/delivery; mutation=false
ROLLER · STATE · VERİ AKIŞI
JSON veri üretir; davranış seçmez
Deserialization, dış representation’ı programın okuyabildiği değerlere dönüştürür. JSON’da bu değerler object, array, string, number, boolean ve null’dır. JSON.parse ile elde edilen bir book object, uygulamadaki Book class’ının instance’ı değildir; metin kendiliğinden caption method’u veya approved constructor seçmez. Reconstruction ise bunun ardından gelen ayrı tasarım kararıdır: hangi doğrulanmış field’ların hangi güvenilir domain type’a aktarılacağını uygulama belirler. Atlas Notları book-note/v1 formatında id, title ve pageCount taşır. Tea & Bread sadece düz bir title string’idir. Parser’ın başarılı olması, pageCount’un uygun bir integer olduğunu, id’nin istenen object’e bağlı olduğunu veya actor’ın bu veriyi kullanmaya yetkili olduğunu kanıtlamaz. Bu ders yalnız fixed read-only caption üretir; object’ten DOM, dosya veya database action çıkarmaz.
Closed DTO’dan trusted constructor’a
Defterin profile’ı sadece üç key kabul eder; pageCount 1–1000 arası integer, title 1–80 karakter string, id tam note-A olmalıdır. Unknown subtitle field’ı bu profile’da reject edilir; bu, tüm API’lerin unknown field’ları reddetmesi gerektiği iddiası değildir. Versioned contract farklı bir compatibility policy seçebilir, ama silent field loss saklanmamalıdır. Kabul edilmiş DTO açık projection ile oluşturulur; constructor yalnız bu üç değeri alır. Constructor adı input’tan okunmaz, runtime module veya method dış veriye göre seçilmez. ContextPresent ve readAllowed de ayrı server-side girdilerdir; JSON içindeki herhangi bir field bu gate’i açamaz. Missing context durumunda object biçimi doğru olsa bile reconstruction sonucu client’a teslim edilmez. Doğrulama ve authorization’ın her biri kendi kararını vermiş olur.
Reviver ve format sınırları
JSON.parse’ın optional reviver’ı uygulamanın verdiği bir function’dır; text’in içindeki çalıştırılabilir talimat değildir. Böyle bir hook kullanıldığında dönüşümün etkisini ayrıca değerlendirmek gerekir; burada reviver kullanılmaz. JSON da her runtime değerini kayıpsız taşıyan evrensel snapshot değildir. Class identity, method’lar ve özel runtime davranışları bu üç-field DTO’nun parçası değildir. Number precision, nesting ve text size sınırları parser/contract profilinde belgelenmelidir. JSON object member adlarının unique olması interoperability için önemlidir; duplicate key behavior’a güvenmek yerine ingress parser profili açık seçilir. Bu fixture duplicate key üretmez ve duplicate-preserving parser çalıştırmaz. Saf data formatı risk yüzeyini daraltır, fakat downstream business method’unun, output context’in veya permission’ın güvenli olduğunu tek başına garanti etmez.
2. Red · Güven ve etki
Hareket olmadan bütün senaryoları oku
Unknown field
- Data-only profile seçildi
book-note/v1 yalnız id, title ve pageCount alanlarını kabul eder. unknown-field row’u bunlara subtitle=Reading notes ekler; bu kapalı contract’ta uyumsuz girdidir.
- External JSON data
- Closed keys: 3
- Closed DTO gate
- Shape review pending
- Constructor/caption boundary
- Constructor not called
- JSON parse ile domain type ayrıldı
JSON parser subtitle alanını normal data olarak okuyabilir. Parse başarısı bu alanın approved DTO’ya veya davranış seçimine katılabileceği anlamına gelmez.
- External JSON data
- Parsed values only
- Closed DTO gate
- Unknown field present
- Constructor/caption boundary
- Domain object absent
- Closed DTO gate reddetti
unknownFieldMode=reject nedeniyle accepted projection oluşturulmaz. Alanı sessizce silmek bu profile’ın reddini kabul branch’ine çevirir.
- External JSON data
- Shape mismatch known
- Closed DTO gate
- Projection withheld
- Constructor/caption boundary
- Constructed=false
- Constructor boundary kapalı kaldı
expectedConstructed=false’tur. Input’un format adı veya title değeri fixed application Book constructor’ını seçemez; yalnız approved application kodu çağırır.
- External JSON data
- No approved DTO
- Closed DTO gate
- No constructor call
- Constructor/caption boundary
- No caption produced
- Plain caption teslim edilmedi
expectedDelivery=false, expectedBody=null ve expectedMutation=false korunur. Parse edilmiş data’nın varlığı caption consumer’a geçiş için yeterli değildir.
- External JSON data
- Delivery=false
- Closed DTO gate
- Body=null
- Constructor/caption boundary
- Mutation=false
- Failure sınıfı doğru tutuldu
Bu row ordinary unknown alan için contract reddidir; object injection veya dangerous loader çalıştırıldığı kanıtı değildir. Data-only sınırı davranış yüklememeyi seçer.
- External JSON data
- Known contract rejection
- Closed DTO gate
- Permission separate
- Constructor/caption boundary
- No behavior loading
Type uyuşmaz
- Data-only profile seçildi
book-note/v1 pageCount için integer ve 1..1000 aralığı ister. wrong-type row’unda pageCount="12" bulunur; sayı görünen string’in türü hâlâ string’dir.
- External JSON data
- Closed keys: 3
- Closed DTO gate
- Shape review pending
- Constructor/caption boundary
- Constructor not called
- JSON parse ile domain type ayrıldı
Parser pageCount değerini doğru biçimde string yapar. Bu syntax hatası değildir; uygulamanın integer contract’ı ile uyuşmazlık ayrı bir aşamadadır.
- External JSON data
- Parsed values only
- Closed DTO gate
- pageCount type: string
- Constructor/caption boundary
- Domain object absent
- Closed DTO gate reddetti
Integer type gate’i geçilmediği için explicit projection oluşturulmaz. String’i otomatik sayıya dönüştürmek bu contract’ın tanımlı davranışı değildir.
- External JSON data
- Shape mismatch known
- Closed DTO gate
- Projection withheld
- Constructor/caption boundary
- Constructed=false
- Constructor boundary kapalı kaldı
expectedConstructed=false’tur. Input’un format adı veya title değeri fixed application Book constructor’ını seçemez; yalnız approved application kodu çağırır.
- External JSON data
- No approved DTO
- Closed DTO gate
- No constructor call
- Constructor/caption boundary
- No caption produced
- Plain caption teslim edilmedi
expectedDelivery=false, expectedBody=null ve expectedMutation=false korunur. Parse edilmiş data’nın varlığı caption consumer’a geçiş için yeterli değildir.
- External JSON data
- Delivery=false
- Closed DTO gate
- Body=null
- Constructor/caption boundary
- Mutation=false
- Failure sınıfı doğru tutuldu
Bu row ordinary type uyuşmazlığıdır; sayı syntax’ının okunamadığını veya actor’ın permission’ının false olduğunu göstermez. Format ve permission nedenleri ayrı tutulur.
- External JSON data
- Known contract rejection
- Closed DTO gate
- Permission separate
- Constructor/caption boundary
- No behavior loading
VARSAYIM · SINIR · KONTROL
Data ile runtime type arasındaki varsayım
İncelenen hata sınıfı, dış representation’ın type veya davranış seçimine gereğinden fazla katılmasıdır. Bir object’in parse edilebilmesi, güvenilir domain object olduğuna dair yeterli kanıt değildir. Risk oluşması için uygulamanın dış değerleri approved DTO sınırından geçirmeden davranış sahibi object’lere, side-effect’lere veya permission kararlarına bağlaması gerekir. Bu örnekte sınıf adını taşıyan bir payload veya tehlikeli loader yoktur; finite Book constructor uygulamanın sabit kodudur. Unknown subtitle dalı uyumsuz contract girdisini gösterir, bir exploit sonucu değildir. Red okuyucu, “parse oldu” state’iyle “shape geçerli”, “actor izinli” ve “domain object oluşturuldu” state’lerini ayırır. Dış veri hangi noktada field projection olmaktan çıkıp davranış seçimine katılıyor sorusu somut bir inceleme sınırıdır; burada bu geçiş yalnız approved constructor üzerinden yapılır.
İmza, schema ve context farklı kanıtlardır
Integrity doğrulaması varsa bu belirli byte’ların uygun provenance ile geldiğine katkı verir; field’ların business anlamını veya alıcının action’ını kendiliğinden yetkilendirmez. Bu derste gerçek signature yoktur ve provenance assumed değil, profile dışındaki bir bağımlılık olarak yazılıdır. Type-invalid dalında pageCount string olarak gelir; parser bunu doğru biçimde string yapar, contract integer beklediği için karar deny olur. Missing-context dalında aynı normal DTO vardır ama context kanıtı yoktur; bu durumda “actor yetkisiz olduğu kanıtlandı” denmez. Güvenli sonuç yine body ve reconstruction delivery’si olmamasıdır. Bu ayrım hem false confidence’ı hem gereksiz alarmı azaltır: format uyumsuzluğu, eksik authorization kanıtı ve tehlikeli runtime reconstruction aynı iddia değildir. Sabit örnek hiçbir kurum formatına veya gerçek endpoint’e uygulanmaz.
3. Blue · Güvenli geliştirme ve savunma
Hareket olmadan bütün senaryoları oku
Alan projection
- Normal JSON data okundu
Normal text id=note-A, title=Tea & Bread ve pageCount=12 içerir. JSON.parse sonucu data object’tir; Book prototype’ı veya method implementation’ı text’ten gelmez.
- JSON/context observation
- Parsed: 3 data fields
- Projection review
- Book instance=false
- Construction conclusion
- Reconstruction pending
- Typed DTO koşulları doğrulandı
İzinli keys ve türler profile ile karşılaştırılır. Title length 1..80 ve pageCount 1..1000 koşulları davranış sahibi object oluşmadan önce geçmelidir.
- JSON/context observation
- Closed shape accepted
- Projection review
- Title/count within bounds
- Construction conclusion
- Constructor pending
- Authorization context ayrı okundu
Normal row contextPresent=true ve readAllowed=true bildirir. DTO’nun doğruluğu bu permission değerlerinin yerine geçmez; ikisi ayrıca verilmiştir.
- JSON/context observation
- Shape accepted
- Projection review
- Read allowed=true
- Construction conclusion
- Projection eligible
- Üç alan explicit kopyalandı
Pipeline yalnız id, title ve pageCount’u application projection’a alır. approvedConstructor=fixed application Book, input’tan class veya method seçmez.
- JSON/context observation
- Explicit 3-field projection
- Projection review
- Constructor fixed by app
- Construction conclusion
- Constructed=true
- Caption plain string olarak tutuldu
expectedBody caption=Tea & Bread (12 pages) içerir. Bu string HTML parsing veya DOM render yapılmış olduğu anlamına gelmez; expectedMutation=false’tur.
- JSON/context observation
- Caption: Tea & Bread (12 pages)
- Projection review
- Plain string
- Construction conclusion
- Mutation=false
- Freeze ve authority ayrıldı
runtimeLedger freezeIsAuthorization=false bildirir. Yerel object mutation’ını sınırlamak identity, resource permission veya bütün nested graph’ın immutable olması kanıtı değildir.
- JSON/context observation
- Reconstruction known
- Projection review
- Freeze ≠ permission
- Construction conclusion
- DOM/persistence unobserved
Context yok
- Aynı DTO eksik context ile seçildi
context-missing row’u normal üç alanlı JSON text’i taşır. contextPresent=false ve readAllowed=null, format uyuşmazlığından ayrı evidence durumudur.
- JSON/context observation
- Normal DTO data
- Projection review
- Context present=false
- Construction conclusion
- Read allowed=null
- Format uygunluğu permission olmadı
Id, title ve pageCount doğru olsa da approved actor context’i eksiktir. Field değerlerinden guessed identity üretmek bu eksik kanıtı gidermez.
- JSON/context observation
- Shape valid
- Projection review
- Permission UNKNOWN
- Construction conclusion
- No guessed context
- Reconstruction yapılmaması eşleştirildi
expectedConstructed=false tutulur. Constructor’a geçiş için shape yanında context de gerektiğinden parse olmuş plain object yeterli değildir.
- JSON/context observation
- Parsed data known
- Projection review
- Constructor not called
- Construction conclusion
- No domain caption
- Negatif consumer sonucu doğrulandı
expectedDelivery=false, expectedBody=null ve expectedMutation=false birlikte korunur. İnceleme yalnız bir error label’a bakarak construction’ın olmadığını varsaymaz.
- JSON/context observation
- Delivery=false
- Projection review
- Body=null
- Construction conclusion
- Mutation=false
- Unknown permission ret nedeninden ayrıldı
Güvenli sonuç no-delivery’dir ama actor’ın permission’ının verified false olduğu söylenmez. Context kaynağı bulunmadan normal row’un true değeri buraya kopyalanmaz.
- JSON/context observation
- Safe delivery withheld
- Projection review
- Permission remains UNKNOWN
- Construction conclusion
- Context evidence required
- Data reconstruction scope’u korundu
Bu finite pipeline plain JSON ve fixed constructor ilişkisidir. Endpoint authentication, rich deserializer veya persistence güvenliği için ayrıca uygulama kanıtı gerekir.
- JSON/context observation
- Data-only boundary known
- Projection review
- Identity unobserved
- Construction conclusion
- No broad deserializer claim
UYGULAMA · GÜVENLİK KONTROLÜ · DOĞRULAMA
Explicit projection ve bounded reconstruction
Blue pipeline’ın sırası dış text → JSON values → closed schema → authorization context → explicit DTO → fixed constructor → plain caption’dır. Schema geçmeden constructor çalıştırılmaz; context bulunmadan caption teslim edilmez. Başarı branch’inde yalnız id, title ve pageCount kopyalanır. Object’in frozen olması mutation riskini azaltan yerel bir tercihtir, identity doğrulaması veya derin graph’ın otomatik immutable olduğu anlamına gelmez. Method implementation uygulama kodunda sabittir; input’un davranış yüklemesi gerekmez. İleride yeni field eklenirse version/compatibility kararı ve constructor projection’ı birlikte gözden geçirilir. Rich runtime serialization gerektiren başka formatlar için ayrı parser, type allowlist ve behavior değerlendirmesi gerekir. Pure JSON seçimi burada küçük ve anlaşılır bir sınır sağlar; bütün formatlar veya bütün deserializer’lar için tek güvenlik sertifikası üretmez.
Reconstruction’ın gerçekleşmediğini kanıtlamak
Fixture kontrolü yalnız beklenen caption’ın doğru olmasına bakmaz. Unknown field, wrong type ve missing context satırları için constructed=false, delivered=false, body=null ve mutation=false birlikte aranır. Native kontrol fixed JSON.parse ile plain object’in Book instance olmadığını, validated projection’dan sonra approved constructor’ın çalıştığını ve caption’ın sadece düz string olduğunu gözler. Sonuç gerçek bir JSON ve class davranışıdır; bir web endpoint’in authorization’ı veya unsafe serialization formatının güvenliğe alındığı iddiası değildir. Text parse edilmiş olsa bile reddedilen satırda constructor sayacı artmaz. Context eksikliği unknownPermission olarak tutulur; hata kodu uygulama profilinde seçilir. Bu kontroller contract değiştiğinde anlamlı kalır, çünkü normal girdinin yanında field/type/context sınırlarını da karşılaştırır. Browser DOM, persistence ve uzak deserialization service bu dersin kanıt kapsamının dışındadır.
ŞİMDİ VAKAYA UYGULA
Parsed JSON ne zaman approved domain object’e dönüşebilir?
book-note/v1 closed DTO ve current context ister. Input davranış seçmez; üç alan application projection’dan fixed Book constructor’ına geçer.
Vakadaki doğrulanmış actor, tenant ilişkisi ve requested action için gereken kararları ayır. Authentication veya proof başarısını object permission yerine kullanma.
Bağlı vaka dosyasını aç ↗ÖRNEĞİ BİRLİKTE OKUYALIM
Atlas Notları — karar defteri
Bir alan seç; hangi sonucu desteklediğini ve nerede yetersiz kaldığını incele.
Ham kaydı ve alan açıklamalarını oku
{
"profile": {
"format": "book-note/v1",
"keys": [
"id",
"title",
"pageCount"
],
"id": "note-A",
"titleLength": [
1,
80
],
"pageCountRange": [
1,
1000
],
"unknownFieldMode": "reject",
"approvedConstructor": "fixed application Book",
"reviverUsed": false,
"actualEndpoint": false
},
"rows": [
{
"case": "normal",
"text": "{\"id\":\"note-A\",\"title\":\"Tea & Bread\",\"pageCount\":12}",
"contextPresent": true,
"readAllowed": true,
"expectedConstructed": true,
"expectedDelivery": true,
"expectedBody": {
"caption": "Tea & Bread (12 pages)"
},
"expectedMutation": false
},
{
"case": "unknown-field",
"text": "{\"id\":\"note-A\",\"title\":\"Tea & Bread\",\"pageCount\":12,\"subtitle\":\"Reading notes\"}",
"contextPresent": true,
"readAllowed": true,
"expectedConstructed": false,
"expectedDelivery": false,
"expectedBody": null,
"expectedMutation": false
},
{
"case": "wrong-type",
"text": "{\"id\":\"note-A\",\"title\":\"Tea & Bread\",\"pageCount\":\"12\"}",
"contextPresent": true,
"readAllowed": true,
"expectedConstructed": false,
"expectedDelivery": false,
"expectedBody": null,
"expectedMutation": false
},
{
"case": "context-missing",
"text": "{\"id\":\"note-A\",\"title\":\"Tea & Bread\",\"pageCount\":12}",
"contextPresent": false,
"readAllowed": null,
"expectedConstructed": false,
"expectedDelivery": false,
"expectedBody": null,
"expectedMutation": false
}
],
"pipeline": [
"JSON values",
"closed typed DTO",
"current authorization context",
"explicit three-field projection",
"trusted fixed Book constructor",
"plain caption"
],
"runtimeLedger": {
"parsedJSONHasBookPrototype": false,
"textSelectsConstructor": false,
"methodLoadedFromText": false,
"freezeIsAuthorization": false,
"duplicateKeyParserExecuted": false
},
"boundaries": {
"actualUnsafeDeserializer": false,
"actualDOM": false,
"actualPersistence": false,
"actualIdentity": false
}
}- profile
- Yerel closed contract ve trusted constructor seçimi; input constructor seçmez.
- rows
- Yalnız sabit normal ve harmless field/type/context karşılaştırmaları.
- runtimeLedger
- Data, class davranışı ve authorization arasındaki farklar.
Fixed JSON ve approved Book class; unsafe loader, gadget, runtime type selector, endpoint veya side-effect çalışmaz.
İki yanlış kanı
JSON.parse sonucu güvenilir domain object’tir.
Parse plain values üretir; schema, context ve constructor projection’ı ayrı karardır.
Pure data formatı permission sorununu çözer.
Pure data davranış yüzeyini daraltır; business permission yine gerekir.
SIRA SENDE
Bu hikâyeyi sen çöz.
Sonucu tahmin et, kanıtın sınırını bul ve nedenini kendi cümlenle anlat.
JSON pageCount="12" string’i taşıyor. Bu Book reconstruction profile’i sayı dönüşümü yapıp object oluşturur mu?
- Evet. Bütün numeric-looking string’ler otomatik trusted Book olur.
- Hayır. expectedConstructed=false; body=null.
Gerekçeli cevabı oku
Hayır. expectedConstructed=false; body=null. — Bu profile pageCount number ister. JSON parse başarısı, string’in doğru type olduğunu göstermez.
JSON parse edildiğinde Book prototype’ı ve caption method’u input’tan mı yüklenir?
Dersten seçilen artifact alanları; öğretim örneği
- runtimeLedger
- {"parsedJSONHasBookPrototype":false,"textSelectsConstructor":false,"methodLoadedFromText":false,"freezeIsAuthorization":false,"duplicateKeyParserExecuted":false}
- pipeline
- ["JSON values","closed typed DTO","current authorization context","explicit three-field projection","trusted fixed Book constructor","plain caption"]
- Hayır. Approved Book constructor application’ın sabit seçimidir.
- Evet. JSON object field’ları runtime class ve method seçebilir.
Gerekçeli cevabı oku
Hayır. Approved Book constructor application’ın sabit seçimidir. — parsedJSONHasBookPrototype=false, textSelectsConstructor=false ve methodLoadedFromText=false. Üç field projection sonrasında sabit constructor kullanılır.
Normal data shape’i doğru olsa da context-missing construction’ı durduruyor. Unknown subtitle ret sonucu neden genel JSON yasağı değil?
Gerekçeli cevabı oku
Bu profile unknownFieldMode=reject seçmiştir; başka sözleşmeler preserve veya ignore davranışını açıkça seçebilir. JSON standardı business field set’ini belirlemez. Geçerli DTO sonrasında güncel read context’i gerekir; context yoksa constructor ve delivery durur. Object’i freeze etmek izin vermez. Bu örnek güvenilen sabit Book reconstruction’dır; unsafe deserializer, DOM veya persistence çalıştırmaz.
□ Unknown-field davranışını bu sözleşmeye bağladım.
□ Object shape/freeze ile güncel authorization’ı ayırdım.
Uygulama konsolunu aç · request / response / browser
Request, URL, cookie ve DOM örneklerini ayrıca aç
Kaynaklar ve kapsam
- RFC8259 JSON§3 Values; §4 Objects / member uniqueness · §9 Parsers / limits; §12 Security Considerations
- MDN JSON.parseSyntax/return value; Description: reviver parameter
- OWASP Deserialization Cheat SheetIntroduction / What is Deserialization · Language-Agnostic Methods: Using Alternative Data Formats / pure data DTO