apply
Set chaff up in the folder: chaff.yaml for the chosen genre, today's findings shelved in .chaff-baseline.json, and, when asked, a…
Review the finished Worker against OWASP Top 10:2025, fix what is exploitable, prove each fix with a test, and report.
$ npx -y skills add receptron/mulmoterminal --skill security --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/securityContext preview
The summary Claude sees to decide when to auto-load this skill.
Review the finished Worker against OWASP Top 10:2025, fix what is exploitable, prove each fix with a test, and report.
name: blueprint-cloudflare-security description: "Review the finished Worker against OWASP Top 10:2025, fix what is exploitable, prove each fix with a test, and report."
The app is built and runs. Before it is published, review it the way an attacker would read it, fix what is exploitable, and leave a report the person can read. The check does not take your word for it: it starts the Worker with wrangler dev and sends it the requests an attack would send.
1. **Context.** Read `.blueprint/spec.md` (above all "必ず詰める点"), then `src/worker/`, `src/client/`, `wrangler.jsonc`, `public/_headers` and `package.json`. Note who may do what, where input enters, what is stored. 2. **Audit, category by category** (the list below). For each place input enters, trace it to where it is used. 3. **Fix** every HIGH and MEDIUM finding, and add a test to `test/security.test.ts` that fails without the fix. 4. **Report** in `.blueprint/security-review.md` (format below).
Severity: **HIGH** is directly exploitable (read or change someone's data, bypass sign-in, run code). **MEDIUM** needs a specific condition but the impact is real. **LOW** is defence in depth. Report a finding only when you can state how it is exploited and you are at least 70% sure. Do not report denial of service, rate limits, or missing validation on a field that cannot cause harm.
Worker; with accounts, a row is read or changed only by whoever may.
`public/_headers` for the static files, which never go through the Worker; no permissive CORS.
wrangler secrets, and `.dev.vars` (and any `.env`) listed in `.gitignore`; cookies `HttpOnly`, `Secure`, `SameSite=Lax`.
checked for type and size.
reaches `wrangler tail`), without passwords, cookies or secrets.
a failed check refuses rather than lets through.
stack trace or parser message.
no `X-Powered-By`.
`.blueprint/security-review.md`, in the spec's language. One section per category, its heading naming the id (`## A01 …` through `## A10 …`), every finding on a line of its own:
- HIGH fixed: <what was wrong, how it could be exploited> — <what changed, which test proves it> - LOW accepted: <what, and why it is acceptable for this app>
The state is `fixed`, `open` or `accepted`; a HIGH or MEDIUM may be neither `open` nor `accepted`. A category with nothing to report says what was checked and "指摘なし".
Done when the check passes: the report covers A01–A10 with nothing HIGH or MEDIUM left open, the tests pass, the audit is clean, and the running Worker refuses the cross-site change and the malformed body and sends the headers.
Code's trust prompt. The user adds git themselves after the build if they want it.
Run multiple coding-agent sessions in parallel — and see which one needs you. A browser terminal for parallel AI coding agents: several sessions side by side, each in its own cell, with the one that needs you marked in colour.
Set chaff up in the folder: chaff.yaml for the chosen genre, today's findings shelved in .chaff-baseline.json, and, when asked, a…
Measure what chaff reports on the named documents today, as the kind the person chose, and propose the setup — changing nothing…
Answer each question from the named documents only, quoting where the answer is written, or saying plainly that the documents do…
Add the approved answers to FAQ.md when the person chose to keep them, after what it already holds; change nothing otherwise.
Build the spec's operations as the Worker's API, with validation and tests.