Security hardening: headers, scanning, Docker, firewall
- Caddy: HSTS, CSP, X-Frame-Options, nosniff, Referrer-Policy, Permissions-Policy on all responses - Caddy: Block scanner paths (.env, .git, wp-config, etc.) with 403 - CI: Gitleaks secret scanning + pnpm audit for vulnerabilities - Dependabot: Weekly npm + GitHub Actions + monthly Docker updates - Docker: Non-root user in journal, planner, and brouter containers - Server: UFW firewall (22/80/443 only) + fail2ban (8 IPs already banned) - SECURITY.md: Vulnerability disclosure policy - Privacy page: Security practices section added Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
0499133982
commit
be3e69c10b
11 changed files with 211 additions and 18 deletions
|
|
@ -21,6 +21,7 @@ COPY . .
|
|||
RUN pnpm --filter @trails-cool/journal build
|
||||
|
||||
FROM base AS runtime
|
||||
RUN addgroup --system app && adduser --system --ingroup app app
|
||||
COPY --from=deps /app/node_modules ./node_modules
|
||||
COPY --from=deps /app/apps/journal/node_modules ./apps/journal/node_modules
|
||||
COPY --from=build /app/apps/journal/build ./apps/journal/build
|
||||
|
|
@ -28,6 +29,7 @@ COPY --from=build /app/apps/journal/package.json ./apps/journal/package.json
|
|||
COPY --from=build /app/packages ./packages
|
||||
|
||||
WORKDIR /app/apps/journal
|
||||
USER app
|
||||
EXPOSE 3000
|
||||
ENV PORT=3000
|
||||
CMD ["npx", "react-router-serve", "./build/server/index.js"]
|
||||
|
|
|
|||
|
|
@ -90,6 +90,18 @@ export default function PrivacyPage() {
|
|||
</ul>
|
||||
</section>
|
||||
|
||||
<section className="mt-10">
|
||||
<h2 className="text-xl font-semibold text-gray-900">Security Practices</h2>
|
||||
<ul className="mt-3 list-disc pl-6 text-gray-600 space-y-1">
|
||||
<li><strong>Authentication</strong>: Passkey (WebAuthn) and magic link login. No passwords stored.</li>
|
||||
<li><strong>Encryption</strong>: All traffic over HTTPS with HSTS preload. Cookies are httpOnly and secure.</li>
|
||||
<li><strong>Headers</strong>: Content-Security-Policy, X-Frame-Options, X-Content-Type-Options on all responses.</li>
|
||||
<li><strong>Infrastructure</strong>: Docker containers run as non-root. Firewall restricts to HTTP/HTTPS/SSH only.</li>
|
||||
<li><strong>CI/CD</strong>: Gitleaks secret scanning and dependency auditing on every pull request.</li>
|
||||
<li><strong>Vulnerability reporting</strong>: See our <a href="https://github.com/trails-cool/trails/blob/main/SECURITY.md" className="text-blue-600 hover:underline">SECURITY.md</a> for responsible disclosure.</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<p className="mt-10 text-sm text-gray-500">
|
||||
Last updated: March 2026. If this manifest changes, we'll note it here.
|
||||
</p>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue