Security Policy ¶
Supported Versions ¶
Use this section to tell people about which versions of Wiki-Go are currently being supported with security updates.
| Version |
Supported |
| latest |
✅ |
Reporting a Vulnerability ¶
We take the security of Wiki-Go seriously. If you believe you've found a security vulnerability, please follow these steps:
- Do not disclose the vulnerability publicly or on the public issue tracker.
- Submit your findings through our contact form.
- Allow time for us to review and address the vulnerability before any public disclosure.
- We'll respond as quickly as possible to acknowledge receipt of your report.
Security Features ¶
Wiki-Go includes several security features:
- Password Storage: All passwords are hashed using bcrypt with appropriate cost factors.
- Authentication: Session-based authentication with secure, HTTP-only cookies and hashed token persistence.
- TLS Support: Built-in TLS support for encrypted connections.
- Role-Based Access Control: Fine-grained permissions through admin, editor, and viewer roles.
- Path-Based Access Rules: Granular document access control using glob patterns, access levels, and group membership.
- File Upload Validation: MIME type checking for uploaded files (can be disabled if needed).
- Private Wiki Mode: Option to require authentication for all pages.
- Login Rate Limiting: Built-in protection against brute force attacks by temporarily banning IP addresses after multiple failed login attempts, with exponential backoff.
Role-Based Access Control ¶
Wiki-Go implements a hierarchical role system combined with path-based access rules for comprehensive access management.
User Roles ¶
Each user is assigned one of three roles:
| Permission |
Admin |
Editor |
Viewer |
| View documents |
✅ |
✅ |
✅ |
| Add documents |
✅ |
✅ |
|
| Edit documents |
✅ |
✅ |
|
| Delete documents |
✅ |
✅ |
|
| Move documents |
✅ |
✅ |
|
| Manage versions |
✅ |
✅ |
|
| Post comments |
✅ |
✅ |
✅ |
| Delete comments |
✅ |
|
|
| Manage users |
✅ |
|
|
| Manage access rules |
✅ |
|
|
| Manage settings |
✅ |
|
|
Roles are hierarchical, admins bypass all access rule restrictions and always have full access.
User Groups ¶
Users can be assigned to one or more groups for fine-grained access control:
users:
- username: alice
role: editor
groups: [finance, hr]
- username: bob
role: viewer
groups: [finance]
Groups work in conjunction with access rules to restrict document visibility.
Path-Based Access Rules ¶
Access rules define who can view specific documents or folders based on URL path patterns.
Access Levels ¶
| Who can view |
Public |
Private |
Restricted |
| Unauthenticated users |
✅ |
|
|
| Authenticated users |
✅ |
✅ |
|
| Group members |
✅ |
✅ |
✅ |
| Admin users |
✅ |
✅ |
✅ |
Pattern Matching ¶
Rules use glob-style patterns:
| Pattern |
Matches |
/finance/** |
/finance, /finance/reports, /finance/2024/q1 |
/docs/* |
/docs/readme (single level only) |
/secret |
Exactly /secret |
Rule Evaluation ¶
- Rules are evaluated in order (first match wins)
- If no rule matches:
- Private wiki: Authenticated users only
- Public wiki: Everyone has access
- Admins always have access regardless of rules
Example Configuration ¶
access_rules:
- pattern: "/finance/**"
access: restricted
groups: [finance, executives]
description: "Financial documents - finance team only"
- pattern: "/internal/**"
access: private
description: "Internal docs - any authenticated user"
- pattern: "/public/**"
access: public
description: "Public documentation"
Managing Access Rules ¶
Access rules are managed through the Admin Interface under Settings → Access Rules tab. From there you can:
- Create new rules with pattern, access level, groups, and description
- Edit existing rules
- Delete rules
- Reorder rules via drag-and-drop (important since first match wins)
Rules are automatically saved to config.yaml, manual editing of the config file is not required.
Login Rate Limiting ¶
Wiki-Go includes built-in protection against brute force attacks by temporarily banning IP addresses after multiple failed login attempts.
How It Works ¶
- Monitoring Failed Attempts: The system tracks failed login attempts by IP address.
- Exponential Backoff: Ban durations double with each subsequent failure, providing increasing protection against persistent attacks.
- Configurable Parameters: All aspects of the rate limiting system can be customized via the admin interface.
- Persistence: Ban data is stored in
data/temp/login_ban.json and persists across application restarts.
Default Settings ¶
The login ban system is enabled by default with the following settings:
- Enabled: Yes
- Maximum Failures: 3 (failures before triggering a ban)
- Window Time: 30 seconds (time window in which failures are counted)
- Initial Ban Duration: 60 seconds (length of the first ban)
- Maximum Ban Duration: 86400 seconds (24 hours, upper limit for exponential backoff)
User Experience ¶
- First 3 failures → Standard error message ("Invalid username or password")
- After 3 failures → 1-minute ban with message "Too many failed login attempts; try again later"
- After ban expires, next failure → 2-minute ban (doubling each time)
- Ban durations continue doubling up to the configured maximum
- Successful login resets all ban state for that IP address
Configuration ¶
Administrators can adjust the login ban settings through:
- Admin Interface: Settings → Security tab
- Config File: Edit the
security section in config.yaml
Example config.yaml section:
security:
login_ban:
enabled: true
max_failures: 5
window_seconds: 180
initial_ban_seconds: 60
max_ban_seconds: 86400 # 24 hours
Error Messages ¶
- Regular failed login: "Invalid username or password"
- Banned state: "Too many failed login attempts; try again later"
- When banned, the client also receives HTTP status 429 (Too Many Requests) with a "Retry-After" header
Session Security ¶
Wiki-Go implements secure session management with persistence capabilities.
Storage and Persistence ¶
- File-Based Storage: Active sessions are persisted to
data/temp/sessions.json to maintain login state across application restarts.
- Token Hashing: Session tokens are hashed using SHA256 before being stored on disk. This provides a critical security layer:
- The browser holds the raw token (the "key").
- The server stores the hashed token (the "lock").
- If the session file is compromised, attackers only obtain the hashes, which cannot be used to authenticate requests.
Session Lifecycle ¶
- Expiration: Standard sessions expire after 24 hours. "Keep me logged in" sessions persist for 30 days.
- Automatic Cleanup: The system automatically purges expired sessions from both memory and disk to maintain hygiene and security.
- Secure Cookies: Session tokens are transmitted via
HttpOnly, SameSite=Strict cookies, preventing XSS and CSRF attacks.
Security Recommendations ¶
For secure deployment of Wiki-Go, we recommend:
- Always use HTTPS in production environments.
- Set
allow_insecure_cookies: false (the default) to enforce secure cookies.
- Change the default admin password immediately after installation.
- Set strong passwords for all accounts, especially admin accounts.
- Enable login rate limiting through the security settings to prevent brute force attacks.
- Configure access rules for sensitive documents, use restricted access with groups for confidential content.
- Regularly review access rules to ensure rule order and group assignments are correct.
- Regularly update to the latest version for security patches.
- Use a reverse proxy like Nginx, Caddy, or Traefik for additional security layers.
- Back up your data regularly to prevent data loss.
- Set appropriate file upload size limits to prevent denial of service attacks.
- Regularly review user accounts and group memberships to ensure only authorized users have access.
Dependency Management ¶
Wiki-Go uses Go modules for dependency management. All dependencies are vendored to ensure reproducible builds.
Security Practices ¶
Our security practices include:
- Regular code review with a focus on security
- Input validation to prevent injection attacks
- Proper error handling to avoid information leakage
- Use of standard libraries for cryptographic operations
- Secure session management
- Principle of least privilege for user roles
Known Issues ¶
No known security issues at this time.
For security concerns, please use our contact form.
Comments
Please login to leave a comment.
No comments yet. Be the first to comment!