Skip to content
Development
Agent

dfd-example

A standalone data-flow diagram with its trust boundaries explained, to illustrate the notation before you build your own. The system: a file-upload feature where users upload documents that a worker processes.

From plugin
skills
954 skills54 agents

Claude Code

$ npx -y skills add vanara-agents/skills --agent claude-code

Agent definition

dfd-example.md

DFD Example — Annotated

A standalone data-flow diagram with its trust boundaries explained, to illustrate the notation before you build your own. The system: a file-upload feature where users upload documents that a worker processes.

The diagram

TRUST BOUNDARY A: Internet  ││  App tier        TRUST BOUNDARY B: App tier  ┊┊  Worker tier

  (E1) User ──1: HTTPS PUT /files (JWT)──►││──► (P2) Upload API ──2: store object──►││──► (DS3) Object Store
                                         ││          │                            ││
                                         ││          └──3: enqueue job────────────►││──► (DS4) Job Queue
                                         ││                                        ┊┊
                                        ││                       (P5) Worker ◄──4: dequeue──┊┊── (DS4) Job Queue
                                         ││                            │
                                         ││                            └──5: read object──► (DS3) Object Store
                                         ││                            │
                                         ││                            └──6: write result──► (DS6) Results DB

  Legend: (E)=external entity (P)=process (DS)=data store
          N: numbered data flow   ││ = network/privilege boundary   ┊┊ = process/tier boundary

Why the boundaries are where they are

  • **Boundary A (Internet → App tier):** flow 1 carries untrusted, attacker-controllable input — the file

bytes, the filename, the content-type header, and the JWT. Everything arriving here must be authenticated (Spoofing), authorized (Elevation of privilege), and validated (Tampering). This is the single most important boundary in the system.

  • **Boundary B (App tier → Worker tier):** the job queue is a *trust boundary even though it's internal*.

The worker (P5) consumes whatever the Upload API enqueued plus the object it stored. If an attacker can influence the filename or object contents, the worker is processing attacker-controlled data — so parsing in P5 (think: image/PDF/zip parsers) is a prime Tampering and Elevation-of-privilege target, even though no public flow touches the worker directly.

Threats that fall out of this diagram

Reading along the crossing flows:

  • **Flow 1 → P2:** unrestricted file upload (a `.php`/`.svg` masquerading as an image) → Elevation of

privilege / stored XSS. Path traversal in the filename → Tampering of the object store.

  • **DS3 Object Store:** public-readable bucket → Information disclosure of other users' files.

Missing ownership check on later retrieval → IDOR (Elevation of privilege).

  • **Flow 4 → P5:** a malicious file enqueued earlier is parsed by the worker → memory-corruption or

decompression-bomb DoS in the parser. The worker often runs with more privileges than the API — a parser exploit here is high impact.

  • **DS6 Results DB:** if results include rendered user content, stored XSS can resurface when displayed.

Takeaways

1. Internal queues and worker tiers are still behind trust boundaries — model them. 2. The most dangerous element is often not the public API but the *background process* that parses what the public API accepted. 3. Number flows so the threat table can reference them unambiguously (e.g. "T-flow1-E", "T-flow4-T").

Read more
@vanara-agents
Ships withskills

🐒 Free agents, skills & packs for Claude Code One subscription. An army of Claude Code agents. 30 production-grade agents, skills, and packs for Claude Code — free, Apache-2.0, install with one command.

917 skills54 agents
Get the whole plugin

Stars on GitHub

Momentum

stars in total
9
Star history of vanara-agents/skills on GitHub, a chart by star-history.com

Other agents on skills.

AGENT

AGENT

Agent

Use when designing a new HTTP/GraphQL API or changing an existing one — modeling resources, defining endpoint contracts, choosing…

review-notes

review-notes

Agent

This shows how the api-designer agent reviews a flawed draft. Findings are severity-ranked so the implementer fixes the…

contract-and-openapi

contract-and-openapi

Agent

The contract is the deliverable. Express it as an **OpenAPI 3.1** document so it is human-readable *and* machine-checkable. This…

design-checklist

design-checklist

Agent

Run through this before declaring an API contract done. It is ordered the way you should *design*: resources first, cross-cutting…

pr-comment-template

pr-comment-template

Agent

Copy-paste templates for leaving review comments. Keep each comment to one finding: an anchor, the problem, and the fix.

More agents from other plugins.

a11y-architect
Auto-invoked

a11y-architect

Agent

Accessibility Architect specializing in WCAG 2.2 compliance for Web and Native platforms. Use PROACTIVELY when designing UI…

ecc13d293k
@affaan-m@affaan-mInstall Agent
analyze-pass-impact

analyze-pass-impact

Agent

Analyzes how a specific topic affects a group of compiler passes. Used by the /plan-update skill to parallelize research across…

react3d252k
@facebook@facebookInstall Agent
orchestrator

orchestrator

Agent

- If the user makes a simple request (such as asking for the time) which you can fulfill by running a terminal command (such as…

codex2d135k
@openai@openaiInstall Agent
cavecrew-builder

cavecrew-builder

Agent

Surgical 1-2 file edit. Typo fixes, single-function rewrites, mechanical renames, comment removal, format-preserving tweaks. Hard…

caveman3d119k
@juliusbrussee@juliusbrusseeInstall Agent

Questions about dfd-example.

Which coding agents can use dfd-example?
dfd-example installs in Claude Code and Cursor: each loads subagents from .claude/agents, so copy the file there. Flowy's auto-invocation runs in Claude Code only.