Security / Model

Security

This site is a static publication. The security model is small on purpose: no backend, no database, no user accounts, and no runtime secrets.

01

Static boundary

Every public page is pre-rendered HTML. There is no application server, database, upload endpoint or login for visitors. The content editor is a client-side Git client; it writes through the GitHub API.

02

Editor authentication

The CMS uses a fine-grained GitHub token with repository Contents read/write. The token is stored in the browser's localStorage and is never committed. The default OAuth flow is disabled because the site is not hosted on Netlify.

03

Supply chain

Dependencies are locked, the CMS script is version-pinned with SRI, and CI runs type checks, tests, content checks, budget checks and accessibility audits. Dependency advisories are handled through the lockfile and audit results.

04

Media and uploads

Images are uploaded to public/media through the CMS, limited by format and size. SVG is served as an image; it is not executed as a page script. Article HTML is authored by the site owner, not by visitors.

05

Privacy

No analytics, advertising or tracking cookies. Fonts are self-hosted. The public site does not call a third-party API; only the admin page loads the CMS bundle from a pinned CDN.

06

Known limits

GitHub Pages does not allow custom response headers. A meta CSP, strict referrer policy and admin noindex are in place; HSTS, frame-ancestors and arbitrary headers require Cloudflare or another CDN. GitHub provides transport security and platform-level protections.

Report a security issue

If you find a problem, email me with the URL, steps to reproduce and impact. Please do not open a public issue with exploit details.

ContactGU-IDchen@outlook.com

Command palette

Esc

↑↓ selectEnter runEsc close