Hacker DirectoryHacker Directory
Öğrenmeye devam et
ENHTML kaydet ↓

WEB / WEB-17.S03

Deserialization ve object reconstruction boundaries

Parse, schema, permission ve trusted constructor sınırlarını ayır.

CORE · RED · BLUE · ARTIFACT · PRACTICE

1. Core · Mekanizma

Hareket olmadan bütün senaryoları oku

DTO izinli

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

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

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

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

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

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

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

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

  1. Evet. Bütün numeric-looking string’ler otomatik trusted Book olur.
  2. 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"]
  1. Hayır. Approved Book constructor application’ın sabit seçimidir.
  2. 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