BLA
BLA는 오픈소스 Blue Defense MCP와 CLI로, 소프트웨어 자산을 자동 AI 리버스 엔지니어링으로부터 보호합니다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗A small Next.js + Supabase application that demonstrates its own access control rather than claiming it.
Open /proof, choose an identity, aim a query at another tenant's data and
press run. The same query executes twice: once as that signed-in user through
the public key, and once with the service role that bypasses row level
security. The first returns nothing; the second returns the rows. That
difference is the evidence — the rows exist, and the database is what
withheld them.
This repository exists as a public work sample. There is no real customer data in it, and it is not connected to any production system.
Isolation enforced in the database. Row level security on every
customer-owned table, with policies keyed on auth.uid() through a
membership table. Changing an id in the URL, or calling the REST API
directly with the public key, produces the same answer as the UI: zero rows.
See supabase/migrations/0002_rls.sql.
An import that is safe to run twice. The feed importer keys on
(org_id, external_id) and compares a content hash before writing. Run it on
an unchanged feed and the second run performs zero writes, which is what makes
updated_at and any "what changed today" query mean anything.
See src/app/api/import/route.ts.
A webhook that cannot be forged or replayed. HMAC computed over the raw
request body, constant-time comparison, a timestamp window, and a unique
event ledger so a provider retry is a no-op rather than a second grant.
See src/lib/hmac.ts and src/app/api/webhooks/payments/route.ts.
Large file delivery. Deliverables are handed out as short-lived signed URLs; files never pass through the application server, which is what keeps a 2–3 GB video from timing out a serverless function.
With Claude Code, under a checked-in working agreement:
CLAUDE.md — four non-negotiable rules, each one backed by
either a hook or a subagent, because a rule nothing enforces is decoration..claude/agents/rls-auditor.md — an
adversarial access-control audit that is required to produce a query
proving a leak, not an opinion that there isn't one..claude/agents/migration-reviewer.md
— reviews a migration before it is applied, and must state the rollback..claude/hooks/check-rls.sh — a pre-commit
hook that blocks any migration creating a table with org_id while never
enabling row level security on it.cp .env.example .env.local # fill in your Supabase project values
npm install
npm run dev
Apply the schema in order:
supabase/migrations/0001_schema.sql
supabase/migrations/0002_rls.sql
supabase/seed.sql
Then create the three demo users (northwind@, acme@, [email protected])
and their memberships with scripts/seed-users.mjs.
supabase/migrations/ schema, then the access policies, separately
src/lib/supabase/ two clients: one that obeys RLS, one that bypasses it
src/lib/hmac.ts signature verification, commented with the three traps
src/app/api/ import, webhook, and the proof runner
src/app/proof/ the page that tries to break the isolation
.claude/ the agents and hook that enforce CLAUDE.md
Licensed MIT.