Security
Secure defaults depend on keeping trusted data boundaries explicit: parameterized SQL, escaped template output, protected secrets, and role checks.
Data and output
- Use prepared statements for database values. Do not pre-escape request input with
addslashes(). - Native template values are escaped by default. Use raw HTML output only for trusted or safely rendered HTML.
- The Markdown renderer escapes raw HTML and allows only safe URL schemes. It does not execute PHP or template syntax.
- Keep
Settings.json, JWT keys, passwords, and private keys out of version control.
Deployment
Use HTTPS, keep debug output disabled, change the demo password, and restrict API routes by role. Configure trusted proxies explicitly before using forwarded IP headers for rate limits. Back up the database before applying schema migrations; the Markdown migration preserves existing article bytes as legacy_html.
The CLI doctor command reports deployment checks. It is read-only and does not apply migrations.