Install
$ agentstack add skill-shieldnet-360-secure-vibe-frontend-security Open-source listing, not yet scanned by AgentStack. Follow the source repository for install instructions.
Security review
⚠ Flagged1 finding(s); flagged for manual review. · v0.1.0 How review works →
- • Prompt-injection patterns
- • Secret / credential exfiltration
- • Dangerous shell & filesystem operations
- • Untrusted network calls
- • Known-malicious package signatures
- high Dangerous shell/eval execution.
What it can access
- ● Network access Used
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ● Dynamic code execution Used
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
Frontend Security
Browser-side hardening: XSS, CSP, CORS, SRI, DOM clobbering, iframe sandboxing, Trusted Types
ALWAYS
- Treat all user/URL/storage data as untrusted. Render via framework escaping (
{}in JSX/Vue/Svelte,{{ }}in templating). For raw HTML use a vetted sanitizer (DOMPurify) with a strict allowlist. - Send a strict
Content-Security-Policyheader. Minimum production baseline:default-src 'self'; script-src 'self' 'nonce-'; object-src 'none'; base-uri 'self'; frame-ancestors 'none'; form-action 'self'; upgrade-insecure-requests. Use nonces or hashes — never'unsafe-inline'forscript-src. - Set
Strict-Transport-Security: max-age=63072000; includeSubDomains; preload,X-Content-Type-Options: nosniff,Referrer-Policy: no-referrer-when-downgradeor stricter, andPermissions-Policyto drop unused features. - Add
integrity="sha384-..." crossorigin="anonymous"to every `and` loaded from a CDN. - Add
sandbox="allow-scripts allow-same-origin"(only the attributes you need) to every ``. Default to no allow flags. - Use cookies with
Secure; HttpOnly; SameSite=Lax(orStrictfor sensitive flows).__Host-prefix when there's no subdomain sharing. - Enable Trusted Types where browser support allows (
Content-Security-Policy: require-trusted-types-for 'script') so DOM-sink assignments (innerHTML,setAttribute('src', ...)for scripts) must be routed through a typed policy.
NEVER
- Use
dangerouslySetInnerHTML,v-html,{@html ...},innerHTML =, ordocument.writewith untrusted input. - Use
eval,new Function,setTimeout(string),setInterval(string), orFunction('return x'). - Inject user input into
href,src,formaction,action, or any URL-bearing attribute without scheme validation (blockjavascript:,data:,vbscript:). - Use
target="_blank"withoutrel="noopener noreferrer"— leakswindow.opener. - Trust DOM nodes by id alone. DOM clobbering: an attacker-controlled `
shadowswindow.config`. - Use
postMessagewithout checkingevent.originagainst an allowlist. - Store JWTs, refresh tokens, or PII in
localStorage/sessionStorage— any XSS exfiltrates them. Prefer HttpOnly cookies. - Read or write
document.cookiefrom JavaScript for auth cookies — they should be HttpOnly anyway. - Treat tightening the HTML sanitizer as the fix when the exploit rides on content the sanitizer allows by design — a valid `
, an, or a permitted attribute. The sanitizer is working; the vulnerable behaviour is **downstream** (in-app navigation, a shell /openExternal` sink, an over-privileged renderer or IPC bridge, a URL sink). Fix the sink / context, not the markup allowlist.
KNOWN FALSE POSITIVES
- Internal admin tools deliberately rendering Markdown / rich text from trusted authors may use
dangerouslySetInnerHTMLafter a sanitizer pass; document the sanitizer call inline. - Browser extensions sometimes need
'unsafe-eval'in the extension CSP; user-facing web app CSP should still forbid it. - WebSocket connections to non-same-origin endpoints are fine when the server performs origin validation.
- A native / WASM codec, decoder, or loader that is merely registered or referenced (
setDRACOLoader(...), a plugin registration, a lazy import) is not an active attack surface unless its binary / asset is actually shipped and the module initialized at runtime. Verify asset-present + module-init + reachable input format before flagging — wiring alone is a false positive (inputs needing the missing decoder simply fail to load).
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: ShieldNet-360
- Source: ShieldNet-360/secure-vibe
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.