AtoM Heratio — Security Feature Overview
Version: 2.8.2 Date: March 2026 Author: The Archive and Heritage Group (Pty) Ltd
Overview
AtoM Heratio provides enterprise-grade security for GLAM and DAM institutions, aligned with international standards including OWASP Top 10, ISO 27001, Bell-LaPadula mandatory access control, and POPIA data protection requirements.
Security Features
Authentication and Access Control
Multi-Factor Authentication (TOTP)
- Time-based One-Time Password (RFC 6238) support
- QR code enrollment via authenticator apps (Google Authenticator, Authy, etc.)
- Email code fallback for users without authenticator apps
- Per-user enrollment and removal
Account Lockout Protection
- Automatic lockout after 5 failed login attempts within 15 minutes
- Configurable lockout duration
- Automatic cleanup of expired attempt records
- IP address tracking for forensic analysis
Password Policy Enforcement
- Strong password requirements enforced by default (minimum 8 characters, mixed case, numbers, special characters)
- Password expiry with configurable interval (default 90 days)
- Password history to prevent reuse of the last 5 passwords
- Configurable via Admin > AHG Settings
Session Security
- Session ID regeneration on login (prevents session fixation)
- HttpOnly cookies (prevents JavaScript access to session tokens)
- CSRF token enforcement on all state-changing requests
Mandatory Access Control (Bell-LaPadula)
Simple Security Property (No Read-Up)
- Users can only view objects at or below their security clearance level
- Hierarchical clearance levels: PUBLIC < CONFIDENTIAL < SECRET < TOP SECRET
- Browse queries automatically filtered by clearance level
Star Property (No Write-Down)
- Users with high clearance cannot write to lower-classification objects
- Prevents accidental leakage of classified information into public records
- Applies to edit, create, update, delete, and publish actions
- Administrators are exempt for operational flexibility
Security Headers
All responses include security headers:
- HSTS — forces HTTPS connections
- X-Frame-Options — prevents clickjacking
- X-Content-Type-Options — prevents MIME sniffing
- Permissions-Policy — restricts browser features (camera, microphone, geolocation)
- Referrer-Policy — controls referrer information leakage
SSRF Protection
Outbound HTTP requests are protected against Server-Side Request Forgery:
- DNS pre-resolution to detect private/reserved IPs
- Cloud metadata endpoint blocking (169.254.169.254, etc.)
- Resolved IP pinning to prevent DNS rebinding
- Redirect following disabled or re-validated
- Response size limits enforced
Input Validation
- XXE (XML External Entity) protection on all XML parsing
- Parameterized SQL queries via Laravel Query Builder
- Shell command escaping with
escapeshellarg() - Allowlist validation for command-line options
- HTML sanitization via HtmlPurifierService
Audit Trail
- Comprehensive audit logging enabled by default
- Authentication events (login, logout, failed attempts)
- Entity CRUD operations with old/new value tracking
- Security classification access logging
- Configurable retention period
- NARSSA and POPIA compliant
POPIA Compliance
- Privacy breach register with multi-jurisdiction support
- Automated 72-hour breach notification monitoring
- CLI task for hourly deadline checks with email alerts
- DSAR (Data Subject Access Request) management
- PII scanning and visual redaction editor
- Consent management and processing activity records (ROPA)
CLI Commands
# Breach notification monitoring
php symfony privacy:breach-check # Console report
php symfony privacy:breach-check --email=dpo@example.com # Email alert
php symfony privacy:breach-check --json # JSON (for cron)
# PII scanning
php symfony privacy:scan-pii # Scan for personal data
# Jurisdiction management
php symfony privacy:jurisdiction # List jurisdictions
php symfony privacy:jurisdiction --install=popia # Install POPIA
Technical Requirements
- PHP 8.3+
- MySQL 8.0+
- AtoM 2.10 base installation
- atom-framework v2.8.2+
- ahgSecurityClearancePlugin (security classification)
- ahgPrivacyPlugin (POPIA compliance)
- ahgAuditTrailPlugin (audit logging)
Configuration
Password Policy Settings (ahg_settings table)
| Setting | Default | Description |
|---|---|---|
password_expiry_days |
90 | Days before password expires (0 = disabled) |
password_history_count |
5 | Number of previous passwords to remember |
Audit Settings (ahg_audit_settings table)
| Setting | Default | Description |
|---|---|---|
audit_enabled |
1 | Enable audit trail logging |
audit_authentication |
1 | Log authentication events |
audit_views |
0 | Log view-only actions (high volume) |
retention_days |
365 | Days to retain audit entries |
Compliance Standards
| Standard | Coverage |
|---|---|
| OWASP Top 10 (2021) | All 10 categories addressed |
| ISO 27001:2022 | A.5-A.8 organizational, A.9 access control, A.12 operations, A.14 development |
| POPIA (South Africa) | Sections 19 (safeguards), 22 (notification), Part A (conditions) |
| GDPR (EU) | Article 32 (security), Article 33 (breach notification) |
| Bell-LaPadula | Simple Security Property + Star Property |
| NARSSA | Audit trail and record keeping requirements |
For detailed technical implementation, see the Security Audit Report. For questions, contact: johan@theahg.co.za