- Markdown HTML Boundary — Owner-authored posts render at build time in
scripts/gen_content.ts; CSP inmain.tslimits script execution. - Safe Theme Init —
islands/ThemeInitializer.tsxuses direct DOM manipulation instead ofinnerHTML. - CSP Headers — Content-Security-Policy configured with Fresh's
csp()middleware inmain.ts. Local and non-production runs use report-only mode; Deno Deploy/DENO_ENV=productionenforces the policy with nonce support for Fresh-rendered inline scripts/styles. Generated Shiki token styles require a narrowstyle-src-attr 'unsafe-inline'allowance. - GitHub API Auth — Optional
GITHUB_TOKENenv var inlib/github.ts(raises rate limit from 60 to 5000 req/hr). - Path Traversal —
validateSlug()inlib/security.ts, used byroutes/[slug].tsx. - Output Encoding —
escapeHtml()andsanitizeMetaContent()inlib/security.ts, used bycomponents/SEO.tsx. - XML Sanitization —
escapeXml()inlib/security.ts, used byscripts/gen_content.ts. - GitHub Repo Validation —
validateGitHubRepo()inlib/security.ts. - Security Headers —
Strict-Transport-Security,X-Content-Type-Options,X-Frame-Options,X-XSS-Protection,Referrer-Policy,Cross-Origin-Opener-Policy, andPermissions-Policyset inmain.tsmiddleware. - Rate Limiting —
RateLimiterclass inlib/security.ts(in-memory, per-identifier).
Set GITHUB_TOKEN to increase GitHub API rate limits:
export GITHUB_TOKEN="your_github_personal_access_token"Required permission: public_repo (no additional scopes needed).
deno task testCovers: XSS protection, input validation, path traversal, XML escaping, GitHub repo format validation.