Hacker DirectoryHacker Directory
Öğrenmeye devam et
ENHTML kaydet ↓

WEB / WEB-14.S04

Object, function ve property authorization

Note rename örneğinde capability, resource relationship ve writable/readable field kararlarını ayrı izle.

CORE · RED · BLUE · ARTIFACT · PRACTICE

1. Core · Mekanizma

Hareket olmadan bütün senaryoları oku

Title rename

  1. Note rename niyeti

    Client note-A için title rename intent’ini hazırladı. Public read hakkı, aynı notu rename etme hakkı değildir.

    Atlas client
    Rename niyeti; title bekliyor
    Notes application
    Title=Tea & Bread; request yok
  2. Request hazır

    Bilinen note ve context için request hazırlandı. Tablodaki policy sonuçları client’ın yetki beyanı değildir; server kararını temsil eder.

    Atlas client
    Rename request hazır; title sabit
    Notes application
    Title=Tea & Bread; request yok
  3. Request app’te

    Request application’a ulaştı. Title hâlâ Tea & Bread’dir; function, object ve property kararları henüz tamamlanmadı.

    Atlas client
    Rename request hazır; title sabit
    Notes application
    Request geldi; Title=Tea & Bread
  4. Local function gate

    Server notes.rename için açık function grant’i değerlendirir. Route adı veya UI’da görünen düğme bu kararın yerine geçmez.

    Atlas client
    Rename request hazır; title sabit
    Notes application
    Function izinli; Title=Tea & Bread
  5. Object ilişkisi kararı

    Function gate geçti; server resource ilişkisini ve tenant context’ini değerlendirir. Bu karar tamamlanmadan title değişmez.

    Atlas client
    Rename request hazır; title sabit
    Notes application
    Object ilişkisi izinli; Title=Tea & Bread
  6. Title değişimi kabul

    Bütün gerekli gate’ler geçti. Yalnız title, Bread & Tea olarak değiştirilir; owner, tenant ve publicationState aynı kalır.

    Atlas client
    Rename request hazır; title sabit
    Notes application
    Bütün gate’ler geçti; Title=Bread & Tea
  7. Result hazır

    Kabul edilen dal için title-only response, reddedilen dal için protected body içermeyen yanıt hazırdır. Client henüz sonucu almamıştır.

    Atlas client
    Rename request hazır; title sabit
    Notes application
    Yanıt hazır; title=Bread & Tea
  8. Result client’ta

    Yanıt client’a ulaştı. Title verisi yalnız kabul edilen dalda teslim edildi; ret, yeni title veya mutation başarısı gibi gösterilmez.

    Atlas client
    Yanıt geldi; title=Bread & Tea
    Notes application
    Yanıt hazır; title=Bread & Tea

Object reddi

  1. Note rename niyeti

    Client note-A için title rename intent’ini hazırladı. Public read hakkı, aynı notu rename etme hakkı değildir.

    Atlas client
    Rename niyeti; title bekliyor
    Notes application
    Title=Tea & Bread; request yok
  2. Request hazır

    Bilinen note ve context için request hazırlandı. Tablodaki policy sonuçları client’ın yetki beyanı değildir; server kararını temsil eder.

    Atlas client
    Rename request hazır; title sabit
    Notes application
    Title=Tea & Bread; request yok
  3. Request app’te

    Request application’a ulaştı. Title hâlâ Tea & Bread’dir; function, object ve property kararları henüz tamamlanmadı.

    Atlas client
    Rename request hazır; title sabit
    Notes application
    Request geldi; Title=Tea & Bread
  4. Local function gate

    Server notes.rename için açık function grant’i değerlendirir. Route adı veya UI’da görünen düğme bu kararın yerine geçmez.

    Atlas client
    Rename request hazır; title sabit
    Notes application
    Function izinli; Title=Tea & Bread
  5. Object ilişkisi kararı

    Function gate geçti; server resource ilişkisini ve tenant context’ini değerlendirir. Bu karar tamamlanmadan title değişmez.

    Atlas client
    Rename request hazır; title sabit
    Notes application
    Object ilişkisi reddedildi; Title=Tea & Bread
  6. Title değişmedi

    object gate’i reddettiği için title değişmez: Tea & Bread korunur. Bütün gerekli izinler sağlanmadan mutation veya protected response projection oluşturulmaz; başka bir gate’in olumlu olması bu ret sonucunu kaldırmaz.

    Atlas client
    Rename request hazır; title sabit
    Notes application
    Kabul koşulları sağlanmadı; Title=Tea & Bread
  7. Result hazır

    Kabul edilen dal için title-only response, reddedilen dal için protected body içermeyen yanıt hazırdır. Client henüz sonucu almamıştır.

    Atlas client
    Rename request hazır; title sabit
    Notes application
    Yanıt hazır; protected body yok
  8. Result client’ta

    Yanıt client’a ulaştı. Title verisi yalnız kabul edilen dalda teslim edildi; ret, yeni title veya mutation başarısı gibi gösterilmez.

    Atlas client
    Yanıt geldi; ret; body yok
    Notes application
    Yanıt hazır; protected body yok

Function reddi

  1. Note rename niyeti

    Client note-A için title rename intent’ini hazırladı. Public read hakkı, aynı notu rename etme hakkı değildir.

    Atlas client
    Rename niyeti; title bekliyor
    Notes application
    Title=Tea & Bread; request yok
  2. Request hazır

    Bilinen note ve context için request hazırlandı. Tablodaki policy sonuçları client’ın yetki beyanı değildir; server kararını temsil eder.

    Atlas client
    Rename request hazır; title sabit
    Notes application
    Title=Tea & Bread; request yok
  3. Request app’te

    Request application’a ulaştı. Title hâlâ Tea & Bread’dir; function, object ve property kararları henüz tamamlanmadı.

    Atlas client
    Rename request hazır; title sabit
    Notes application
    Request geldi; Title=Tea & Bread
  4. Local function gate

    Server notes.rename için açık function grant’i değerlendirir. Route adı veya UI’da görünen düğme bu kararın yerine geçmez.

    Atlas client
    Rename request hazır; title sabit
    Notes application
    Function reddedildi; Title=Tea & Bread
  5. Object ilişkisi kararı

    Function reddedildiği için object gate çalışmaz. Title değiştirilmez; değerlendirilmemiş ilişki için allow sonucu üretilmez.

    Atlas client
    Rename request hazır; title sabit
    Notes application
    Object değerlendirilmedi; Title=Tea & Bread
  6. Title değişmedi

    function gate’i reddettiği için title değişmez: Tea & Bread korunur. Bütün gerekli izinler sağlanmadan mutation veya protected response projection oluşturulmaz; başka bir gate’in olumlu olması bu ret sonucunu kaldırmaz.

    Atlas client
    Rename request hazır; title sabit
    Notes application
    Kabul koşulları sağlanmadı; Title=Tea & Bread
  7. Result hazır

    Kabul edilen dal için title-only response, reddedilen dal için protected body içermeyen yanıt hazırdır. Client henüz sonucu almamıştır.

    Atlas client
    Rename request hazır; title sabit
    Notes application
    Yanıt hazır; protected body yok
  8. Result client’ta

    Yanıt client’a ulaştı. Title verisi yalnız kabul edilen dalda teslim edildi; ret, yeni title veya mutation başarısı gibi gösterilmez.

    Atlas client
    Yanıt geldi; ret; body yok
    Notes application
    Yanıt hazır; protected body yok

Property reddi

  1. Note rename niyeti

    Client note-A için title rename intent’ini hazırladı. Public read hakkı, aynı notu rename etme hakkı değildir.

    Atlas client
    Rename niyeti; title bekliyor
    Notes application
    Title=Tea & Bread; request yok
  2. Request hazır

    Bilinen note ve context için request hazırlandı. Tablodaki policy sonuçları client’ın yetki beyanı değildir; server kararını temsil eder.

    Atlas client
    Rename request hazır; title sabit
    Notes application
    Title=Tea & Bread; request yok
  3. Request app’te

    Request application’a ulaştı. Title hâlâ Tea & Bread’dir; function, object ve property kararları henüz tamamlanmadı.

    Atlas client
    Rename request hazır; title sabit
    Notes application
    Request geldi; Title=Tea & Bread
  4. Local function gate

    Server notes.rename için açık function grant’i değerlendirir. Route adı veya UI’da görünen düğme bu kararın yerine geçmez.

    Atlas client
    Rename request hazır; title sabit
    Notes application
    Function izinli; Title=Tea & Bread
  5. Object ilişkisi kararı

    Function gate geçti; server resource ilişkisini ve tenant context’ini değerlendirir. Bu karar tamamlanmadan title değişmez.

    Atlas client
    Rename request hazır; title sabit
    Notes application
    Object ilişkisi izinli; Title=Tea & Bread
  6. Title değişmedi

    property gate’i reddettiği için title değişmez: Tea & Bread korunur. Bütün gerekli izinler sağlanmadan mutation veya protected response projection oluşturulmaz; başka bir gate’in olumlu olması bu ret sonucunu kaldırmaz.

    Atlas client
    Rename request hazır; title sabit
    Notes application
    Kabul koşulları sağlanmadı; Title=Tea & Bread
  7. Result hazır

    Kabul edilen dal için title-only response, reddedilen dal için protected body içermeyen yanıt hazırdır. Client henüz sonucu almamıştır.

    Atlas client
    Rename request hazır; title sabit
    Notes application
    Yanıt hazır; protected body yok
  8. Result client’ta

    Yanıt client’a ulaştı. Title verisi yalnız kabul edilen dalda teslim edildi; ret, yeni title veya mutation başarısı gibi gösterilmez.

    Atlas client
    Yanıt geldi; ret; body yok
    Notes application
    Yanıt hazır; protected body yok

ROLLER · STATE · VERİ AKIŞI

Hangi object üzerinde hangi işlem?

Duru, public note-A’nın Tea & Bread title’ını Bread & Tea yapmak ister. Public read policy notu okumaya izin verebilir; rename ise ayrı bir action’dır ve owner/tenant ilişkisi ister. Subject, object, action ve context server’ın güvenilen kaynaklarından birleştirilir. Client’ın object reference’ı yalnız hedefi seçer; yetki vermez. Object-level authorization, caller’ın istenen action’ı seçilen resource üzerinde yapıp yapamayacağını değerlendirir. IDOR/BOLA bu ilişkinin yeterince denetlenmemesini anlatır. Integer, UUID veya string seçmek permission sağlamaz; login olmak da note-A için gerekli ilişkiyi kurmaz. Artifact, izinli not ilişkisi ile object-denied sonucunu yan yana gösterir.

Function gate object gate’ten farklıdır

notes.rename function’ı, ürün policy’sinde açık bir grant ister. Function-level authorization bu business capability’nin actor’a açık olup olmadığını değerlendirir. Object gate ise capability kullanılırken seçilen resource ile actor’ın ilişkisini kontrol eder. Admin görünümlü URL, hidden button veya route adı bu karar değildir. Bir role function grant verebilir ama bütün tenant object’lerine erişim vermek zorunda değildir. Function-denied satırında objectRelation=true olsa da action capability yoktur. Server, ilgili her request’te bu kararları uygular. Ortak policy module tutarlılığa yardımcı olur; client context’ini trusted kabul etme hatasını düzeltmez. Actor veya policy kanıtı eksikse ret verilir; eksik kanıt kötü niyetin kanıtı değildir.

Property sınırı iki yönde yürür

Object ve function izinlerinin geçmesi, caller’ın her property’yi okuyup değiştirebileceği anlamına gelmez. Atlas rename input’unu yalnız title alanına map eder; owner, tenant ve publicationState server tarafından yönetilen context/workflow alanlarıdır. Type/schema validation, title’ın string olduğunu söyler; publication state’i değiştirme yetkisi vermez. Mass assignment, generic input binding’in izin verilmeyen internal alanları da business object’e taşımasıyla bu sınırı bozar. Property authorization ve açık input projection birlikte uygulanır. Read tarafında da bütün object’i serialize etmek yerine bu response için izinli alanlar seçilir. Property-denied dalında body ve mutation oluşmaz. Gerçek uygulamada transaction, concurrency ve side effect’ler aynı karar sınırını korumalıdır.

2. Red · Güven ve etki

Hareket olmadan bütün senaryoları oku

Function deny

  1. Rename operation kapsamı seçildi

    Duru tenant-A içindeki note-A başlığını Bread & Tea yapmak ister. Public visibility veya object ownership bu write operation’ın bütün gate’lerini otomatik geçirmez.

    Rename context
    case=function-denied
    Permission gates
    Gate değerlendirilmedi
    Record/projection boundary
    Title: Tea & Bread
  2. Function ve object ilişkisi ayrıldı

    Object relation true’dur, fakat functionGrant=false’tur. Own note üzerinde işlem seçebilmek notes.rename capability’si vermez.

    Rename context
    case=function-denied
    Permission gates
    Function=false; object=true
    Record/projection boundary
    Title: Tea & Bread
  3. Property sınırı ayrı okundu

    propertyGrant=true olsa da failed function gate’i telafi edilmez. Title’ın writable field olması function capability’nin kendisi değildir.

    Rename context
    case=function-denied
    Permission gates
    Property=true; function failed
    Record/projection boundary
    Title: Tea & Bread
  4. Bütün gate’ler commit’ten önce uygulandı

    mutationAfterAllGates policy’si nedeniyle expectedAccepted=false olur. Failed gate hangi katmanda olursa olsun title değişimi bu branch’te uygulanmaz.

    Rename context
    case=function-denied
    Permission gates
    Accepted=false
    Record/projection boundary
    Mutation=false; Tea & Bread
  5. Body ve delivery durduruldu

    expectedBody=null ve expectedDelivery=false korunur. Küçük bir denial body, daha önce yapılmış side effect’i geri alıyor diye gösterilmez; burada mutation baştan yoktur.

    Rename context
    case=function-denied
    Permission gates
    Decision denied
    Record/projection boundary
    Body=null; delivery=false
  6. Public read write yetkisine dönüşmedi

    Notun public ve Duru’ya ait olması bu olumsuz gate’i ortadan kaldırmaz. Function/object/property üç ayrı sorudur; UI’da düğmenin görünmesi veya gizlenmesi server kararına ek authority vermez.

    Rename context
    case=function-denied
    Permission gates
    Function denial
    Record/projection boundary
    Title unchanged; no body/delivery

Property deny

  1. Rename operation kapsamı seçildi

    Duru tenant-A içindeki note-A başlığını Bread & Tea yapmak ister. Public visibility veya object ownership bu write operation’ın bütün gate’lerini otomatik geçirmez.

    Rename context
    case=property-denied
    Permission gates
    Gate değerlendirilmedi
    Record/projection boundary
    Title: Tea & Bread
  2. Function ve object ilişkisi ayrıldı

    Function grant ve object relation true’dur. Bu iki olumlu gate, istenen property set için ayrı write/read permission kararını kaldırmaz.

    Rename context
    case=property-denied
    Permission gates
    Function=true; object=true
    Record/projection boundary
    Title: Tea & Bread
  3. Property sınırı ayrı okundu

    propertyGrant=false olduğundan mutation ve response projection durur. JSON type veya ORM binding, property authorization sonucu üretmez.

    Rename context
    case=property-denied
    Permission gates
    Property=false
    Record/projection boundary
    Title: Tea & Bread
  4. Bütün gate’ler commit’ten önce uygulandı

    mutationAfterAllGates policy’si nedeniyle expectedAccepted=false olur. Failed gate hangi katmanda olursa olsun title değişimi bu branch’te uygulanmaz.

    Rename context
    case=property-denied
    Permission gates
    Accepted=false
    Record/projection boundary
    Mutation=false; Tea & Bread
  5. Body ve delivery durduruldu

    expectedBody=null ve expectedDelivery=false korunur. Küçük bir denial body, daha önce yapılmış side effect’i geri alıyor diye gösterilmez; burada mutation baştan yoktur.

    Rename context
    case=property-denied
    Permission gates
    Decision denied
    Record/projection boundary
    Body=null; delivery=false
  6. Public read write yetkisine dönüşmedi

    Notun public ve Duru’ya ait olması bu olumsuz gate’i ortadan kaldırmaz. Function/object/property üç ayrı sorudur; UI’da düğmenin görünmesi veya gizlenmesi server kararına ek authority vermez.

    Rename context
    case=property-denied
    Permission gates
    Property denial
    Record/projection boundary
    Title unchanged; no body/delivery

VARSAYIM · SINIR · KONTROL

Reference ve capability’ye gereğinden çok anlam vermek

Normal function call, bilinen note seçimini ve authenticated context’i server’a taşır. Bozulan varsayım, function’ı kullanma hakkının seçilen object üzerindeki bütün action’ları kapsadığıdır. Resource ilişkisi veya tenant scope ilgili action’da değerlendirilmezse read, rename ya da başka business action’ın sınırı genişleyebilir. Public title’ı okumak public rename yetkisi değildir; UUID’nin zor bilinmesi de policy kontrolünü tamamlamaz. Object-denied dalı, functionGrant=true olmasına rağmen title’ı değiştirmez. Function-denied dalı ise actor’a ait object için capability yokluğunu ayırır. İki gate’in de action’a bağlı server policy ve güvenilir resource context ile uygulanması gerekir.

Allowed object’ın bütün alanlarına güvenmek

Normal rename yalnız değiştirilebilir title’ı taşır. Object ownership, server’ın yönettiği publishing state’i değiştirme hakkı vermez. Bozulan varsayım, validated JSON veya ORM modelinin kendiliğinden authorized property map olduğu düşüncesidir. Yasak input alanlarının internal state’e bind edilmesi ya da response’un izinli read projection dışına genişlemesi bu sınırı bozar. Etki, yanlış publication state veya gereksiz property disclosure olabilir. Property-denied satırında bütün gate sonuçları görünür kalırken write ve protected response body oluşmaz. Closed input fields, actor/action’a bağlı write allowlist ve açık read DTO birbirini tamamlar. Denial body’sini küçük tutmak, daha önce oluşmuş transaction side effect’lerini tek başına geri almaz.

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

Hareket olmadan bütün senaryoları oku

Title projection

  1. Normal rename evidence seçildi

    Normal satırda functionGrant, objectRelation ve propertyGrant true’dur. Review yalnız allow boolean’ını değil, accepted command ve returned field set’ini birlikte okur.

    Permission observation
    Normal rename row
    Projection/context review
    Projection incelenmedi
    Evidence conclusion
    State sonucu incelenmedi
  2. Write field allowlist okundu

    inputWritableFields yalnız title içerir. Owner, tenant ve publicationState server-owned alanlardır; client title girdisinin yanında otomatik editable hâle gelmezler.

    Permission observation
    Input: title only
    Projection/context review
    Owner/tenant/workflow not writable
    Evidence conclusion
    State sonucu incelenmedi
  3. Command projection karşılaştırıldı

    Input ve command projection title=Bread & Tea taşır. Schema type veya model alan listesi yerine bu operation’ın permitted write fields’i esas alınır.

    Permission observation
    Input: title only
    Projection/context review
    Command: title=Bread & Tea
    Evidence conclusion
    State sonucu incelenmedi
  4. Response read projection ayrıldı

    responseReadableFields ve response projection yalnız title taşır. Write edilen alan ile bütün object body’sini dışarı vermek aynı permission kararı değildir.

    Permission observation
    Input: title only
    Projection/context review
    Response: title only
    Evidence conclusion
    Owner/tenant response dışında
  5. Unchanged context karşılaştırıldı

    ownerAfter=Duru, tenantAfter=tenant-A ve publicationStateAfter=published korunur. Başlık mutation’ı bu authoritative context alanlarına yayılmamıştır.

    Permission observation
    Mutation: title changed
    Projection/context review
    Owner/tenant/workflow retained
    Evidence conclusion
    Projection scope uyumlu
  6. Projection kanıtı kapsamlandı

    Bu ledger title rename ve field projection sonucunu gösterir. Gerçek ORM, transaction concurrency veya bütün tenant handlers için enforcement kanıtı eklenmez.

    Permission observation
    Known: title rename
    Projection/context review
    Known: limited command/response
    Evidence conclusion
    Runtime enforcement ayrı evidence

Context eksik

  1. Unknown-evidence satırı seçildi

    actorMissing=true ve policyMissing=true satırı trusted authorization context’in eksik olduğunu gösterir. Object’in note-A olarak bilinmesi bu eksikliği tamamlamaz.

    Permission observation
    Actor/policy missing
    Projection/context review
    Gate evidence eksik
    Evidence conclusion
    Sonuç incelenmedi
  2. Eksik ile false gate ayrıldı

    Bir functionGrant=false satırı bilinen policy denial’dır. Burada actor veya policy çözülememiştir; unknown evidence known hostile action olarak sunulmaz.

    Permission observation
    Actor/policy missing
    Projection/context review
    Insufficient evidence
    Evidence conclusion
    Attribution bilinmiyor
  3. Deny-default kararı korundu

    expectedAccepted=false missing context’te processing’i durdurur. Unpredictable ID, public title veya UI’daki rol metni trusted actor/policy input’u yerine kullanılmaz.

    Permission observation
    Actor/policy missing
    Projection/context review
    Accepted=false
    Evidence conclusion
    Attribution bilinmiyor
  4. Mutation ve body alanı okundu

    expectedMutation=false ve expectedBody=null olumsuz veri sınırıdır. Bu kayıt sırf eksik telemetry var diye izin üretmez; aynı zamanda gerçekleşmiş bir saldırı icat etmez.

    Permission observation
    Actor/policy missing
    Projection/context review
    No mutation; body=null
    Evidence conclusion
    No acceptance evidence
  5. Correlation için doğru kaynak istendi

    Aynı actor, operation, resource scope ve policy revision için trusted karar kaydı gerekir. Raw bearer token veya tüm object body’sini log’a eklemek bu boşluğu çözmez.

    Permission observation
    Missing context
    Projection/context review
    Trusted decision evidence required
    Evidence conclusion
    UNKNOWN: policy evaluation
  6. Missing context hükmü sınırlandı

    Bilinen karar no acceptance ve no mutation’dır. Hangi gerçek grant’in karşılanıp karşılanmadığı ve hostile attribution bilinmez; source evidence gelene kadar ayrı tutulur.

    Permission observation
    Known: context missing
    Projection/context review
    Known: mutation/body withheld
    Evidence conclusion
    UNKNOWN: grant/attribution

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

Üç gate’in kanıtını aynı action’a bağla

Audit context; actor/session validation referansı, policy revision, business operation, resource/tenant, function grant, object ilişkisi ve property set kararını ayrı tutar. Raw bearer token veya bütün body yerine izinli field adları ve reason code’lar yeterli olabilir. Baseline, Duru’nun kendi public notunda title rename yapmasıdır; diğer üç satır farklı ret koşullarını gösterir. 403 veya 404 seçimi ürünün information-disclosure policy’sine bağlıdır; tek başına hangi gate’in çalıştığını anlatmaz. Correlation, server kararını commit ve response projection ile bağlamalıdır. Eksik telemetry saldırının başarısızlığı demek değildir. Unknown-evidence satırı kabulü durdurur; gözlenmeyen bir hostile action çıkarımı yapmaz. Bu karar tablosu gerçek endpoint veya database audit’i değildir.

Permission regression state sonuçlarını da ölçer

Regression’da yalnız allow/deny return value değil, title’ın önceki ve sonraki değeri de karşılaştırılır. Owner, tenant ve publicationState korunmalı; response yalnız izinli key’leri taşımalı; reddedilen dal protected body veya delivery üretmemelidir. Role veya policy version değişince object ilişkisi yeniden değerlendirilir; read ve write field grant’leri aynı varsayılmaz. Server command DTO’su kabul edilen title’ı internal context’ten ayırır; body alanlarını doğrudan model’e yaymaz. Authorization ile mutation arasında resource version veya ilişki değişebiliyorsa concurrency/transaction tasarımı ayrıca gerekir. Local object projection, ORM veya persistence transaction güvenliğini kanıtlamaz. Aynı context, ilgili handler ve asynchronous iş boyunca korunmalıdır.

ŞİMDİ VAKAYA UYGULA

Own object üzerinde function ve property izni nasıl ayrılır?

Tea & Bread başlığını değiştirmek function, object relation ve property policy ister. Accepted command ve response alanları server-owned context’ten ayrılır.

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

Üç permission gate defteri

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

Ham kaydı ve alan açıklamalarını oku
{
  "profile": {
    "actor": "Duru",
    "tenant": "tenant-A",
    "operation": "rename-own-note",
    "authenticatedDeclared": true,
    "expectedFunction": "notes.rename",
    "note": {
      "id": "note-A",
      "owner": "Duru",
      "tenant": "tenant-A",
      "title": "Tea & Bread",
      "visibility": "public",
      "publicationState": "published"
    },
    "desiredTitle": "Bread & Tea",
    "inputWritableFields": [
      "title"
    ],
    "responseReadableFields": [
      "title"
    ],
    "actualEndpoint": false,
    "actualStore": false,
    "actualNetwork": false
  },
  "rows": [
    {
      "case": "normal",
      "functionGrant": true,
      "objectRelation": true,
      "propertyGrant": true,
      "expectedAccepted": true,
      "expectedMutation": true,
      "expectedAfterTitle": "Bread & Tea",
      "expectedBody": {
        "title": "Bread & Tea"
      },
      "expectedDelivery": true
    },
    {
      "case": "object-denied",
      "functionGrant": true,
      "objectRelation": false,
      "propertyGrant": true,
      "expectedAccepted": false,
      "expectedMutation": false,
      "expectedAfterTitle": "Tea & Bread",
      "expectedBody": null,
      "expectedDelivery": false
    },
    {
      "case": "function-denied",
      "functionGrant": false,
      "objectRelation": true,
      "propertyGrant": true,
      "expectedAccepted": false,
      "expectedMutation": false,
      "expectedAfterTitle": "Tea & Bread",
      "expectedBody": null,
      "expectedDelivery": false
    },
    {
      "case": "property-denied",
      "functionGrant": true,
      "objectRelation": true,
      "propertyGrant": false,
      "expectedAccepted": false,
      "expectedMutation": false,
      "expectedAfterTitle": "Tea & Bread",
      "expectedBody": null,
      "expectedDelivery": false
    }
  ],
  "policy": {
    "denyDefault": true,
    "functionRequiresExplicitGrant": true,
    "objectRequiresActorTenantAndRelationship": true,
    "propertyRequiresAllowedWriteAndReadProjection": true,
    "mutationAfterAllGates": true,
    "publicReadDoesNotGrantRename": true
  },
  "fieldLedger": [
    {
      "field": "title",
      "input": "caller-provided ordinary string with type/length validation",
      "writeAllowed": true,
      "responseAllowed": true
    },
    {
      "field": "owner",
      "input": "server-owned relationship context",
      "writeAllowed": false,
      "responseAllowed": false
    },
    {
      "field": "tenant",
      "input": "server-owned resource scope",
      "writeAllowed": false,
      "responseAllowed": false
    },
    {
      "field": "publicationState",
      "input": "server-owned publishing workflow state",
      "writeAllowed": false,
      "responseAllowed": false
    }
  ],
  "projections": {
    "input": {
      "title": "Bread & Tea"
    },
    "command": {
      "title": "Bread & Tea"
    },
    "response": {
      "title": "Bread & Tea"
    },
    "ownerAfter": "Duru",
    "tenantAfter": "tenant-A",
    "publicationStateAfter": "published"
  },
  "unknownEvidence": {
    "actorMissing": true,
    "policyMissing": true,
    "expectedAccepted": false,
    "expectedMutation": false,
    "expectedBody": null,
    "attribution": "insufficient evidence; not automatic hostile activity"
  },
  "boundaries": {
    "unguessableIDGrantsAccess": false,
    "publicReadGrantsWrite": false,
    "UIHiddenFunctionProtected": false,
    "schemaTypeAloneGrantsProperty": false,
    "ORMBindingIsAuthorization": false
  }
}
profile
Known actor/action ve public note başlangıcı.
rows
Independent function/object/property sonuçları.
fieldLedger
Write/read ve server-owned alan sınıfları.
projections
Explicit title command/response; context korunur.
unknownEvidence
Eksik kanıt deny; attack attribution değil.

Supplied policy sonuçları ve ordinary public note projection; endpoint, ID enumeration, ORM veya database transaction çalışmaz.

İki yanlış kanı

UUID object-level authorization yerine geçer.

Reference selection permission değildir; action ve resource relation server’da değerlendirilir.

Schema-valid input bütün object property’lerine map edilebilir.

Type validity, property write/read permission ve server-owned context ayrıdır.

SIRA SENDE

Bu hikâyeyi sen çöz.

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

Duru kendi note’una erişiyor ve title alanı writable, fakat functionGrant=false. Rename yapılır mı?

  1. Evet. Object owner olmak bütün function’lara izin verir.
  2. Hayır. Mutation yok; eski Tea & Bread korunur.
Gerekçeli cevabı oku

Hayır. Mutation yok; eski Tea & Bread korunur. — function-denied satırı objectRelation=true ve propertyGrant=true olsa da expectedAccepted=false verir. Diğer izinler eksik function grant’i tamamlamaz.

Accepted rename command neden yalnız title taşıyor; owner ve tenant neden değişmiyor?

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

fieldLedger[0]
{"field":"title","input":"caller-provided ordinary string with type/length validation","writeAllowed":true,"responseAllowed":true}
fieldLedger[1]
{"field":"owner","input":"server-owned relationship context","writeAllowed":false,"responseAllowed":false}
fieldLedger[2]
{"field":"tenant","input":"server-owned resource scope","writeAllowed":false,"responseAllowed":false}
projections
{"input":{"title":"Bread & Tea"},"command":{"title":"Bread & Tea"},"response":{"title":"Bread & Tea"},"ownerAfter":"Duru","tenantAfter":"tenant-A","publicationStateAfter":"published"}
  1. Title projection izinli; owner ve tenant server-owned context.
  2. Schema’da string olan bütün property’ler otomatik yazılabilir.
Gerekçeli cevabı oku

Title projection izinli; owner ve tenant server-owned context. — Field ledger yalnız title için write/read projection’a izin verir. Command ve response sadece bu alanı taşır; ownerAfter ve tenantAfter korunur.

Actor ve policy kanıtı eksikse expectedMutation=false ve expectedBody=null. Neden bunu hostile activity kanıtı veya ID güvenliği diye yorumlayamayız?

Gerekçeli cevabı oku

Gerekli actor/policy bağları kurulamadığı için mutation ve delivery durur. Bu, eksik girdinin hostile olduğunun kanıtı değildir. Object ID’nin tahmin edilememesi de function/object/property authorization yerine geçmez. UI’da gizlenen function server kontrolü sayılmaz. Bu artifact, örnekte verilen policy sonuçlarını açıklar; gerçek endpoint veya store enforcement testi değildir.

□ Eksik evidence’ı hostile activity diye sınıflandırmadım.

□ ID veya UI görünürlüğünü authorization yerine koymadım.

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

Kaynaklar ve kapsam