Skip to content

App-layer read-only D1 guard за web worker-а (@sigma/db wrapper) #199

Description

@todorkolev

Контекст

D1 няма native runtime read-only binding - env.DB дава пълен read+write и това не се скоупва на ниво binding (CF токените са само за deploy/migrations, не за runtime). Затова least-privilege за четене се постига на app-layer.

Тук се получава чисто, защото web worker-ът никога легитимно не пише в D1: всички записи идват от sigma-etl (отделен worker с отделен binding); кешът е през Cache API, лимитерите - през ratelimit binding, report snapshot-ите - в R2. Единственият модел-контролиран SQL е assistant run_sql, който е замислен само за четене.

Предложение

Тънък read-only wrapper над env.DB, изложен от @sigma/db и ползван навсякъде в web. Отхвърля всичко освен четене (INSERT / UPDATE / DELETE / REPLACE, DDL, PRAGMA, ATTACH и т.н.), така че write просто не е достъпен от web runtime. Един chokepoint в @sigma/db.

Ползи

  1. Least-privilege / defense-in-depth за целия web D1 достъп.
  2. Обезврежда read-only D1 gate-а: щом web няма write-capable binding, assistant run_sql няма как да стигне до write път - AST guard-ът в sql-guard.ts спира да е единствената носеща защита.

Обхват и бележки

  • Това е app-layer мярка. Не е и не заменя:
  • Миграциите се движат от deploy/ETL, не от web runtime - wrapper-ът да не ги закача.
  • Всички пътища, които днес ползват env.DB директно, да минат през wrapper-а.

Връзки

Metadata

Metadata

Assignees

No one assigned

    Labels

    priority: highВисок приоритетsecurityСигурност и уязвимостиwebОбласт: web

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions