Hacker DirectoryHacker Directory
Öğrenmeye devam et
ENHTML kaydet ↓

WEB / WEB-16.S01

Validation, normalization ve interpretation boundaries

Atlas book preview’de byte, JSON value, NFC domain record ve sink representation’ı ayrı izle.

CORE · RED · BLUE · ARTIFACT · PRACTICE

1. Core · Mekanizma

Hareket olmadan bütün senaryoları oku

NFC preview

  1. JSON girdisi hazır

    Örneğin title ve quantity içeren JSON girdisi hazırdır. Henüz parse edilmiş value veya kabul edilmiş preview record yoktur.

    Raw bytes
    Byte budget bekleniyor
    JSON value
    JSON value yok
    Domain gate
    Doğrulanmış record yok
    Preview consumer
    Preview yok
  2. Byte budget kararı

    JSON girdisi önce 128 byte budget ve UTF-8 kurallarıyla kabul edilir. Bu adım field type veya business kuralını doğrulamaz.

    Raw bytes
    Byte budget kabul edildi; UTF-8
    JSON value
    JSON value yok
    Domain gate
    Doğrulanmış record yok
    Preview consumer
    Preview yok
  3. JSON value hazır

    JSON object parse edilmiştir; value’ların türleri artık görülebilir. Schema kararı henüz verilmediği için preview oluşmaz.

    Raw bytes
    Byte budget kabul edildi; UTF-8
    JSON value
    Object parse edildi; türler biliniyor
    Domain gate
    Doğrulanmış record yok
    Preview consumer
    Preview yok
  4. Schema kararı

    title:string ve quantity:integer, closed schema’nın beklediği iki alandır. quantity=2 schema’yı geçer; domain kararı henüz tamamlanmaz.

    Raw bytes
    Byte budget kabul edildi; UTF-8
    JSON value
    Object parse edildi; türler biliniyor
    Domain gate
    Schema geçerli
    Preview consumer
    Preview yok
  5. Domain ve NFC sınırı

    Schema’yı geçen title NFC ile Café olur. quantity=2, izin verilen 1–3 aralığındadır; kabul edilen record artık hazırlanabilir.

    Raw bytes
    Byte budget kabul edildi; UTF-8
    JSON value
    Object parse edildi; türler biliniyor
    Domain gate
    NFC Café; quantity=2 geçerli
    Preview consumer
    Preview yok
  6. Preview sonucu

    Kabul edilen Café/2 record’u plain preview verisi üretir. Bu sonuç yalnız public preview içindir; başka bir business mutation yapılmaz.

    Raw bytes
    Byte budget kabul edildi; UTF-8
    JSON value
    Object parse edildi; türler biliniyor
    Domain gate
    NFC Café; quantity=2 geçerli
    Preview consumer
    Preview Café / 2

Wrong type

  1. JSON girdisi hazır

    Örneğin title ve quantity içeren JSON girdisi hazırdır. Henüz parse edilmiş value veya kabul edilmiş preview record yoktur.

    Raw bytes
    Byte budget bekleniyor
    JSON value
    JSON value yok
    Domain gate
    Doğrulanmış record yok
    Preview consumer
    Preview yok
  2. Byte budget kararı

    JSON girdisi önce 128 byte budget ve UTF-8 kurallarıyla kabul edilir. Bu adım field type veya business kuralını doğrulamaz.

    Raw bytes
    Byte budget kabul edildi; UTF-8
    JSON value
    JSON value yok
    Domain gate
    Doğrulanmış record yok
    Preview consumer
    Preview yok
  3. JSON value hazır

    JSON object parse edilmiştir; value’ların türleri artık görülebilir. Schema kararı henüz verilmediği için preview oluşmaz.

    Raw bytes
    Byte budget kabul edildi; UTF-8
    JSON value
    Object parse edildi; türler biliniyor
    Domain gate
    Doğrulanmış record yok
    Preview consumer
    Preview yok
  4. Schema kararı

    quantity="two" parse edilebilen bir string’tir; ancak schema integer ister. Field-type rejection verilir ve domain record oluşturulmaz.

    Raw bytes
    Byte budget kabul edildi; UTF-8
    JSON value
    Object parse edildi; türler biliniyor
    Domain gate
    field-type
    Preview consumer
    Preview yok
  5. Domain ve NFC sınırı

    Schema reddi nedeniyle domain ve NFC aşaması çalışmaz. Parse edilmiş object, kabul edilmiş preview record yerine kullanılamaz.

    Raw bytes
    Byte budget kabul edildi; UTF-8
    JSON value
    Object parse edildi; türler biliniyor
    Domain gate
    Domain değerlendirilmedi
    Preview consumer
    Preview yok
  6. Preview sonucu

    Görünüm field-type reddini gösterir. previewRecord null kalır; geçersiz tür boş bir başarı veya quantity değeri gibi sunulmaz.

    Raw bytes
    Byte budget kabul edildi; UTF-8
    JSON value
    Object parse edildi; türler biliniyor
    Domain gate
    Domain değerlendirilmedi
    Preview consumer
    No preview; field-type

Quantity limit

  1. JSON girdisi hazır

    Örneğin title ve quantity içeren JSON girdisi hazırdır. Henüz parse edilmiş value veya kabul edilmiş preview record yoktur.

    Raw bytes
    Byte budget bekleniyor
    JSON value
    JSON value yok
    Domain gate
    Doğrulanmış record yok
    Preview consumer
    Preview yok
  2. Byte budget kararı

    JSON girdisi önce 128 byte budget ve UTF-8 kurallarıyla kabul edilir. Bu adım field type veya business kuralını doğrulamaz.

    Raw bytes
    Byte budget kabul edildi; UTF-8
    JSON value
    JSON value yok
    Domain gate
    Doğrulanmış record yok
    Preview consumer
    Preview yok
  3. JSON value hazır

    JSON object parse edilmiştir; value’ların türleri artık görülebilir. Schema kararı henüz verilmediği için preview oluşmaz.

    Raw bytes
    Byte budget kabul edildi; UTF-8
    JSON value
    Object parse edildi; türler biliniyor
    Domain gate
    Doğrulanmış record yok
    Preview consumer
    Preview yok
  4. Schema kararı

    quantity=5 integer olduğu için schema’yı geçer. Alanların türü doğru olsa da preview’nin miktar kuralı henüz değerlendirilmemiştir.

    Raw bytes
    Byte budget kabul edildi; UTF-8
    JSON value
    Object parse edildi; türler biliniyor
    Domain gate
    Schema geçerli
    Preview consumer
    Preview yok
  5. Domain ve NFC sınırı

    quantity=5 izin verilen 1–3 aralığının dışındadır. Domain kararı girdiyi reddeder; schema başarısı preview üretmeye yetmez.

    Raw bytes
    Byte budget kabul edildi; UTF-8
    JSON value
    Object parse edildi; türler biliniyor
    Domain gate
    Domain range rejected
    Preview consumer
    Preview yok
  6. Preview sonucu

    Görünüm domain-range reddini gösterir. previewRecord null kalır; type check’i geçen miktar kabul edilmiş preview gibi sunulmaz.

    Raw bytes
    Byte budget kabul edildi; UTF-8
    JSON value
    Object parse edildi; türler biliniyor
    Domain gate
    Domain range rejected
    Preview consumer
    No preview; domain-range

Extra field

  1. JSON girdisi hazır

    Örneğin title ve quantity içeren JSON girdisi hazırdır. Henüz parse edilmiş value veya kabul edilmiş preview record yoktur.

    Raw bytes
    Byte budget bekleniyor
    JSON value
    JSON value yok
    Domain gate
    Doğrulanmış record yok
    Preview consumer
    Preview yok
  2. Byte budget kararı

    JSON girdisi önce 128 byte budget ve UTF-8 kurallarıyla kabul edilir. Bu adım field type veya business kuralını doğrulamaz.

    Raw bytes
    Byte budget kabul edildi; UTF-8
    JSON value
    JSON value yok
    Domain gate
    Doğrulanmış record yok
    Preview consumer
    Preview yok
  3. JSON value hazır

    JSON object parse edilmiştir; value’ların türleri artık görülebilir. Schema kararı henüz verilmediği için preview oluşmaz.

    Raw bytes
    Byte budget kabul edildi; UTF-8
    JSON value
    Object parse edildi; türler biliniyor
    Domain gate
    Doğrulanmış record yok
    Preview consumer
    Preview yok
  4. Schema kararı

    reviewed:true, closed schema’nın izin verdiği iki alanın dışındadır. Extra field reddedilir; sessizce atılıp record kabul edilmez.

    Raw bytes
    Byte budget kabul edildi; UTF-8
    JSON value
    Object parse edildi; türler biliniyor
    Domain gate
    closed-shape
    Preview consumer
    Preview yok
  5. Domain ve NFC sınırı

    Closed-shape reddi nedeniyle domain ve NFC aşaması çalışmaz. Uygulama reddedilmiş object’ten kabul edilmiş record çıkarmaz.

    Raw bytes
    Byte budget kabul edildi; UTF-8
    JSON value
    Object parse edildi; türler biliniyor
    Domain gate
    Domain değerlendirilmedi
    Preview consumer
    Preview yok
  6. Preview sonucu

    Görünüm closed-shape reddini gösterir. previewRecord null kalır; ek alanın atılmasıyla oluşan bir başarı gösterilmez.

    Raw bytes
    Byte budget kabul edildi; UTF-8
    JSON value
    Object parse edildi; türler biliniyor
    Domain gate
    Domain değerlendirilmedi
    Preview consumer
    No preview; closed-shape

ROLLER · STATE · VERİ AKIŞI

Parse sonucu uygulama kararı değildir

Atlas public book preview için title ve quantity alır. Normal örnekte title, Cafe ve combining acute karakterinden oluşur; quantity=2 seçilmiştir. JSON parser metni value’lara dönüştürür. Bu işlem quantity’nin izinli aralıkta olduğunu veya caller’ın business action yapabileceğini söylemez. Aynı pipeline’da byte kabulü, parse, schema ve domain kararı ayrı sonuçlar üretir.

Örneğin giriş profili en çok 128 byte kabul eder, UTF-8’i strict decode eder ve bir JSON object ister. Python json varsayılanları tek başına bu profile karşılık gelmez: duplicate member için ayrı bir rejection hook’u, nonstandard numeric constant için açık bir rejection vardır. Küçük object’ler için seçilen bu kurallar, parser depth veya bütün resource exhaustion durumlarını kapsamaz.

Schema ve domain farklı sorular sorar

Closed schema yalnız title:string ve quantity:integer alanlarını kabul eder. Eksik alan, null, extra field ve yanlış tür ayrı biçim hatalarıdır. quantity=5 bir integer olduğu için type check’i geçer; ancak Atlas preview kuralı yalnız 1–3 aralığını kabul eder. Numeric string “2” için sessiz coercion yapılmaz; API’nin kabul ettiği representation açık kalır.

Wrong-type dalındaki quantity="two", parse edilebilen bir string’tir; sorun JSON syntax değildir. Extra-field dalında reviewed:true alanı reddedilir ve preview record oluşmaz. Girdinin geçerli olması user permission vermediği için örnek yalnız public preview verisi üretir. Bir sipariş, ödeme, private note veya session üzerinde mutation yapmaz.

Normalization için hangi eşitliği seçtin?

Title için NFC seçilmiştir. Cafe + U+0301 ile Café’nin byte ve code point dizileri farklı olabilir; canonical normalization bu iki örneği aynı title’a dönüştürür. Normalization, comparison ve storage için kullanılacak representation’ı belirler. Buradaki uzunluk kuralı, NFC sonrasında 1–40 Unicode code point kabul eder. Byte, grapheme cluster ve ekrandaki glyph sayısı aynı ölçü değildir.

NFKC, compatibility distinction’larını da birleştirebilir; bütün free text’e sessizce uygulanmamalıdır. Fullwidth A örneğinde NFC ve NFKC farklı sonuçlar üretir. Normalized title’ı sonraki aşamada yeniden decode edip başka anlam vermek, önceki kontrolün baktığı representation’ı değiştirir. Bu profil aynı normalized record’u tüketir; normalization bir sanitizer veya authorization kararı değildir.

Encoding ve parameterization sink’e aittir

Preview, title’ı plain text olarak tüketir. HTML text serialization gerektiğinde o context’e uygun encoding ayrıca seçilir. Tea & Bread için ampersand, HTML text’te entity olarak temsil edilir; domain title ise Tea & Bread olarak kalır. Bu iki representation’ı birbirine karıştırma. HTML text encoding, JavaScript source, URL destination veya SQL query structure için genel bir güvenlik dönüşümü değildir.

Parameterization, query/program structure ile value’yu ayrı API kanallarında tutar. Validation ise value’nun bu operation için uygun olup olmadığını kontrol eder. Sonraki database dersi, sabit query ve bound title üzerinden bu sınırı işler. Burada SQL veya command çalıştırılmaz. Escape edilmiş bir title ile query text oluşturmak, named parameter kullanmakla aynı mekanizma değildir.

Gate başarısızsa yarım record kullanma

Artifact, parsed, schemaValid, domainValid, normalizedTitle ve previewRecord alanlarını ayırır. Yanlış tür için parsed=true olabilirken previewRecord null kalır. Domain limit dalında schemaValid=true ama domainValid=false olur. Extra field sessizce atılıp kabul edilmiş record’a taşınmaz. Bu sonuçlar reddin hangi aşamada verildiğini gösterir; tek bir generic invalid etiketi bu ayrımı kaybettirir.

Raw input eksikse sonuç not-computed olur; bu durum boş title veya malformed JSON ile aynı değildir. Sahnedeki actor’lar aynı local pipeline’ın sorumluluklarını temsil eder; bir value’yu parse etmek için packet gönderilmez. Raw representation’dan kabul edilmiş record’a giderken hangi bilgi değiştiğini ve hangi value’nun henüz tüketilmediğini izleyebilirsin.

2. Red · Güven ve etki

Hareket olmadan bütün senaryoları oku

Extra field

  1. Public preview contract seçildi

    Profile yalnız title ve quantity keys’ini kabul eder; quantity range 1..3’tür. Client form control’leri bu local authoritative kuralın yerine geçmez.

    Public JSON input
    case=extra-field
    Schema/domain gate
    Consumer gate okunmadı
    Preview boundary
    Preview record yok
  2. JSON parse sonucu ayrı okundu

    Parsed=true olduğu için bu input JSON grammar’a uyar. Parse success, schema veya domain acceptance’a tek başına yeterli değildir.

    Public JSON input
    case=extra-field
    Schema/domain gate
    Parsed=true
    Preview boundary
    Preview record yok
  3. İlk consumer failure gate’i okundu

    Input reviewed=true extra field taşır; closed-shape policy schemaValid=false verir. Bu alanın JSON boolean olması profile’a ek authority kazandırmaz.

    Public JSON input
    case=extra-field
    Schema/domain gate
    Closed shape rejected
    Preview boundary
    Preview record yok
  4. Normalization failure nedeni yapılmadı

    Extra-field row normalizedTitle=null tutar; downstream normalized record oluşmuş varsayılmaz.

    Public JSON input
    case=extra-field
    Schema/domain gate
    No accepted normalized record
    Preview boundary
    Preview record yok
  5. Preview construction durduruldu

    decision=REJECT ve previewRecord=null korunur. Reason closed-shape olarak kalır; private resource permission sonucu eklenmez.

    Public JSON input
    case=extra-field
    Schema/domain gate
    Reason: closed-shape
    Preview boundary
    No preview construction
  6. Interpretation katmanları birbirine karışmadı

    Bu negatif input parse edilebilir, fakat consumer contract’ı geçmez. JSON, schema, business rule ve output context farklı boundaries’dir; punctuation blacklist bu ayrımı kurmaz.

    Public JSON input
    case=extra-field
    Schema/domain gate
    Known: consumer denial
    Preview boundary
    No accepted preview record

Domain limit

  1. Public preview contract seçildi

    Profile yalnız title ve quantity keys’ini kabul eder; quantity range 1..3’tür. Client form control’leri bu local authoritative kuralın yerine geçmez.

    Public JSON input
    case=domain-limit
    Schema/domain gate
    Consumer gate okunmadı
    Preview boundary
    Preview record yok
  2. JSON parse sonucu ayrı okundu

    Parsed=true olduğu için bu input JSON grammar’a uyar. Parse success, schema veya domain acceptance’a tek başına yeterli değildir.

    Public JSON input
    case=domain-limit
    Schema/domain gate
    Parsed=true
    Preview boundary
    Preview record yok
  3. İlk consumer failure gate’i okundu

    Quantity=5 exact integer type’ına uyar; schemaValid=true kalır. Operation range 1..3 olduğundan domainValid=false’tur.

    Public JSON input
    case=domain-limit
    Schema/domain gate
    Schema true; domain false
    Preview boundary
    Preview record yok
  4. Normalization failure nedeni yapılmadı

    normalizedTitle=Café verilmiştir. Doğru NFC output, quantity domain failure’ını düzeltmez.

    Public JSON input
    case=domain-limit
    Schema/domain gate
    NFC title valid; quantity denied
    Preview boundary
    Preview record yok
  5. Preview construction durduruldu

    decision=REJECT ve previewRecord=null korunur. Reason domain-range olarak kalır; private resource permission sonucu eklenmez.

    Public JSON input
    case=domain-limit
    Schema/domain gate
    Reason: domain-range
    Preview boundary
    No preview construction
  6. Interpretation katmanları birbirine karışmadı

    Bu negatif input parse edilebilir, fakat consumer contract’ı geçmez. JSON, schema, business rule ve output context farklı boundaries’dir; punctuation blacklist bu ayrımı kurmaz.

    Public JSON input
    case=domain-limit
    Schema/domain gate
    Known: consumer denial
    Preview boundary
    No accepted preview record

VARSAYIM · SINIR · KONTROL

Valid JSON’dan hangi sonucu çıkarabilirsin?

quantity="two" örneğini parse failure diye raporlamak yanlış aşamayı işaretler. Girdi JSON grammar’a uyduğu halde schema’ya uymaz. quantity=5 ise type bakımından uygundur ama operation kuralına uymaz. İncelemede parse success, field/type success ve domain success ayrı tutulmalıdır. Artifact’teki üç dalın farklı sonuçları, reddin hangi kontrol tarafından verildiğini gösterir.

Client UI, quantity için bir dropdown sunsa bile server kendi 1–3 kuralını uygulamalıdır. Form control state ile request body’deki value farklı olabilir. Public preview örneği, son kararın local uygulama kuralına ait olduğunu gösterir. JSON schema’nın başarılı olması, caller’ın bir private record’a erişim hakkı olduğu sonucuna dönüştürülemez.

Aynı görünen title aynı byte değildir

Composed ve decomposed Café örnekleri, ekrandaki görünüş ile raw equality arasındaki farkı gösterir. NFC, bu iki örneğin comparison representation’ını birleştirir; bütün Unicode string’lerin eşit sayılması anlamına gelmez. Fullwidth A için NFC’nin ayrımı koruması, normalization seçiminin business semantics ile ilgili olduğunu hatırlatır.

Title doğru normalize edilmiş olsa da onu alan API, value yerine source yorumlayabilir. Literal title, HTML text serialization ve query’nin value slot’u bu yüzden farklı yeteneklere sahiptir. html.escape ile elde edilen sonuç yalnız ilgili HTML text context için değerlendirilir. Bu gözlem bir browser sanitizer’ın, SQL engine’in veya command parser’ın davranışını göstermez.

3. Blue · Güvenli geliştirme ve savunma

Hareket olmadan bütün senaryoları oku

Unicode form

  1. Normalization representation seçildi

    representations decomposed Café ve composed Café değerlerini ayrı taşır. Aynı görünüm raw byte veya code-point equality’si değildir.

    Input/representation record
    Two Café representations
    Validation review
    NFC karşılaştırılmadı
    Evidence conclusion
    Business equality bilinmiyor
  2. Selected NFC policy okundu

    Profile titleNormalization=NFC seçer; accepted normal record title=Café olur. Bu selected policy aynı canonical temsil üzerinden downstream comparison kurar.

    Input/representation record
    Decomposed title input
    Validation review
    NFC result=Café
    Evidence conclusion
    Selected normalization known
  3. Compatibility form ayrımı okundu

    Fullwidth A için NFC output A kalır, NFKC output A olur. NFC ve NFKC bütün input’larda aynı business semantics’i taşımaz.

    Input/representation record
    Fullwidth A
    Validation review
    NFC=A; NFKC=A
    Evidence conclusion
    Forms not interchangeable
  4. Normalization encoding sayılmadı

    Tea & Bread için HTML text serialization Tea & Bread’dir. Bu output context dönüşümü NFC’nin veya record key’inin yerine kullanılmaz.

    Input/representation record
    Unicode domain representation
    Validation review
    HTML text representation separate
    Evidence conclusion
    No universal encoder claim
  5. Consumer permission ayrıca bırakıldı

    Doğru normalize title private record access veya caller identity kanıtı değildir. Bu profile public preview içindir; API permission sonucu üretilmez.

    Input/representation record
    Known: selected representations
    Validation review
    Validation/normalization separate
    Evidence conclusion
    Authorization not established
  6. Representation hükmü scope’unda kaldı

    Artifact normalization ve text serialization çıktıları açıklanır. Browser display, sanitizer, SQL veya command interpreter behavior bu değerlerden doğrulanmış sayılmaz.

    Input/representation record
    Known: NFC/NFKC distinction
    Validation review
    Known: HTML text transformation
    Evidence conclusion
    Other consumers require evidence

Input eksik

  1. Missing evidence scope seçildi

    missingEvidence.raw=null verilmiştir. Normal raw input’un sonradan bu boşluğa yerleştirildiği varsayılmaz.

    Input/representation record
    Raw=null
    Validation review
    Parse evidence yok
    Evidence conclusion
    Preview bilinmiyor
  2. Byte budget önkoşulu ayrıldı

    Body bütçesi parse’den önce değerlendirilir; raw yokken byte limit’in geçtiği söylenmez. Field type ve domain predicate’leri de bu kanıtı tamamlayamaz.

    Input/representation record
    Raw=null
    Validation review
    Budget/parse not computed
    Evidence conclusion
    Preview bilinmiyor
  3. Unknown ile parse rejection ayrıldı

    decision=NOT-COMPUTED input yokluğunu korur. Bu durum malformed JSON veya known schema rejection reason’ı olarak yeniden adlandırılmaz.

    Input/representation record
    Raw=null
    Validation review
    Decision NOT-COMPUTED
    Evidence conclusion
    No rejection cause inferred
  4. Record construction yapılmadı

    previewRecord=null kalır. Source evidence olmadan title, quantity veya reviewed state’i guessed success olarak oluşturulmaz.

    Input/representation record
    Raw=null
    Validation review
    No accepted field evidence
    Evidence conclusion
    PreviewRecord=null
  5. Input ve accepted projection istendi

    Raw bytes, parsed types ve consumer decision ayrı source’larla gerekir. Sadece UI’da Café/2 görünmesi bu local decision chain’ini tamamlamaz.

    Input/representation record
    Missing input known
    Validation review
    Raw/type/decision evidence required
    Evidence conclusion
    No accepted preview
  6. Missing input hükmü sınırlandı

    Bu branch’te hesap yapılmadığı bilinir; input’un valid veya invalid olduğu bilinmez. Event loss veya kötü niyetli caller teşhisi ayrıca evidence ister.

    Input/representation record
    Known: input absent
    Validation review
    Known: not computed
    Evidence conclusion
    UNKNOWN: input validity

UYGULAMA · GÜVENLİK KONTROLÜ · DOĞRULAMA

Bir accepted representation contract’ı kur

Public preview contract’ı iki alanı, kesin türleri, quantity aralığını ve NFC sonrasındaki title uzunluğunu birlikte tanımlar. Eksik alan, extra field ve null için açık sonuçlar gerekir. Byte limit parse’den önce; type ve domain kuralları parse edilmiş value’lar üzerinde uygulanır. Python’da bool ile int arasındaki inheritance ilişkisi, API’nin quantity type’ını belirlemez: bu profil boolean kabul etmez. Eksik girdiden tahmini bir record üretilmez.

Kabul edilen record için normalization bir kez uygulanır; sonraki aşamalar aynı title’ı kullanır. Duplicate member rejection, uygulamanın seçtiği policy’dir; bütün JSON implementation’larının aynı davranacağı varsayılmaz. O’Reilly gibi normal punctuation içeren title’lar kabul edilebilir. Validation’ı punctuation blacklist’ine çevirmek, query structure ile value ayrımını çözmediği gibi normal içeriği de kaybettirebilir.

Sonucu ayrı artifact alanlarından doğrula

Normal girdi için previewRecord Café/2; yanlış tür için schema rejection; quantity=5 için domain rejection; reviewed alanı için closed-shape rejection beklenir. Son üç durumda record null kalır. Parsed type, normalized title ve HTML text representation ayrı alanlardan okunmalıdır. Bir aşamanın başarılı sonucu, diğerinin başarı kanıtı olarak kullanılamaz.

Local sahnenin başlangıcında preview record hazır değildir. Byte budget, parse, schema ve domain adımları tamamlandıkça bilinen sonuç değişir. Output encoding’i database key gibi saklamak yerine raw, domain ve sink representation’larını ayrı tut. Bu örnek HTTP handler, browser display, sanitizer veya user permission doğrulaması göstermez; her birinin kendi boundary’si ayrıca değerlendirilir.

ŞİMDİ VAKAYA UYGULA

Grammar, type, domain ve representation nerede ayrılır?

Harmless public preview JSON’u consumer rule’ü geçmek zorundadır. Unicode normalization ve output encoding farklı amaçlar taşır; missing raw input guessed success olmaz.

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 preview representation ledger

Bir alan seç; hangi sonucu desteklediğini ve nerede yetersiz kaldığını incele.

Ham kaydı ve alan açıklamalarını oku
{
  "profile": {
    "rawByteLimit": 128,
    "keys": [
      "title",
      "quantity"
    ],
    "titleNormalization": "NFC",
    "titleCodePoints": [
      1,
      40
    ],
    "quantityRange": [
      1,
      3
    ],
    "publicPreviewOnly": true
  },
  "raw": {
    "normal": "{\"title\":\"Café\",\"quantity\":2}",
    "wrong-type": "{\"title\":\"Café\",\"quantity\":\"two\"}",
    "domain-limit": "{\"title\":\"Café\",\"quantity\":5}",
    "extra-field": "{\"title\":\"Café\",\"quantity\":2,\"reviewed\":true}"
  },
  "expected": {
    "normal": {
      "decision": "ACCEPT",
      "reason": "public-preview-valid",
      "schemaValid": true,
      "domainValid": true,
      "previewRecord": {
        "title": "Café",
        "quantity": 2
      },
      "parsed": true,
      "normalizedTitle": "Café"
    },
    "wrong-type": {
      "decision": "REJECT",
      "reason": "field-type",
      "schemaValid": false,
      "domainValid": false,
      "previewRecord": null,
      "parsed": true,
      "normalizedTitle": null
    },
    "domain-limit": {
      "decision": "REJECT",
      "reason": "domain-range",
      "schemaValid": true,
      "domainValid": false,
      "previewRecord": null,
      "parsed": true,
      "normalizedTitle": "Café"
    },
    "extra-field": {
      "decision": "REJECT",
      "reason": "closed-shape",
      "schemaValid": false,
      "domainValid": false,
      "previewRecord": null,
      "parsed": true,
      "normalizedTitle": null
    }
  },
  "representations": {
    "decomposedTitle": "Café",
    "composedTitle": "Café",
    "htmlTextInput": "Tea & Bread",
    "htmlTextSerialized": "Tea & Bread",
    "fullwidthA": "A",
    "NFCFullwidthA": "A",
    "NFKCFullwidthA": "A"
  },
  "missingEvidence": {
    "raw": null,
    "decision": "NOT-COMPUTED",
    "previewRecord": null
  }
}
raw
Fixed ordinary JSON text; byte admission parse’den ayrıdır.
schemaValid / domainValid
Fields/types ile operation range ayrı kapılardır.
previewRecord
Accepted NFC title ve quantity; rejected branch’te null.
representations
Raw, normalized ve HTML text serialized biçimleri aynı değildir.

Küçük JSON object’ler, Unicode normalization ve HTML text serialization için sınırları belirlenmiş local örneklerdir. HTTP handler, browser, sanitizer, SQL/command interpreter ve user authorization davranışı gösterilmez; bütün parser resource limit’leri için genel garanti verilmez.

İki yanlış kanı

Valid JSON, valid business operation demektir.

Grammar, schema, domain ve authorization ayrı kararlar ister.

Normalize veya escape edilen string bütün sink’lerde güvenlidir.

Normalization eşitlik seçer; encoding context’e, parameterization yapı/value ayrımına aittir.

SIRA SENDE

Bu hikâyeyi sen çöz.

Sonucu tahmin et, kanıtın sınırını bul ve nedenini kendi cümlenle anlat.

quantity=5 integer; schemaValid=true, fakat izinli range 1–3. Public preview kaydı oluşturulur mu?

  1. Hayır. domainValid=false; previewRecord=null.
  2. Evet. Integer olan her quantity kabul edilir.
Gerekçeli cevabı oku

Hayır. domainValid=false; previewRecord=null. — Number type doğru olsa da miktar sınırı aşılmıştır. Schema başarısı business/domain koşulunu geçerli yapmaz.

JSON parse edilmiş, fakat reviewed alanı sözleşmede yok. Bu closed-shape policy’si alanı sessizce silip preview kabul eder mi?

Dersten seçilen artifact alanları; öğretim örneği

profile.keys
["title","quantity"]
raw.extra-field
{"title":"Café","quantity":2,"reviewed":true}
expected.extra-field
{"decision":"REJECT","reason":"closed-shape","schemaValid":false,"domainValid":false,"previewRecord":null,"parsed":true,"normalizedTitle":null}
  1. Evet. JSON syntax doğruysa bütün ek alanlar güvenilen metadata olur.
  2. Hayır. closed-shape sonucu REJECT.
Gerekçeli cevabı oku

Hayır. closed-shape sonucu REJECT. — İzinli key’ler title ve quantity. parsed=true, input’un schema’ya uygun olduğu anlamına gelmez; previewRecord=null kalır.

Café NFC ile Café oluyor; fullwidth A NFC’de aynı, NFKC’de A. Normalization neden HTML encoding veya permission değildir?

Gerekçeli cevabı oku

NFC ve NFKC farklı normalization kurallarıdır; hangi biçimin kullanılacağı sözleşmede belirlenmelidir. Birleşen karakter representation’ı, title type/range veya authorization kontrolünü kaldırmaz. HTML text encoding ise Tea & Bread verisini Tea & Bread olarak temsil eder; normalization’dan ayrı context işlemidir. Input eksikse karar NOT-COMPUTED kalır.

□ NFC ile NFKC sonuçlarını eşitlemedim.

□ Normalization, encoding ve permission rollerini ayırdım.

Uygulama konsolunu aç · request / response / browser
Request, URL, cookie ve DOM örneklerini ayrıca aç

Kaynaklar ve kapsam