astro-security

Security patterns for Astro lead generation websites on Cloudflare. Forms, headers, bot protection, GDPR. Use for any production lead gen site.

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "astro-security" with this command: npx skills add soborbo/claudeskills/soborbo-claudeskills-astro-security

Astro Security Skill

Security patterns for lead generation sites.

Core Rules (Non-Negotiable)

ViolationResult
Production form without Turnstile + honeypotFAIL
Secret exposed client-sideFAIL
User input stored without server validationFAIL
Indexable staging environmentFAIL
Missing security headersFAIL
Cookie banner missing before analyticsFAIL

Form Security (Required)

Every form must have:

ProtectionImplementation
TurnstileCloudflare captcha (invisible mode)
HoneypotHidden field, reject if filled
Rate limitMax 5 submissions/IP/hour
ValidationServer-side Zod, never trust client
SanitizeStrip HTML, trim whitespace

See references/forms.md.

Security Headers (Required)

CSP Rules:

  • MUST disallow inline scripts unless hashed
  • MUST restrict script-src to required domains only
  • MUST test in report-only before enforcement

Add to _headers:

X-Content-Type-Options: nosniff
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block
Referrer-Policy: strict-origin-when-cross-origin
Permissions-Policy: camera=(), microphone=(), geolocation=()
Content-Security-Policy: [see references]
Strict-Transport-Security: max-age=31536000; includeSubDomains

See references/headers.md.

Environment Variables

# .env.example (commit this)
TURNSTILE_SITE_KEY=
TURNSTILE_SECRET_KEY=
RESEND_API_KEY=
GOOGLE_SHEETS_ID=

# .env (never commit)
# Add to .gitignore

Rules:

  • Never expose secrets client-side
  • Use import.meta.env for public vars only
  • Validate all env vars on build

Bot Protection

Cloudflare (free tier):

  • Bot Fight Mode: ON
  • Security Level: Medium
  • Challenge Passage: 30 minutes

Application level:

  • Turnstile on all forms
  • Honeypot fields
  • Rate limiting per IP
  • Block empty referrer (optional)

Third-Party Scripts

  • Use SRI (integrity hash) for CDN scripts
  • Load async/defer
  • Minimize scripts
  • Review GTM tags regularly

GDPR Compliance

Required:

  • Cookie banner (before non-essential cookies)
  • Privacy policy page
  • Form consent checkbox (if marketing)
  • Data retention policy
  • Right to deletion process

Cookie categories:

TypeConsentExamples
NecessaryNoSession, CSRF
AnalyticsYesGA4, Hotjar
MarketingYesMeta Pixel, Google Ads

See references/gdpr.md.

Input Validation

Never: Trust client-side alone, store raw input, render unsanitized HTML.

See forms.md for Zod schemas.

File Uploads

If needed: Max 5MB, whitelist types, rename files, store outside webroot.

Staging Protection

Password protect OR Cloudflare Access. Add noindex, block in robots.txt.

Error Handling

  • Error messages MUST NOT reveal stack traces or internals
  • API errors MUST return generic messages (Something went wrong)
  • Detailed errors allowed ONLY in development
  • 404/500 pages must not leak tech stack info

Dependencies

  • Minimize third-party scripts
  • Remove unused dependencies before launch
  • Review third-party access quarterly
  • Prefer self-hosted over CDN when possible

Definition of Done

Security requirements before launch:

  • Turnstile on all forms
  • Honeypot fields added
  • Rate limiting configured
  • Security headers set
  • HTTPS enforced
  • .env in .gitignore
  • No secrets in client code
  • Cookie banner working
  • Privacy policy linked
  • Staging protected
  • Error pages don't leak info

References

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

astro-seo

No summary provided by upstream source.

Repository SourceNeeds Review
General

astro-ux

No summary provided by upstream source.

Repository SourceNeeds Review
General

astro-architecture

No summary provided by upstream source.

Repository SourceNeeds Review
General

astro-a11y

No summary provided by upstream source.

Repository SourceNeeds Review