WEB / WEB-17.S01
API inventory ve authorization contracts
API host/version inventory’sini runtime policy ve permitted response fields ile eşleştir.
1. Core · Mekanizma
Hareket olmadan bütün senaryoları oku
Bound contract
- Title okuma niyeti
Consumer, note-A başlığını okumak için notes-v2 binding’ini seçer. Karar, Atlas’ın verilen inventory kayıtlarına göre değerlendirilecektir; Notes API henüz request’i almamıştır.
- Atlas consumer
- Public title read intent
- Notes API
- No receipt; inventory local
- Owned note store
- Public title stored; no read
- Read hazır
note-A read request’i notes-v2 inventory anahtarıyla hazırdır. readPublicNote bağlantısı API’de inventory ile kontrol edilecektir; consumer’ın version seçimi kabul kararı değildir.
- Atlas consumer
- note-A read hazır; inventory=notes-v2
- Notes API
- No receipt; inventory local
- Owned note store
- Public title stored; no read
- Read API’de
Read request API’ye ulaştı. Inventory/contract binding ve business permission henüz kabul edilmedi; store’a read gönderilmedi.
- Atlas consumer
- note-A read hazır; inventory=notes-v2
- Notes API
- Read arrived; binding pending
- Owned note store
- Public title stored; no read
- Binding ve policy kararı
Active notes-v2 ve policy revision=7 eşleşti; function, object ve read-field permission geçti. Resource read artık hazırlanabilir.
- Atlas consumer
- note-A read hazır; inventory=notes-v2
- Notes API
- Bound policy7; resource read ready
- Owned note store
- Public title stored; no read
- Store read aldı
İzin verilen read store’a ulaştı. Resource body henüz hazır değildir; title projection ayrı bir local aşamada hazırlanır.
- Atlas consumer
- note-A read hazır; inventory=notes-v2
- Notes API
- Bound policy7; resource read ready
- Owned note store
- Read arrived; response projection pending
- Local title projection
Store title-only read projection’ını hazırlar; owner/tenant veya mutation bu response’un parçası değildir.
- Atlas consumer
- note-A read hazır; inventory=notes-v2
- Notes API
- Bound policy7; resource read ready
- Owned note store
- Title response ready; Tea & Bread
- Body API’de
Public title API’ye ulaştı. Yanıt, contract’ın izin verdiği response key’leriyle consumer’a aktarılmak üzere hazırlanabilir.
- Atlas consumer
- note-A read hazır; inventory=notes-v2
- Notes API
- Public body arrived; consumer response ready
- Owned note store
- Title response ready; Tea & Bread
- Consumer sonucu
Title response consumer’a ulaştı. Bu sonuç örneğin read akışına aittir; gerçek deployment inventory veya browser enforcement sonucu değildir.
- Atlas consumer
- Response arrived; title=Tea & Bread
- Notes API
- Public body arrived; consumer response ready
- Owned note store
- Title response ready; Tea & Bread
Retired version
- Title okuma niyeti
Consumer, note-A başlığını okumak için notes-v1 binding’ini seçer. Karar, Atlas’ın verilen inventory kayıtlarına göre değerlendirilecektir; Notes API henüz request’i almamıştır.
- Atlas consumer
- Public title read intent
- Notes API
- No receipt; inventory local
- Owned note store
- Public title stored; no read
- Read hazır
note-A read request’i notes-v1 inventory anahtarıyla hazırdır. readLegacyNote bağlantısı API’de inventory ile kontrol edilecektir; consumer’ın version seçimi kabul kararı değildir.
- Atlas consumer
- note-A read hazır; inventory=notes-v1
- Notes API
- No receipt; inventory local
- Owned note store
- Public title stored; no read
- Read API’de
Read request API’ye ulaştı. Inventory/contract binding ve business permission henüz kabul edilmedi; store’a read gönderilmedi.
- Atlas consumer
- note-A read hazır; inventory=notes-v1
- Notes API
- Read arrived; binding pending
- Owned note store
- Public title stored; no read
- Binding kanıtı kararı
notes-v1 kaydı lifecycle=retired içerir. Bu uygulama retired binding’i reddeder ve store read’e geçmez; verilen kayıt dış deployment’ın gerçekten kaldırıldığını göstermez.
- Atlas consumer
- note-A read hazır; inventory=notes-v1
- Notes API
- Binding denied: retired
- Owned note store
- Public title stored; no read
- Resource read durduruldu
Reddedilen veya bilinmeyen binding, resource read’e ilerlemez. Schema tanımının varlığı business permission yerine geçmez.
- Atlas consumer
- note-A read hazır; inventory=notes-v1
- Notes API
- No resource read; no body or mutation
- Owned note store
- Public title stored; no read
- Denial hazır
Ret nedenini taşıyan yanıt hazırlandı. Store’un önceki state’i değişmedi; title body veya mutation sonucu oluşturulmadı.
- Atlas consumer
- note-A read hazır; inventory=notes-v1
- Notes API
- retired denial hazır; resource body yok
- Owned note store
- Public title stored; no read
- Consumer denial aldı
Ret yanıtı consumer’a ulaştı. Title teslim edilmedi; bu sonuç, hangi binding koşulunun başarısız olduğuyla birlikte okunmalıdır.
- Atlas consumer
- Denial alındı: retired; title yok
- Notes API
- retired denial hazır; resource body yok
- Owned note store
- Public title stored; no read
Policy drift
- Title okuma niyeti
Consumer, note-A başlığını okumak için notes-v2 binding’ini seçer. Karar, Atlas’ın verilen inventory kayıtlarına göre değerlendirilecektir; Notes API henüz request’i almamıştır.
- Atlas consumer
- Public title read intent
- Notes API
- No receipt; inventory local
- Owned note store
- Public title stored; no read
- Read hazır
note-A read request’i notes-v2 inventory anahtarıyla hazırdır. readPublicNote bağlantısı API’de inventory ile kontrol edilecektir; consumer’ın version seçimi kabul kararı değildir.
- Atlas consumer
- note-A read hazır; inventory=notes-v2
- Notes API
- No receipt; inventory local
- Owned note store
- Public title stored; no read
- Read API’de
Read request API’ye ulaştı. Inventory/contract binding ve business permission henüz kabul edilmedi; store’a read gönderilmedi.
- Atlas consumer
- note-A read hazır; inventory=notes-v2
- Notes API
- Read arrived; binding pending
- Owned note store
- Public title stored; no read
- Binding kanıtı kararı
notes-v2 active olsa da runtimePolicyRevisionDeclared=6, requiredPolicyRevision=7 ile uyuşmaz. Reason policy-mismatch olur; olumlu business gate’ler bu revision farkını gidermez.
- Atlas consumer
- note-A read hazır; inventory=notes-v2
- Notes API
- Binding denied: policy-mismatch
- Owned note store
- Public title stored; no read
- Resource read durduruldu
Reddedilen veya bilinmeyen binding, resource read’e ilerlemez. Schema tanımının varlığı business permission yerine geçmez.
- Atlas consumer
- note-A read hazır; inventory=notes-v2
- Notes API
- No resource read; no body or mutation
- Owned note store
- Public title stored; no read
- Denial hazır
Ret nedenini taşıyan yanıt hazırlandı. Store’un önceki state’i değişmedi; title body veya mutation sonucu oluşturulmadı.
- Atlas consumer
- note-A read hazır; inventory=notes-v2
- Notes API
- policy-mismatch denial hazır; resource body yok
- Owned note store
- Public title stored; no read
- Consumer denial aldı
Ret yanıtı consumer’a ulaştı. Title teslim edilmedi; bu sonuç, hangi binding koşulunun başarısız olduğuyla birlikte okunmalıdır.
- Atlas consumer
- Denial alındı: policy-mismatch; title yok
- Notes API
- policy-mismatch denial hazır; resource body yok
- Owned note store
- Public title stored; no read
Unknown version
- Title okuma niyeti
Consumer, note-A başlığını okumak için notes-v3 binding’ini seçer. Karar, Atlas’ın verilen inventory kayıtlarına göre değerlendirilecektir; Notes API henüz request’i almamıştır.
- Atlas consumer
- Public title read intent
- Notes API
- No receipt; inventory local
- Owned note store
- Public title stored; no read
- Read hazır
note-A read request’i notes-v3 inventory anahtarıyla hazırdır. operation unknown bağlantısı API’de inventory ile kontrol edilecektir; consumer’ın version seçimi kabul kararı değildir.
- Atlas consumer
- note-A read hazır; inventory=notes-v3
- Notes API
- No receipt; inventory local
- Owned note store
- Public title stored; no read
- Read API’de
Read request API’ye ulaştı. Inventory/contract binding ve business permission henüz kabul edilmedi; store’a read gönderilmedi.
- Atlas consumer
- note-A read hazır; inventory=notes-v3
- Notes API
- Read arrived; binding pending
- Owned note store
- Public title stored; no read
- Binding kanıtı kararı
inventoryKey=notes-v3 için inventory kaydı bulunmaz; runtimePolicyRevisionDeclared=null’dır. Reason inventory-unknown olur: scope bilinmez tutulur ve read yapılmaz; hostile veya retired sonucu eklenmez.
- Atlas consumer
- note-A read hazır; inventory=notes-v3
- Notes API
- Binding denied: inventory-unknown
- Owned note store
- Public title stored; no read
- Resource read durduruldu
Reddedilen veya bilinmeyen binding, resource read’e ilerlemez. Schema tanımının varlığı business permission yerine geçmez.
- Atlas consumer
- note-A read hazır; inventory=notes-v3
- Notes API
- No resource read; no body or mutation
- Owned note store
- Public title stored; no read
- Denial hazır
Ret nedenini taşıyan yanıt hazırlandı. Store’un önceki state’i değişmedi; title body veya mutation sonucu oluşturulmadı.
- Atlas consumer
- note-A read hazır; inventory=notes-v3
- Notes API
- inventory-unknown denial hazır; resource body yok
- Owned note store
- Public title stored; no read
- Consumer denial aldı
Ret yanıtı consumer’a ulaştı. Title teslim edilmedi; bu sonuç, hangi binding koşulunun başarısız olduğuyla birlikte okunmalıdır.
- Atlas consumer
- Denial alındı: inventory-unknown; title yok
- Notes API
- inventory-unknown denial hazır; resource body yok
- Owned note store
- Public title stored; no read
ROLLER · STATE · VERİ AKIŞI
API contract hangi deployment’a ait?
Atlas notes contract’ı readPublicNote operation’ını tanımlar. Inventory yalnız endpoint listesi değildir: host, environment, owner, API version, lifecycle, policy revision, data class ve integration flow aynı kayıtla eşleşir. notes-v2 active, notes-v1 retired olarak işaretlidir; bu etiket gerçek deployment’ın kaldırıldığını tek başına kanıtlamaz. Public title’ın bile hangi store’dan hangi consumer’a gittiği bilinmelidir. OpenAPI’de openapi, description format version’ını; info.version, document version’ını belirtir. /v2 ise ürünün API version tercihidir. Bunlar aynı sayı olmak zorunda değildir. Artifact’teki contractFragment tam bir OpenAPI document değildir; read-only GET ile Tea & Bread response shape’ini anlatan seçilmiş alanları gösterir.
Description ile authorization contract ayrı katmanlardır
OpenAPI operationId description içinde unique business operation bağlantısı sağlar; security hangi schemes’in istenebileceğini tanımlar. Tek Security Requirement Object içindeki multiple schemes birlikte gerekir; array’deki requirement alternatives’tan biri yeterlidir. Empty requirement object {} anonymous alternative, operation-level security: [] ise top-level declaration’ı kaldırır; bunlar aynı yazım değildir. Bu description runtime enforcement’ı kendiliğinden kurmaz. Atlas ayrıca notes.read function grant, public note relationship ve title-only response projection tanımlar. Schema type check bu üç business kararın yerine geçmez. Response contract’ı title içerirken internal object alanlarının consumer’a taşınması permitted read fields ile sınırlanır; token veya scope bulunması bütün objects’a read izni değildir.
Version drift bir evidence sorusudur
Örnek önce inventory binding ve lifecycle’ı, sonra gözlenen policy revision ile contract eşleşmesini kontrol eder. Policy-drift satırında v2 adı doğru olsa da runtimePolicyRevisionDeclared=6, contract’ın beklediği 7 ile uyuşmaz; resource delivery durur. Unknown-version satırında host veya operation için inventory kanıtı yoktur. Bu sonuç unknown scope olarak ayrılır; hostile host çıkarımı yapılmaz. Deprecation, consumer’a migration uyarısıdır; route’u kapatan mekanizma değildir. Retirement planı owner, client migration ve ilgili ingress/worker yollarının removal/deny kanıtını gerektirir. Düzeltme yalnız yeni version’a uygulanırsa eski deployment aynı data’ya başka policy ile erişebilir; inventory bu ilişkiyi görünür kılmalıdır.
2. Red · Güven ve etki
Hareket olmadan bütün senaryoları oku
Version retired
- Operation inventory ile eşleştirildi
notes-v1 kaydı retired lifecycle, policyRevision=6 ve readLegacyNote içerir. Desteklenen profile ise readPublicNote ve requiredPolicyRevision=7 kullanır.
- Inventory operation
- Inventory: notes-v1
- Admission gate
- Admission bekliyor
- Title delivery boundary
- Title hazırlanmadı
- Business gate’ler ayrı okundu
Row functionAllowed, objectAllowed ve readPropertiesAllowed değerlerini true verir. Bu olumlu değerler retired lifecycle kontrolünün yerine geçmez.
- Inventory operation
- Business gates=true
- Admission gate
- Lifecycle retired
- Title delivery boundary
- Admission pending
- Inventory admission sınırı durdu
expectedAccepted=false ve reason=retired’tır. Bu profile retired operation admission’ını reddeder; dış deployment’ın kaldırıldığını bildirmez.
- Inventory operation
- Acceptance=false
- Admission gate
- Reason: retired
- Title delivery boundary
- Delivery=false
- Projection kapalı tutuldu
expectedBody=null ve expectedMutation=false’tur. Public title’ın öğrenme nesnesi olması bile bu seçilen gate’i atlama gerekçesi değildir.
- Inventory operation
- Known gate denial
- Admission gate
- Mutation=false
- Title delivery boundary
- Body=null
- Contract description enforcement sayılmadı
deprecated veya OpenAPI security declaration runtime gate değildir. Retirement policy’nin tanımlanması ile deployment removal’ın gözlenmesi farklı kanıtlardır.
- Inventory operation
- Description ≠ enforcement
- Admission gate
- Fixture deny known
- Title delivery boundary
- External runtime unknown
- Ret nedeni doğru kapsamda kaldı
Old version kaydı tek başına vulnerability veya breach kanıtı değildir. Bilinen sonuç bu inventory profile’da admission ve delivery’nin reddidir.
- Inventory operation
- No title delivery
- Admission gate
- No mutation
- Title delivery boundary
- No incident inference
Policy drift
- Operation inventory ile eşleştirildi
notes-v2 inventory kaydı active ve policyRevision=7’dir. policy-drift row’unda runtimePolicyRevisionDeclared=6 olması aynı operation için farklı enforcement beklentisi gösterir.
- Inventory operation
- Inventory: notes-v2
- Admission gate
- Admission bekliyor
- Title delivery boundary
- Title hazırlanmadı
- Business gate’ler ayrı okundu
Function, object ve property koşulları true olsa da required policy revision ile runtime revision uyuşmalıdır. Shape veya permission alanları revision farkını kapatmaz.
- Inventory operation
- Business gates=true
- Admission gate
- Required 7; declared 6
- Title delivery boundary
- Admission pending
- Inventory admission sınırı durdu
expectedAccepted=false ve reason=policy-mismatch’tir. Inventory active olsa da bu revision farkıyla title delivery’ye ilerlenmez.
- Inventory operation
- Acceptance=false
- Admission gate
- Reason: policy-mismatch
- Title delivery boundary
- Delivery=false
- Projection kapalı tutuldu
expectedBody=null ve expectedMutation=false’tur. Public title’ın öğrenme nesnesi olması bile bu seçilen gate’i atlama gerekçesi değildir.
- Inventory operation
- Known gate denial
- Admission gate
- Mutation=false
- Title delivery boundary
- Body=null
- Contract description enforcement sayılmadı
OpenAPI security fragment’ı required runtime revision’ın uygulanmasını kendi başına sağlayamaz. Description ile enforcement kaynağı ayrı takip edilir.
- Inventory operation
- Description ≠ enforcement
- Admission gate
- Fixture deny known
- Title delivery boundary
- External runtime unknown
- Ret nedeni doğru kapsamda kaldı
Policy drift bir reconciliation bulgusudur; tek başına veri sızıntısı kanıtı değildir. Hangi operation, context ve revision’ın farklı olduğu bu tuple’da korunur.
- Inventory operation
- No title delivery
- Admission gate
- No mutation
- Title delivery boundary
- No incident inference
VARSAYIM · SINIR · KONTROL
Dokümante edilen route’u tek yüzey sanmak
Normal consumer, desteklenen notes-v2 contract’ını kullanır. Bozulan varsayım, güncel dokümantasyonda görünmeyen deployment’ın artık çalışmadığı veya aynı security policy’yi uyguladığıdır. Paralel version/environment’lar aynı resource’a farklı enforcement ile bağlıysa integration’ın read/action sınırı değişebilir. Eski version’ın varlığı tek başına vulnerability veya breach değildir; retirement ve policy kanıtı belirleyicidir. Artifact notes-v1 için retirement gate’inde ret gösterir, dış host’un reachability’sini ölçmez. Owner’a bağlı inventory reconciliation, gerekli policy’nin ilgili version’larda uygulanması ve migration/removal doğrulaması bu sınırı korur. Verilen kayıtlar gerçek exposed-service envanteri yerine geçmez.
Contract doğruluğunu business permission sanmak
Normal request shape ve tanımlanmış security scheme, consumer’ın doğru interface’i kullandığını gösterebilir. Bunlar object ilişkisini veya response property permission’ını otomatik uygulamaz. Schema validation veya gateway authentication sonrasında handler function/object/property kararlarını atlarsa, schema-valid bir request yetkisiz resource read ya da gereksiz alanların teslimiyle sonuçlanabilir. PermissionRows, public-note için olumlu sonucu ve her ayrı ret gate’ini inert verilerle gösterir. Operation’ın policy’ye açıkça bağlanması ve minimum response projection bu sınırı korur. Eksik inventory kanıtı ile object denial aynı reason değildir; ikisini birleştirmek hangi control’ün eksik olduğunu saklar.
3. Blue · Güvenli geliştirme ve savunma
Hareket olmadan bütün senaryoları oku
Inventory eksik
- Unknown version kaydı açıldı
unknown-version row’u inventoryKey=notes-v3 ve runtimePolicyRevisionDeclared=null içerir. Listedeki v1/v2 bilgisi, v3 ownership veya lifecycle sonucunu doldurmaz.
- Inventory/contract observation
- Key: notes-v3
- Reconciliation review
- Revision=null
- Evidence conclusion
- Scope UNKNOWN
- Missing inventory nedeni korundu
reason=inventory-unknown, bir known object-denial ile aynı değildir. Owner, environment, contract ve policy revision için reconciliation gerekir.
- Inventory/contract observation
- Inventory unknown
- Reconciliation review
- Ownership evidence missing
- Evidence conclusion
- Admission pending
- Güvenli sonuç kanıttan ayrıldı
expectedAccepted=false, expectedDelivery=false ve expectedBody=null’dır. Güvenli no-delivery kararı, unknown scope’u retired veya hostile diye kanıtlamaz.
- Inventory/contract observation
- Admission=false
- Reconciliation review
- Unknown scope retained
- Evidence conclusion
- Body=null
- Access log yokluğu removal olmadı
unknownEvidence missingAccessLogMeans alanı receipt’in bilinmediğini söyler. Log yokluğu deployment’ın kaldırıldığını veya route’un erişilemediğini kanıtlamaz.
- Inventory/contract observation
- Receipt UNKNOWN
- Reconciliation review
- Reachability UNKNOWN
- Evidence conclusion
- No removal proof
- Reconciliation tuple’ı belirlendi
Host, environment, API version, owner, contract revision, policy revision ve data flow aynı operation altında incelenir. Yalnız version path’i bu tuple’ın yerine geçmez.
- Inventory/contract observation
- Operation tuple required
- Reconciliation review
- Owner evidence required
- Evidence conclusion
- No guessed inventory
- İnceleme sonucu dar tutuldu
Bu JSON inventory kararlarını öğretir, canlı exposure listesini üretmez. Bilinen no-delivery sonucu ile bilinmeyen deployment durumu birlikte raporlanır.
- Inventory/contract observation
- Fixture denial known
- Reconciliation review
- Deployment UNKNOWN
- Evidence conclusion
- Investigation required
Security mantığı
- Security requirement biçimi okundu
sameObjectAllSchemes scheme-A ve scheme-B için AND tanımlar. Aynı requirement object’inde iki scheme olması ikisinin birlikte gerekmesi demektir.
- Inventory/contract observation
- Same object: AND
- Reconciliation review
- Alternatives incelenmedi
- Evidence conclusion
- Runtime sonuç yok
- Alternatives dizisi ayrıldı
arrayAlternatives requirement-A ve requirement-B için OR tanımlar. Requirement object’i ile alternatives array’ini aynı conjunction gibi okumak declaration anlamını değiştirir.
- Inventory/contract observation
- Object: AND
- Reconciliation review
- Array: OR
- Evidence conclusion
- Declaration review
- Empty object semantiği korundu
emptyRequirementObject representation={} ve anonymousAlternative=true içerir. Boş object, root security declaration’ı kaldıran boş operation array’i ile aynı şey değildir.
- Inventory/contract observation
- {}: anonymous alternative
- Reconciliation review
- []: operation override
- Evidence conclusion
- Forms distinct
- Operation override ayrı değerlendirildi
emptyOperationArray removesRootDeclaration=true bildirir. İnceleme root ile operation declaration’ını birlikte okur; descriptionEnforcesRuntime=false sınırını korur.
- Inventory/contract observation
- Override semantics known
- Reconciliation review
- Description enforcement=false
- Evidence conclusion
- No runtime acceptance claim
- Business gate tuple’ı eklenmedi
OpenAPI scheme declaration object ownership veya title property permission kontrolü değildir. permissionRows function, object ve properties için ayrı koşullar tutar.
- Inventory/contract observation
- Scheme ≠ object policy
- Reconciliation review
- Function/object/property separate
- Evidence conclusion
- No automatic title grant
- Contract review enforcement’dan ayrıldı
Bu inceleme declaration operatörlerini ve override anlamını doğrular. Runtime’ın bunları uygulaması ve response projection’ı için ayrıca gözlem gerekir.
- Inventory/contract observation
- Declaration semantics known
- Reconciliation review
- Runtime evidence separate
- Evidence conclusion
- Property delivery unobserved
UYGULAMA · GÜVENLİK KONTROLÜ · DOĞRULAMA
Inventory ve runtime evidence’ını reconcile et
Owner inventory’sinde host, environment, API version, contract revision, policy revision ve data-flow owner bulunur. Runtime observations, deployment/route identity ve policy revision’ı aynı operation correlation’a bağlar. Dokümanın başarıyla build edilmesi veya access-log kaydının bulunmaması retirement kanıtı değildir. Baseline active v2, policy revision=7 ve izinli title response’udur. Retired, revision mismatch ve unknown kayıtlar ayrı reason taşır. Unknown evidence araştırma gerektirir; kabulün durması saldırı kanıtı sayılmaz. Gerekli telemetry yoksa observed state bilinmiyor kalır. Reconciliation, müşteri body’sini taşımadan resource class ve onaylı integration yönünü kaydedebilir; bu local JSON gerçek service envanterini oluşturmaz.
Versioning kontrolünü migration kararına bağla
Contract regression, readPublicNote için expected response key’leri ile function/object/property ret sonuçlarını birlikte değerlendirir. Operation security override’ı root policy ile karşılaştırılırken empty object, empty array ve alternative semantiği korunur. Description format update ile business API change ayrı kararlardır; schema version artışı authorization düzeltmesini eski deployment’a taşımaz. Owner ve consumer migration kanıtı tamamlandığında removal/deny state ayrıca doğrulanır. Legacy client veya staging data bağlantısı normal drift nedenleri olabilir. Local JSON comparison yalnız seçilen revision/property sonuçlarını gösterir; tam OpenAPI validator veya deployment enforcement değildir. Backport, compatibility süresi ve retirement kararı etki ile policy farkına göre verilir.
ŞİMDİ VAKAYA UYGULA
Version veya security declaration hangi runtime sonucunu kanıtlamaz?
notes-v2 supported policy ile eşleştirilir; retired, drift ve unknown ayrı reason’larla delivery’yi durdurur. Contract declaration ile canlı enforcement ayrı kanıt ister.
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
Inventory–contract reconciliation
Bir alan seç; hangi sonucu desteklediğini ve nerede yetersiz kaldığını incele.
Ham kaydı ve alan açıklamalarını oku
{
"profile": {
"operationId": "readPublicNote",
"actor": "Duru",
"noteId": "note-A",
"noteTitle": "Tea & Bread",
"host": "https://notes.example.org",
"environment": "local-synthetic",
"requiredPolicyRevision": 7,
"contractRevision": "notes-contract-7",
"actualRequest": false,
"actualDeploymentInventory": false,
"actualAPIValidator": false,
"actualResource": false
},
"inventory": [
{
"key": "notes-v2",
"host": "https://notes.example.org",
"environment": "local-synthetic",
"apiVersion": "v2",
"owner": "library-team",
"lifecycle": "active",
"policyRevision": 7,
"contractRevision": "notes-contract-7",
"operationId": "readPublicNote",
"retirementPlan": "supported; normal review before change",
"dataClass": "public-note-title",
"dataFlow": "owned note store → selected title response"
},
{
"key": "notes-v1",
"host": "https://notes.example.org",
"environment": "local-synthetic",
"apiVersion": "v1",
"owner": "library-team",
"lifecycle": "retired",
"policyRevision": 6,
"contractRevision": "notes-contract-6",
"operationId": "readLegacyNote",
"retirementPlan": "deny admission in this selected fixture; deployment removal needs independent evidence",
"dataClass": "public-note-title",
"dataFlow": "no fixture resource delivery"
}
],
"contractFragment": {
"openapi": "3.2.1",
"info": {
"title": "Atlas public notes",
"version": "notes-contract-7"
},
"operation": {
"operationId": "readPublicNote",
"method": "GET",
"path": "/v2/notes/{noteId}",
"deprecated": false,
"security": [
{
"bearerAuth": []
}
]
},
"businessPolicy": {
"function": "notes.read",
"object": "public-note relationship",
"readFields": [
"title"
],
"mutation": false
},
"completeOpenAPIDocument": false
},
"rows": [
{
"case": "normal",
"inventoryKey": "notes-v2",
"runtimePolicyRevisionDeclared": 7,
"functionAllowed": true,
"objectAllowed": true,
"readPropertiesAllowed": true,
"expectedAccepted": true,
"reason": "accepted",
"expectedDelivery": true,
"expectedBody": {
"title": "Tea & Bread"
},
"expectedMutation": false
},
{
"case": "retired-version",
"inventoryKey": "notes-v1",
"runtimePolicyRevisionDeclared": 6,
"functionAllowed": true,
"objectAllowed": true,
"readPropertiesAllowed": true,
"expectedAccepted": false,
"reason": "retired",
"expectedDelivery": false,
"expectedBody": null,
"expectedMutation": false
},
{
"case": "policy-drift",
"inventoryKey": "notes-v2",
"runtimePolicyRevisionDeclared": 6,
"functionAllowed": true,
"objectAllowed": true,
"readPropertiesAllowed": true,
"expectedAccepted": false,
"reason": "policy-mismatch",
"expectedDelivery": false,
"expectedBody": null,
"expectedMutation": false
},
{
"case": "unknown-version",
"inventoryKey": "notes-v3",
"runtimePolicyRevisionDeclared": null,
"functionAllowed": true,
"objectAllowed": true,
"readPropertiesAllowed": true,
"expectedAccepted": false,
"reason": "inventory-unknown",
"expectedDelivery": false,
"expectedBody": null,
"expectedMutation": false
}
],
"permissionRows": [
{
"case": "public-note",
"function": true,
"object": true,
"properties": true,
"expected": true
},
{
"case": "no-function",
"function": false,
"object": true,
"properties": true,
"expected": false
},
{
"case": "no-object",
"function": true,
"object": false,
"properties": true,
"expected": false
},
{
"case": "no-property",
"function": true,
"object": true,
"properties": false,
"expected": false
}
],
"securitySemantics": {
"sameObjectAllSchemes": {
"requirements": [
"scheme-A",
"scheme-B"
],
"operator": "AND"
},
"arrayAlternatives": {
"requirements": [
"requirement-A",
"requirement-B"
],
"operator": "OR"
},
"emptyRequirementObject": {
"representation": {},
"anonymousAlternative": true
},
"emptyOperationArray": {
"representation": [],
"removesRootDeclaration": true
},
"descriptionEnforcesRuntime": false
},
"unknownEvidence": {
"missingInventoryMeans": "unknown scope; deny fixture delivery, investigate ownership",
"missingAccessLogMeans": "unknown receipt; not proof of retired deployment removal",
"schemaValidatedMeans": "shape evidence; not business permission"
},
"boundaries": {
"deprecatedDisablesEndpoint": false,
"OpenAPISecurityChecksObjectOwner": false,
"versionPathEqualsDocumentVersion": false,
"inventoryEntryProvesLiveRuntime": false,
"missingTraceProvesNoReachability": false
}
}- inventory
- Host/environment/owner/lifecycle ve revision kayıtları.
- contractFragment
- Selected description fields; complete schema document değil.
- rows
- Binding/lifecycle/revision admission ve delivery sonuçları.
- permissionRows
- Function/object/property read policy ayrı gate’ler.
- securitySemantics
- OAS requirement composition ve override distinction.
Owned inert inventory/contract ve read-only policy matrix; network discovery, actual runtime, complete OAS validation veya retirement deployment kanıtı değildir.
İki yanlış kanı
Deprecated=true endpoint’i otomatik kapatır.
Description consumers’a migration uyarısı verir; runtime removal/deny ayrıca kanıtlanır.
OpenAPI security scheme object permissions’ı da doğrular.
Scheme declaration runtime function/object/property policy’yi uygulamaz.
SIRA SENDE
Bu hikâyeyi sen çöz.
Sonucu tahmin et, kanıtın sınırını bul ve nedenini kendi cümlenle anlat.
notes-v2 inventory policyRevision=7, fakat runtimePolicyRevisionDeclared=6. Function/object/property koşulları true olsa da delivery yapılır mı?
- Evet. Version path v2 ise bütün runtime policy’ler günceldir.
- Hayır. policy-mismatch; expectedBody=null.
Gerekçeli cevabı oku
Hayır. policy-mismatch; expectedBody=null. — Bu profile requiredPolicyRevision=7 ister. Permission koşulları true olsa da eski policy revision kabul edilmez.
OpenAPI Security Requirement içinde iki scheme ile requirement array’indeki iki alternatif neden aynı mantık değil?
Dersten seçilen artifact alanları; öğretim örneği
- securitySemantics.sameObjectAllSchemes
- {"requirements":["scheme-A","scheme-B"],"operator":"AND"}
- securitySemantics.arrayAlternatives
- {"requirements":["requirement-A","requirement-B"],"operator":"OR"}
- securitySemantics.emptyRequirementObject
- {"representation":{},"anonymousAlternative":true}
- Aynı object bütün scheme’leri; array alternatiflerden birini ister.
- Her yerde yalnız ilk scheme uygulanır; diğer alanlar yorumdur.
Gerekçeli cevabı oku
Aynı object bütün scheme’leri; array alternatiflerden birini ister. — sameObjectAllSchemes AND, arrayAlternatives OR’dır. Empty requirement object ise anonymous alternative tanımlayabilir; bu açıklama runtime enforcement değildir.
Inventory notes-v1 retired diyor ve fixture delivery’si yok. Deprecated etiketi veya eksik access log neden endpoint’in gerçekten kaldırıldığını kanıtlamaz?
Gerekçeli cevabı oku
Inventory owner, environment, version, contract ve retirement kararını görünür kılar. Bu fixture retired entry için delivery’yi reddeder; deployment’tan kaldırılma ayrı gözlem ister. deprecated alanı endpoint’i kendiliğinden kapatmaz. Access log bulunmaması da hiç request gelmediği veya route’un erişilemez olduğu kanıtı değildir. Schema validation biçimi doğrular; function/object/property izni ayrıca uygulanmalıdır.
□ Retirement kaydını gerçek deployment removal kanıtı saymadım.
□ Eksik log veya schema başarısını authorization enforcement saymadım.
Uygulama konsolunu aç · request / response / browser
Request, URL, cookie ve DOM örneklerini ayrıca aç
Kaynaklar ve kapsam
- OWASP API9:2023 — Improper Inventory ManagementIs the API Vulnerable?: host purpose/environment/version/retirement and data-flow blindspots; How To Prevent: hosts/integrated-service inventory, documentation and exposed-version protections
- OpenAPI Specification v3.2.1 (10 September 2026)§4.1.1 openapi versus info.version; §4.10.1 operationId/deprecated/security override; §4.30 Security Requirement Object: alternatives OR, multiple schemes AND, empty object anonymous
- OWASP API1:2023 — Broken Object Level AuthorizationIs the API Vulnerable?: requested action on requested object; object versus function distinction; How To Prevent: per-record policy checks
- OWASP API3:2023 — Broken Object Property Level AuthorizationIs the API Vulnerable?: read/write properties; How To Prevent: explicit property selection, avoid generic input binding, update allowlist and response schema
- OWASP API5:2023 — Broken Function Level AuthorizationIs the API Vulnerable?: business function not inferred from path; How To Prevent: explicit function grants and shared deny-default enforcement