Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add ShieldNet-360/secure-vibe --skill file-upload-securitygit clone --depth 1 https://github.com/ShieldNet-360/secure-vibeWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/shieldnet-360/secure-vibe/file-upload-security)<a href="https://agentmods.dev/skills/shieldnet-360/secure-vibe/file-upload-security"><img src="https://agentmods.dev/badge/skills/shieldnet-360/secure-vibe/file-upload-security.svg" alt="Measured on agentmods" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00081 | $0.02044 |
| Opus 5 | $0.00041 | $0.01022 |
| Sonnet 5 | $0.00016 | $0.00409 |
| Haiku 4.5 | $0.00008 | $0.00204 |
Grade A, and why
file-upload-security scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 6d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 142 lines — stays where its author put it; the contents beside it link to each section on GitHub.
File Upload Security
Rules (for AI agents)
ALWAYS
- Put every new upload in a non-public quarantine location, and do not expose it, link it, index it, or hand it to a downstream workflow until validation has succeeded. Quarantine → validate → process → publish, in that order. This is the invariant the rest of these rules hang from, and the one direct-to-storage uploads most often skip.
- Validate content server-side with checks appropriate to the format. Where a
format has a reliable signature, verify it; for container and document formats —
DOCX, XLSX and ZIP are all ZIP at the container level — also validate structure
against the format you expect. Text-based formats such as SVG and CSV have no
signature to check at all, so a signature check alone is not a content policy. The
client's
Content-Typeand the filename are attacker-controlled and are never the check. - Keep a per-endpoint allowlist of accepted types and deny everything else. Deny
image/svg+xmlby default: an SVG is a document that can carry script. Where an endpoint genuinely requires SVG, treat it as active content — rasterize it, or run a maintained SVG-aware sanitizer with an explicit element, attribute, URL and CSS allowlist. A generic HTML sanitizer is the wrong tool for it. - Bound the expansion, not only the upload. For archives and compressed or container formats, cap expanded bytes, entry count, nesting depth, compression ratio, per-entry size and processing time, and reject before extracting when the projected expansion exceeds policy. A limit on the compressed bytes says nothing about what they become (CWE-409).
- Store under an application-generated identifier — a UUID or content hash — outside the executable or web document root, and never build the storage path from the user-supplied name. Keep the original filename as bounded metadata only, and encode it for the specific output context where it is displayed. There is no "escaped at rest" that is safe in every context.
- Run every parse, re-encode or extraction of untrusted bytes in an isolated
worker: least privilege, no unnecessary network, and CPU, memory and wall-clock
limits. The decoder is the attack surface, so invoking one is not itself the
defense — ImageTragick (CVE-2016-3714) and the GitLab ExifTool RCE (CVE-2021-22205)
were both a server handing user bytes to a media library.
container-securityowns what that isolation looks like. - Scan for malware where the threat model calls for it, out of band, with the object still quarantined. Do not send uploads to a third-party or public scanning service — VirusTotal among them — unless the data classification explicitly permits disclosing that content to that provider. Submitting a customer contract for scanning is disclosing the contract.
- Serve according to what the content is. Untrusted content a browser may render
inline belongs on an isolated, cookie-less origin, with a server-determined
Content-Type,X-Content-Type-Options: nosniff,Content-Disposition: attachmentwherever inline rendering is not required, andContent-Security-Policy: default-src 'none'; sandbox. A private document behind an authorizing application handler is a different and equally acceptable architecture.nosniffnarrows type sniffing; it does not make a shared origin safe for active content. - For direct-to-storage uploads, scope the credential with the provider's own
mechanism to the intended object, operation and a short lifetime, and apply
provider-side size constraints where they exist. A signed
Content-Typebinds the header the client sends, not the bytes — the stored object still has to be validated server-side before it leaves quarantine, and your gateway and application size limits do not sit on this path at all. - Where the "upload" accepts a URL and the server fetches it, apply
ssrf-preventionbefore the fetch, with size and time limits on the response. Validation starts on what comes back.api-securityowns who may upload and who may read the result.
What ships with it
5 files beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 6d ago First seen · 142 lines · 81 tokens per session scan A 3a35c6a01834
file-upload-security is a skill published in the GitHub repository ShieldNet-360/secure-vibe (22 stars, last pushed 23d ago), licensed MIT. It adds 81 tokens to every session and 2,044 once invoked, about $0.0004 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other skills, from other repositories
documenter-vitepress
Use when setting up or developing a Julia based documentation site with DocumenterVitepress.jl. Also use when the user mentions DocumenterVitepress, VitePress for Julia docs, or wants to preview docs locally with hot reload.
agent-teacher
A teaching aid that explains technical ideas with a small runnable code example and a guided walkthrough. It is meant for learning how something works, not fixing existing code.
offensive-crypto-attacks
Systematic methodology for identifying and exploiting cryptographic implementation weaknesses in real-world applications. Covers padding oracle attacks against CBC-mode ciphers with PKCS7 padding (Vaudenay's original attack through modern padbuster automation), ECB mode exploitation including block cut-and-paste and…
offensive-c2-frameworks
Command and Control framework deployment, configuration, and operational tradecraft for red team engagements. Covers Cobalt Strike (malleable C2 profiles, Beacon types HTTP/HTTPS/DNS/SMB, Beacon Object Files for in-memory execution, sleep and jitter tuning, named pipe pivoting), Sliver (implant generation across…
offensive-parameter-pollution
HTTP parameter pollution (HPP) checklist: duplicate parameter injection, backend vs frontend parsing differences, WAF bypass via HPP, server-side vs client-side HPP, and practical exploitation patterns. Use when testing web applications for parameter handling flaws.
offensive-z-wave
Z-Wave attack methodology — sniffing with Z-Force / EZ-Wave / RTL-SDR + ZniffMobile, S0 (legacy) network-key derivation flaw and key reuse, S2 (modern) ECDH commissioning analysis, replay/injection on unauthenticated nodes, default-key brute-force on test deployments, and home-automation hub pivots. Use when targeting…